PHP验证身份证号是否正确的函数

PHP 验证身份证号是否正确的函数,函数代码如下:

  1. function validation_filter_id_card($id_card){ 
  2.     if(strlen($id_card)==18){ 
  3.         return idcard_checksum18($id_card); 
  4.     }elseif((strlen($id_card)==15)){ 
  5.         $id_card=idcard_15to18($id_card); 
  6.         return idcard_checksum18($id_card); 
  7.     }else
  8.         return false; 
  9.     } 
  10. // 计算身份证校验码,根据国家标准GB 11643-1999  
  11. function idcard_verify_number($idcard_base){ 
  12.     if(strlen($idcard_base)!=17){ 
  13.         return false; 
  14.     } 
  15.     //加权因子  
  16.     $factor=array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2); 
  17.     //校验码对应值  
  18.     $verify_number_list=array('1','0','X','9','8','7','6','5','4','3','2'); 
  19.     $checksum=0; 
  20.     for($i=0;$i<strlen($idcard_base);$i++){ 
  21.         $checksum += substr($idcard_base,$i,1) * $factor[$i]; 
  22.     } 
  23.     $mod=$checksum % 11; 
  24.     $verify_number=$verify_number_list[$mod]; 
  25.     return $verify_number
  26. // 将15位身份证升级到18位  
  27. function idcard_15to18($idcard){ 
  28.     if(strlen($idcard)!=15){ 
  29.         return false; 
  30.     }else
  31.         // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码  
  32.         if(array_search(substr($idcard,12,3),array('996','997','998','999')) !== false){ 
  33.             $idcard=substr($idcard,0,6).'18'.substr($idcard,6,9); 
  34.         }else
  35.             $idcard=substr($idcard,0,6).'19'.substr($idcard,6,9); 
  36.         } 
  37.     } 
  38.     $idcard=$idcard.idcard_verify_number($idcard); 
  39.     return $idcard
  40. // 18位身份证校验码有效性检查  
  41. function idcard_checksum18($idcard){ 
  42.     if(strlen($idcard)!=18){ 
  43.         return false; 
  44.     } 
  45.     $idcard_base=substr($idcard,0,17); 
  46.     if(idcard_verify_number($idcard_base)!=strtoupper(substr($idcard,17,1))){ 
  47.         return false; 
  48.     }else
  49.         return true; 
  50.     } 

调用方法如:

  1. validation_filter_id_card('身份证号码'); 

转载请注明:代码家园 » PHP验证身份证号是否正确的函数

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)