新老身份证验证
记录下自己记不住的 也不想记住的
1 function isIdCard( $id ) 2 { 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 //检查(某种角度上讲 15位身份证号码肯定是19年开头的)生日日期是否正确 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 } 52 else 53 { 54 return TRUE; 55 } 56 } 57 } 58 59 }
作者地址:https://www.cnblogs.com/G921123/
创作也有乐趣 知识分享 转载注明出处 相互理解 谢谢!
创作也有乐趣 知识分享 转载注明出处 相互理解 谢谢!