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

 

你可能感兴趣的:(PowerBuilder)