附上一个我转换的目前最全的身份证归属地库。 
 
 
下面是一个身份证是否符合iso规范的校验函数。- function idcard_verify_number($idcard_base){ 
 
 - if (strlen($idcard_base) != 17){ return false; } 
 
 - // 加权因子 
 
 - $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); 
 
 - // 校验码对应值 
 
 - $verify_number_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); 
 
 - $checksum = 0; 
 
 - for ($i = 0; $i < strlen($idcard_base); $i++){ 
 
 - $checksum += substr($idcard_base, $i, 1) * $factor[$i]; 
 
 - } 
 
 - $mod = $checksum % 11; 
 
 - $verify_number = $verify_number_list[$mod]; 
 
 - return $verify_number; 
 
 - } 
 
 - function idcard_checksum18($idcard){ 
 
 - if (strlen($idcard) != 18){ return false; } 
 
 - $idcard_base = substr($idcard, 0, 17); 
 
 - if (idcard_verify_number($idcard_base) != strtoupper(substr($idcard, 17, 1))){ 
 
 - return false; 
 
 - }else{ 
 
 - return true; 
 
 - } 
 
 - }
 
  复制代码 |