国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php驗證身份證號碼是否正確函數

2024-05-04 21:49:57
字體:
來源:轉載
供稿:網友

身份證驗證最簡單的就是判斷長度了,當然這種非常簡單破了如果要更規則一點我們需要對身份證號碼進行一些按生成規則驗證了,下面整理了一些函數我們來看看。

例子,今天分享一個php驗證身份證號碼是否正確函數.

  1. /********************php驗證身份證號碼是否正確函數*********************/ 
  2. function is_idcard( $id ) 
  3.     $id = strtoupper($id); 
  4.     $regx = "/(^/d{15}$)|(^/d{17}([0-9]|X)$)/"
  5.     $arr_split = array(); 
  6.     if(!preg_match($regx$id)) 
  7.     { 
  8.         return FALSE; 
  9.     } 
  10.     if(15==strlen($id)) //檢查15位 
  11.     { 
  12.         $regx = "/^(/d{6})+(/d{2})+(/d{2})+(/d{2})+(/d{3})$/"
  13.  
  14.         @preg_match($regx$id$arr_split); 
  15.         //檢查生日日期是否正確 
  16.         $dtm_birth = "19".$arr_split[2] . '/' . $arr_split[3]. '/' .$arr_split[4]; 
  17.         if(!strtotime($dtm_birth)) 
  18.         { 
  19.             return FALSE; 
  20.         } else { 
  21.             return TRUE; 
  22.         } 
  23.     } 
  24.     else           //檢查18位 
  25.     { 
  26.         $regx = "/^(/d{6})+(/d{4})+(/d{2})+(/d{2})+(/d{3})([0-9]|X)$/"
  27.         @preg_match($regx$id$arr_split); 
  28.         $dtm_birth = $arr_split[2] . '/' . $arr_split[3]. '/' .$arr_split[4]; 
  29.         if(!strtotime($dtm_birth))  //檢查生日日期是否正確 
  30.         { 
  31.             return FALSE; 
  32.         } 
  33.         else 
  34.         { 
  35.             //檢驗18位身份證的校驗碼是否正確。 
  36.             //校驗位按照ISO 7064:1983.MOD 11-2的規定生成,X可以認為是數字10。 
  37.             $arr_int = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); 
  38.             $arr_ch = array('1''0''X''9''8''7''6''5''4''3''2'); 
  39.             $sign = 0; 
  40.             for ( $i = 0; $i < 17; $i++ ) 
  41.             { 
  42.                 $b = (int) $id{$i}; 
  43.                 $w = $arr_int[$i]; 
  44.                 $sign += $b * $w
  45.             } 
  46.             $n  = $sign % 11; 
  47.             $val_num = $arr_ch[$n]; 
  48.             if ($val_num != substr($id,17, 1)) 
  49.             { 
  50.                 return FALSE; 
  51.             } //Vevb.com 
  52.             else 
  53.             { 
  54.                 return TRUE; 
  55.             } 
  56.         } 
  57.     } 
  58.  
  59. /*調用身份證驗證函數*/ 
  60.  
  61. $idc=is_idcard("身份證號碼"); 
  62. if($idc){echo "正確";}else{echo "錯誤";} 

例子二:

  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.  } 

調用方法如:validation_filter_id_card('身份證號碼');

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 烟台市| 太湖县| 环江| 游戏| 青岛市| 高雄县| 黔江区| 浮梁县| 长沙市| 汉中市| 阳新县| 乐至县| 岑巩县| 密山市| 陇川县| 明水县| 商河县| 景宁| 安岳县| 桦甸市| 泉州市| 阿瓦提县| 江陵县| 泸州市| 辽宁省| 泸溪县| 积石山| 灌南县| 海伦市| 长海县| 贵德县| 博湖县| 娄底市| 封开县| 莒南县| 遵化市| 夏津县| 广饶县| 沈丘县| 澄江县| 临泉县|