首页 > 语言 > PHP > 正文

php身份证验证相关类

2024-09-04 11:44:02
字体:
来源:转载
供稿:网友
  1. <?php  
  2. class IdcardAction extends Action{  
  3. // PHP根据身份证号,自动获取对应的星座函数  
  4. function get_xingzuo($cid) { // 根据身份证号,自动返回对应的星座  
  5.     if (!$this->isIdCard($cid)) return '';  
  6.     $bir = substr($cid,10,4);  
  7.     $month = (int)substr($bir,0,2);  
  8.     $day = (int)substr($bir,2);  
  9.     $strValue = '';  
  10.     if (($month == 1 && $day >= 20) || ($month == 2 && $day <= 18)) {  
  11.         $strValue = "水瓶座";  
  12.     } else if (($month == 2 && $day >= 19) || ($month == 3 && $day <= 20)) {  
  13.         $strValue = "双鱼座";  
  14.     } else if (($month == 3 && $day > 20) || ($month == 4 && $day <= 19)) {  
  15.         $strValue = "白羊座";  
  16.     } else if (($month == 4 && $day >= 20) || ($month == 5 && $day <= 20)) {  
  17.         $strValue = "金牛座";  
  18.     } else if (($month == 5 && $day >= 21) || ($month == 6 && $day <= 21)) {  
  19.         $strValue = "双子座";  
  20.     } else if (($month == 6 && $day > 21) || ($month == 7 && $day <= 22)) {  
  21.         $strValue = "巨蟹座";  
  22.     } else if (($month == 7 && $day > 22) || ($month == 8 && $day <= 22)) {  
  23.         $strValue = "狮子座";  
  24.     } else if (($month == 8 && $day >= 23) || ($month == 9 && $day <= 22)) {  
  25.         $strValue = "处女座";  
  26.     } else if (($month == 9 && $day >= 23) || ($month == 10 && $day <= 23)) {  
  27.         $strValue = "天秤座";  
  28.     } else if (($month == 10 && $day > 23) || ($month == 11 && $day <= 22)) {  
  29.         $strValue = "天蝎座";  
  30.     } else if (($month == 11 && $day > 22) || ($month == 12 && $day <= 21)) {  
  31.         $strValue = "射手座";  
  32.     } else if (($month == 12 && $day > 21) || ($month == 1 && $day <= 19)) {  
  33.         $strValue = "魔羯座";  
  34.     }  
  35.     return $strValue;  
  36.        
  37. }  
  38. function get_shengxiao($cid) { //根据身份证号,自动返回对应的生肖  
  39.     if (!$this->isIdCard($cid)) return '';  
  40.     $start = 1901;  
  41.     $end = $end = (int)substr($cid,6,4);  
  42.     $x = ($start - $end) % 12;  
  43.     $value = "";          
  44.     if ($x == 1 || $x == -11) {$value = "鼠";}  
  45.     if ($x == 0) { $value = "牛";}  
  46.     if ($x == 11 || $x == -1) {$value = "虎";}  
  47.     if ($x == 10 || $x == -2) {$value = "兔";}  
  48.     if ($x == 9 || $x == -3) {$value = "龙";}  
  49.     if ($x == 8 || $x == -4) {$value = "蛇";}  
  50.     if ($x == 7 || $x == -5) {$value = "马";}  
  51.     if ($x == 6 || $x == -6) {$value = "羊";}  
  52.     if ($x == 5 || $x == -7) {$value = "猴";}  
  53.     if ($x == 4 || $x == -8) {$value = "鸡";}  
  54.     if ($x == 3 || $x == -9) {$value = "狗";}  
  55.     if ($x == 2 || $x == -10) {$value = "猪";}  
  56.     return $value;  
  57. }  
  58. function get_xingbie($cid) { //根据身份证号,自动返回性别  
  59.     if (!$this->isIdCard($cid)) return '';  
  60.     $sexint = (int)substr($cid,16,1);  
  61.        
  62.     return $sexint % 2 === 0 ? '女' : '男';  
  63. }  
  64.    
  65. function checkbig18($idcard){//判断是否成年  
  66.      $year = substr($idcard,6,4);  
  67.      $big18 = $year+18;  
  68.      $nowyear = date("Y",time());  
  69.      if($big18 <= $nowyear){  
  70.      return true;  
  71.      }else{  
  72.     return false;   
  73.          }  
  74.     }  
  75.        
  76. function getVerifyBit($idcard_base)  
  77.     {  
  78.         if(strlen($idcard_base) != 17)  
  79.         {  
  80.             return false;  
  81.         }  
  82.         //加权因子  
  83.         $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);  
  84.         //校验码对应值  
  85.         $verify_number_list = array('1''0''X''9''8''7''6''5''4''3''2');  
  86.         $checksum = 0;  
  87.         for ($i = 0; $i < strlen($idcard_base); $i++)  
  88.         {  
  89.             $checksum += substr($idcard_base$i, 1) * $factor[$i];  
  90.         }  
  91.         $mod = $checksum % 11;  
  92.         $verify_number = $verify_number_list[$mod];  
  93.         return $verify_number;  
  94. }  
  95.    
  96. function idcard_verify_number($idcard_base){   
  97. if (strlen($idcard_base) != 17){ return false; }   
  98. // 加权因子   
  99. $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);  
  100. // 校验码对应值   
  101. $verify_number_list = array('1''0''X''9''8''7''6''5''4''3''2');  
  102. $checksum = 0;  
  103. for ($i = 0; $i < strlen($idcard_base); $i++){   
  104. $checksum += substr($idcard_base$i, 1) * $factor[$i];   
  105. }  
  106.    
  107. $mod = $checksum % 11;   
  108. $verify_number = $verify_number_list[$mod];  
  109.    
  110. return $verify_number;   
  111. }  
  112.    
  113.    
  114.    
  115.    
  116. function idcard_15to18($idcard){//15到18转换  
  117. if (strlen($idcard) != 15){   
  118. return false;   
  119. }else{   
  120. // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码   
  121. if (array_search(substr($idcard, 12, 3), array('996''997''998''999')) !== false){   
  122. $idcard = substr($idcard, 0, 6) . '18'substr($idcard, 6, 9);   
  123. }else{   
  124. $idcard = substr($idcard, 0, 6) . '19'substr($idcard, 6, 9);   
  125. }   
  126. }  
  127.    
  128. $idcard = $idcard.$this->idcard_verify_number($idcard);  
  129. return $idcard;   
  130. }  
  131.    
  132.    
  133. function Check_Cardid($cardid)//判断身份证大是否正确。  
  134. {  
  135.  $cardlen = strlen($cardid);  
  136.  if($cardlen ==15)  
  137.  {  
  138.   $pattern = "/^[0-9]{15}$/"//$pattern="/^d{15}$/";  
  139.   $num = preg_match($pattern,$cardid);  
  140.  }  
  141.  elseif($cardlen ==18)  
  142.  {  
  143.   $pattern = "/^d{17}[0-9xX]$/";  
  144.   $num=preg_match($pattern,$cardid);  
  145.  }  
  146.  else 
  147.  {  
  148.   return false;  
  149.  }  
  150.  return $num;  
  151. }  
  152.    
  153. function ChkGB2312($str){//判断是否为中文  
  154. if(preg_match('/^[x7f-xff]+$/',$str)){  
  155.     return true;  
  156.     }else{  
  157.     return false;  
  158.     }  
  159. }  
  160.    
  161. function isIdCard($number) { // 检查是否是身份证号  
  162.     // 转化为大写,如出现x  
  163.     $number = strtoupper($number);  
  164.     //加权因子   
  165.     $wi = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);  
  166.     //校验码串   
  167.     $ai = array('1''0''X''9''8''7''6''5''4''3''2');  
  168.     //按顺序循环处理前17位   
  169.     $sigma = 0;  
  170.     for ($i = 0;$i < 17;$i++) {   
  171.         //提取前17位的其中一位,并将变量类型转为实数   
  172.         $b = (int) $number{$i};   
  173.     
  174.         //提取相应的加权因子   
  175.         $w = $wi[$i];  
  176.     
  177.         //把从身份证号码中提取的一位数字和加权因子相乘,并累加  
  178.         $sigma += $b * $w;   
  179.     }  
  180.     //计算序号   
  181.     $snumber = $sigma % 11;   
  182.     
  183.     //按照序号从校验码串中提取相应的字符。   
  184.     $check_number = $ai[$snumber];  
  185.     
  186.     if ($number{17} == $check_number) {  
  187.         return true;  
  188.     } else {  
  189.         return false;  
  190.     }  
  191. }  
  192. }  
  193. ?> 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表