计算身份证校验码,根据国家标准GB 11643-1999

其中的$idcard_base是指身份证中的本位码,本位码是18位身份证里才有的,也就是18位身份证的前17位,最后一位称为校验码 一般在使用的时候不用直接调用idcard_verify_number(),平时的应用大多是使用后两个函数 这些函数都没有关心身份证字符串的格式问题,在调用前自行进行格式检查
 1 None.gif // 计算身份证校验码,根据国家标准GB 11643-1999 
 2 None.giffunction idcard_verify_number($idcard_base){ 
 3 None.gif   if (strlen($idcard_base) != 17){ return false; } 
 4 None.gif
 5 None.gif   // 加权因子 
 6 None.gif   $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); 
 7 None.gif    
 8 None.gif   // 校验码对应值 
 9 None.gif   $verify_number_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); 
10 None.gif
11 None.gif   $checksum = 0; 
12 None.gif   for ($i = 0; $i  <  strlen ($idcard_base); $i++){ 
13 None.gif       $checksum + = substr($idcard_base,  $i, 1) * $factor[$i]; 
14 None.gif   } 
15 None.gif
16 None.gif   $mod  = $checksum  % 11; 
17 None.gif   $verify_number  = $verify_number_list[$mod]; 
18 None.gif
19 None.gif    return $verify_number; 
20 None.gif
21 None.gif
22 None.gif
23 None.gif// 将15位身份证升级到18位 
24 None.giffunction idcard_15to18($idcard){ 
25 None.gif   if (strlen($idcard) ! = 15){ 
26 None.gif        return false; 
27 None.gif   }else{ 
28 None.gif       // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码 
29 None.gif       if (array_search(substr($idcard, 12, 3), array('996', '997', '998', '999')) ! ==  false){ 
30 None.gif           $idcard  = substr($idcard,  0, 6) . '18'. substr($idcard, 6, 9); 
31 None.gif       }else{ 
32 None.gif           $idcard  = substr($idcard,  0, 6) . '19'. substr($idcard, 6, 9); 
33 None.gif       } 
34 None.gif   } 
35 None.gif
36 None.gif   $idcard  = $idcard  . idcard_verify_number($idcard); 
37 None.gif
38 None.gif   return $idcard; 
39 None.gif
40 None.gif
41 None.gif// 18位身份证校验码有效性检查 
42 None.giffunction idcard_checksum18($idcard){ 
43 None.gif   if (strlen($idcard) ! = 18){  return false; } 
44 None.gif   $idcard_base  = substr($idcard,  0, 17); 
45 None.gif
46 None.gif   if (idcard_verify_number($idcard_base) ! = strtoupper(substr($idcard,  17, 1))){ 
47 None.gif       return false; 
48 None.gif   }else{ 
49 None.gif       return true; 
50 None.gif   } 
51 None.gif
52 None.gif
53 None.gif

转载于:https://www.cnblogs.com/amgod/archive/2005/05/08/150648.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值