<!DOCTYPE HTML
>
<
html
>
<
head
>
<
meta
charset=
"utf-8"
>
<
title
>42度空间-身份证号码的正则表达式及验证详解(JavaScript,Regex)方案2测试
</
title
>
</
head
>
<
body
>
<
div
id=
"main"
></
div
>
<
script
>
console.
log =
function(
val) {
document.
getElementById(
"main").
innerHTML +=
val +
"<br />";
}
var
checkCode =
function (
val) {
var
p =
/
^
[
1-9
]
\d
{5}
(
18
|
19
|
20
)
\d
{2}
((
0
[
1-9
])
|
(
1
[
0-2
]))(([
0-2
][
1-9
])
|
10
|
20
|
30
|
31
)
\d
{3}
[
0-9Xx
]
$
/;
var
factor = [
7,
9,
10,
5,
8,
4,
2,
1,
6,
3,
7,
9,
10,
5,
8,
4,
2 ];
var
parity = [
1,
0,
'X',
9,
8,
7,
6,
5,
4,
3,
2 ];
var
code =
val.
substring(
17);
if(
p.
test(
val)) {
var
sum =
0;
for(
var
i=
0;
i<
17;
i++) {
sum +=
val[
i]*
factor[
i];
}
if(
parity[
sum %
11] ==
code.
toUpperCase()) {
return
true;
}
}
return
false;
}
var
checkDate =
function (
val) {
var
pattern =
/
^
(
18
|
19
|
20
)
\d
{2}
((
0
[
1-9
])
|
(
1
[
0-2
]))(([
0-2
][
1-9
])
|
10
|
20
|
30
|
31
)
$
/;
if(
pattern.
test(
val)) {
var
year =
val.
substring(
0,
4);
var
month =
val.
substring(
4,
6);
var
date =
val.
substring(
6,
8);
var
date2 =
new
Date(
year+
"-"+
month+
"-"+
date);
if(
date2 &&
date2.
getMonth() == (
parseInt(
month) -
1)) {
return
true;
}
}
return
false;
}
var
checkProv =
function (
val) {
var
pattern =
/
^
[
1-9
][
0-9
]
/;
var
provs = {
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
:
"澳门"};
if(
pattern.
test(
val)) {
if(
provs[
val]) {
return
true;
}
}
return
false;
}
var
checkID =
function (
val) {
if(
checkCode(
val)) {
var
date =
val.
substring(
6,
14);
if(
checkDate(
date)) {
if(
checkProv(
val.
substring(
0,
2))) {
return
true;
}
}
}
return
false;
}
//输出 true
console.
log(
checkID(
"11010519491231002X"));
//输出 false,校验码不符
console.
log(
checkID(
"110105194912310021"));
//输出 false,日期码不符
console.
log(
checkID(
"110105194902310026"));
//输出 false,地区码不符
console.
log(
checkID(
"160105194912310029"));
<
/
script
>
</
body
>
</
html
>