本文实例讲述了php正则判断是否为合法身份证号的方法。分享给大家供大家参考,具体如下:
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
|
/**
* 判断是否为合法的身份证号码
* @param $mobile
* @return int
*/
function isCreditNo( $vStr ){
$vCity = array (
'11' , '12' , '13' , '14' , '15' , '21' , '22' ,
'23' , '31' , '32' , '33' , '34' , '35' , '36' ,
'37' , '41' , '42' , '43' , '44' , '45' , '46' ,
'50' , '51' , '52' , '53' , '54' , '61' , '62' ,
'63' , '64' , '65' , '71' , '81' , '82' , '91'
);
if (!preg_match( '/^([\d]{17}[xX\d]|[\d]{15})$/' , $vStr )) return false;
if (!in_array( substr ( $vStr , 0, 2), $vCity )) return false;
$vStr = preg_replace( '/[xX]$/i' , 'a' , $vStr );
$vLength = strlen ( $vStr );
if ( $vLength == 18) {
$vBirthday = substr ( $vStr , 6, 4) . '-' . substr ( $vStr , 10, 2) . '-' . substr ( $vStr , 12, 2);
} else {
$vBirthday = '19' . substr ( $vStr , 6, 2) . '-' . substr ( $vStr , 8, 2) . '-' . substr ( $vStr , 10, 2);
}
if ( date ( 'Y-m-d' , strtotime ( $vBirthday )) != $vBirthday ) return false;
if ( $vLength == 18) {
$vSum = 0;
for ( $i = 17 ; $i >= 0 ; $i --) {
$vSubStr = substr ( $vStr , 17 - $i , 1);
$vSum += (pow(2, $i ) % 11) * (( $vSubStr == 'a' ) ? 10 : intval ( $vSubStr , 11));
}
if ( $vSum % 11 != 1) return false;
}
return true;
}
|
希望本文所述对大家PHP程序设计有所帮助。