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

 

posted @ 2014-04-04 13:22  PBER  阅读(1714)  评论(0编辑  收藏  举报