验证身份证号是否正确

  1. /** 
  2.  * 验证身份证号 
  3.  * @param $vStr 
  4.  * @return bool 
  5.  */  
  6. function isCreditNo_simple($vStr)  
  7. {  
  8.     $vCity = array(  
  9.         '11''12''13''14''15''21''22',  
  10.         '23''31''32''33''34''35''36',  
  11.         '37''41''42''43''44''45''46',  
  12.         '50''51''52''53''54''61''62',  
  13.         '63''64''65''71''81''82''91'  
  14.     );  
  15.   
  16.     if (!preg_match('/^([\d]{17}[xX\d]|[\d]{15})$/'$vStr)) return false;  
  17.   
  18.     if (!in_array(substr($vStr, 0, 2), $vCity)) return false;  
  19.   
  20.     $vStr = preg_replace('/[xX]$/i''a'$vStr);  
  21.     $vLength = strlen($vStr);  
  22.   
  23.     if ($vLength == 18) {  
  24.         $vBirthday = substr($vStr, 6, 4) . '-' . substr($vStr, 10, 2) . '-' . substr($vStr, 12, 2);  
  25.     } else {  
  26.         $vBirthday = '19' . substr($vStr, 6, 2) . '-' . substr($vStr, 8, 2) . '-' . substr($vStr, 10, 2);  
  27.     }  
  28.   
  29.     if (date('Y-m-d'strtotime($vBirthday)) != $vBirthdayreturn false;  
  30.     if ($vLength == 18) {  
  31.         $vSum = 0;  
  32.   
  33.         for ($i = 17; $i >= 0; $i--) {  
  34.             $vSubStr = substr($vStr, 17 - $i, 1);  
  35.             $vSum += (pow(2, $i) % 11) * (($vSubStr == 'a') ? 10 : intval($vSubStr, 11));  
  36.         }  
  37.   
  38.         if ($vSum % 11 != 1) return false;  
  39.     }  
  40.   
  41.     return true;  
  42. }  

猜你喜欢

转载自blog.csdn.net/fly_on_the_sky/article/details/80337854
今日推荐