话不多说,请看代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
function is_idcard( $id ) { $id = strtoupper ( $id ); $regx = "/(^\d{15}$)|(^\d{17}([0-9]|X)$)/" ; $arr_split = array (); if (!preg_match( $regx , $id )) { return FALSE; } if (15== strlen ( $id )) //检查15位 { $regx = "/^(\d{6})+(\d{2})+(\d{2})+(\d{2})+(\d{3})$/" ; @preg_match( $regx , $id , $arr_split ); //检查生日日期是否正确 $dtm_birth = "19" . $arr_split [2] . '/' . $arr_split [3]. '/' . $arr_split [4]; if (! strtotime ( $dtm_birth )) { return FALSE; } else { return TRUE; } } else //检查18位 { $regx = "/^(\d{6})+(\d{4})+(\d{2})+(\d{2})+(\d{3})([0-9]|X)$/" ; @preg_match( $regx , $id , $arr_split ); $dtm_birth = $arr_split [2] . '/' . $arr_split [3]. '/' . $arr_split [4]; if (! strtotime ( $dtm_birth )) //检查生日日期是否正确 { return FALSE; } else { //检验18位身份证的校验码是否正确。 //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。 $arr_int = array (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); $arr_ch = array ( '1' , '0' , 'X' , '9' , '8' , '7' , '6' , '5' , '4' , '3' , '2' ); $sign = 0; for ( $i = 0; $i < 17; $i ++ ) { $b = (int) $id { $i }; $w = $arr_int [ $i ]; $sign += $b * $w ; } $n = $sign % 11; $val_num = $arr_ch [ $n ]; if ( $val_num != substr ( $id ,17, 1)) { return FALSE; } else { return TRUE; } } } } |
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持服务器之家!