Powerbuilder编写身份证校验码
1 public function boolean of_calc_cardid_verifycode (string as_cardid, ref string as_verifycode); 2 /* 3 计算身份证校验码 王贤进 2014.03.15 4 参数:string as_cardid 身份证的前17位或18位(第18位可随便) 5 ref string as_verifycode 返回校验码,即身份证的第18位值 6 返回值: TRUE为有效身份证号,并将校验码在as_verifycode中返回 7 FALSE为无效身份证号 8 原理参考:http://zh.wikisource.org/wiki/GB_11643-1999_%E5%85%AC%E6%B0%91%E8%BA%AB%E4%BB%BD%E5%8F%B7%E7%A0%81 9 */ 10 char Ai[17] 11 int Wi[17] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2} 12 char codeTable[0 to 10]="10X98765432" 13 string ls_carid 14 ls_carid = Trim(as_cardid) 15 IF Len(ls_carid) <> 17 AND len(ls_carid)<>18 Then Return false 16 Ai = Left(ls_carid,17) 17 IF Not Match(Ai,"^[0-9]+$") Then Return false 18 19 long ll_l,ll_sum 20 ll_sum = 0 21 for ll_l = 1 To 17 22 ll_sum += long(Ai[ll_l]) * Wi[ll_l] 23 Next 24 25 as_verifycode = codeTable[ Mod(ll_sum,11)] 26 Return True 27 end function