话不多说,请看代码:
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;
}
}
}
}
|
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持服务器之家!