当前位置:首页 > PHP教程 > php应用 > 列表

php身份证验证

发布:smiling 来源: PHP粉丝网  添加日期:2014-07-07 16:30:58 浏览: 评论:0 

以前我要验证身份证我们多半会使用正则判断用户输入是不是15位或18位的全数字,然后来判断身份证是否合法了,这种方法只是最基础的,下面提供的这个身份证验证,可以识别真假身份证.

代码如下:

  1. <?php  
  2. $IDCard = new IDCard();  
  3. var_dump($IDCard::isCard($_GET['card']));  
  4.    
  5. /**  
  6.  * 身份证处理类  
  7.  */ 
  8. class IDCard {  
  9.    
  10.     //检证身份证是否正确  
  11.     public static function isCard($card) {  
  12.         $card = self::to18Card($card);  
  13.         if (strlen($card) != 18) {  
  14.             return false;  
  15.         }  
  16.    
  17.         $cardBase = substr($card, 0, 17);  
  18.    
  19.         return (self::getVerifyNum($cardBase) == strtoupper(substr($card, 17, 1)));  
  20.     }  
  21.    
  22.    
  23.     //格式化15位身份证号码为18位  
  24.     public static function to18Card($card) {  
  25.         $card = trim($card);  
  26.    
  27.         if (strlen($card) == 18) {  
  28.             return $card;  
  29.         }  
  30.    
  31.         if (strlen($card) != 15) {  
  32.             return false;  
  33.         }  
  34.    
  35.         // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码  
  36.         if (array_search(substr($card, 12, 3), array('996''997''998''999')) !== false) {  
  37.             $card = substr($card, 0, 6) . '18' . substr($card, 6, 9);  
  38.         } else {  
  39.             $card = substr($card, 0, 6) . '19' . substr($card, 6, 9);  
  40.         }  
  41.         $card = $card . self::getVerifyNum($card);  
  42.         return $card;  
  43.     }  
  44.    
  45.     // 计算身份证校验码,根据国家标准gb 11643-1999  
  46.     private static function getVerifyNum($cardBase) {  
  47.         if (strlen($cardBase) != 17) {  
  48.             return false;  
  49.         }  
  50.         // 加权因子  
  51.         $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);  
  52.    
  53.         // 校验码对应值  
  54.         $verify_number_list = array('1''0''X''9''8''7''6''5''4''3''2');  
  55.    
  56.         $checksum = 0;  
  57.         for ($i = 0; $i < strlen($cardBase); $i++) {  
  58.             $checksum += substr($cardBase$i, 1) * $factor[$i];  
  59.         }  
  60.    
  61.         $mod = $checksum % 11;  
  62.         $verify_number = $verify_number_list[$mod];  
  63.    
  64.         return $verify_number;  
  65.     }  
  66. }  
  67.    
  68. ?> 

Tags: php身份证验证

分享到: