Mr.Ky

使用JavaScript判断身份证有效性

使用JavaScript判断身份证号码有效性

1. 自定义身份证号类

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
// 构造函数,变量为15位或者18位的身份证号码
function clsIDCard(CardNo) {
this.Valid = false;
this.ID15 = '';
this.ID18 = '';
this.Local = '';
if (CardNo != null)
this.SetCardNo(CardNo);
}
// 设置身份证号码,15位或者18位
clsIDCard.prototype.SetCardNo = function(CardNo) {
this.ID15 = '';
this.ID18 = '';
this.Local = '';
CardNo = CardNo.replace(" ", "");
var strCardNo;
if (CardNo.length == 18) {
pattern = /^\d{17}(\d|x|X)$/;
if (pattern.exec(CardNo) == null)
return;
strCardNo = CardNo.toUpperCase();
} else {
pattern = /^\d{15}$/;
if (pattern.exec(CardNo) == null)
return;
strCardNo = CardNo.substr(0, 6) + '19' + CardNo.substr(6, 9)
strCardNo += this.GetVCode(strCardNo);
}
this.Valid = this.CheckValid(strCardNo);
}
// 校验身份证有效性
clsIDCard.prototype.IsValid = function() {
return this.Valid;
}
// 返回生日字符串,格式如下,1981-10-10
clsIDCard.prototype.GetBirthDate = function() {
var BirthDate = '';
if (this.Valid)
BirthDate = this.GetBirthYear() + '-' + this.GetBirthMonth() + '-'
+ this.GetBirthDay();
return BirthDate;
}
// 返回生日中的年,格式如下,1981
clsIDCard.prototype.GetBirthYear = function() {
var BirthYear = '';
if (this.Valid)
BirthYear = this.ID18.substr(6, 4);
return BirthYear;
}
// 返回生日中的月,格式如下,10
clsIDCard.prototype.GetBirthMonth = function() {
var BirthMonth = '';
if (this.Valid)
BirthMonth = this.ID18.substr(10, 2);
if (BirthMonth.charAt(0) == '0')
BirthMonth = BirthMonth.charAt(1);
return BirthMonth;
}
// 返回生日中的日,格式如下,10
clsIDCard.prototype.GetBirthDay = function() {
var BirthDay = '';
if (this.Valid)
BirthDay = this.ID18.substr(12, 2);
return BirthDay;
}
// 返回性别,1:男,0:女
clsIDCard.prototype.GetSex = function() {
var Sex = '';
if (this.Valid)
Sex = this.ID18.charAt(16) % 2;
return Sex;
}
// 返回15位身份证号码
clsIDCard.prototype.Get15 = function() {
var ID15 = '';
if (this.Valid)
ID15 = this.ID15;
return ID15;
}
// 返回18位身份证号码
clsIDCard.prototype.Get18 = function() {
var ID18 = '';
if (this.Valid)
ID18 = this.ID18;
return ID18;
}
// 返回所在省,例如:上海市、浙江省
clsIDCard.prototype.GetLocal = function() {
var Local = '';
if (this.Valid)
Local = this.Local;
return Local;
}
clsIDCard.prototype.GetVCode = function(CardNo17) {
var Wi = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1);
var Ai = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var cardNoSum = 0;
for (var i = 0; i < CardNo17.length; i++)
cardNoSum += CardNo17.charAt(i) * Wi[i];
var seq = cardNoSum % 11;
return Ai[seq];
}
clsIDCard.prototype.CheckValid = function(CardNo18) {
if (this.GetVCode(CardNo18.substr(0, 17)) != CardNo18.charAt(17))
return false;
if (!this.IsDate(CardNo18.substr(6, 8)))
return false;
var aCity = {
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 (aCity[parseInt(CardNo18.substr(0, 2))] == null)
return false;
this.ID18 = CardNo18;
this.ID15 = CardNo18.substr(0, 6) + CardNo18.substr(8, 9);
this.Local = aCity[parseInt(CardNo18.substr(0, 2))];
return true;
}
clsIDCard.prototype.IsDate = function(strDate) {
var r = strDate.match(/^(\d{1,4})(\d{1,2})(\d{1,2})$/);
if (r == null)
return false;
var d = new Date(r[1], r[2] - 1, r[3]);
return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[2] && d
.getDate() == r[3]);
}

2. 使用

页面只需要new出对象,并传递数据验证,并可获得相关数据( 住址 | 出生日期 | 性别 )即可:

1
2
3
4
5
6
7
8
9
10
$("#cardNo").blur(function(event){
var idCard = $(this).val();
var checkFlag = new clsIDCard(idCard);
if( !checkFlag.IsValid() ){
alert("身份证错误");
return false;
}else{
alert( "出生于: " + checkFlag.GetBirthDate() +" 地区:" + checkFlag.GetLocal() +" sex:" + checkFlag.GetSex() );
}
});
如果您觉得这片文章对您有用,请鼓励我继续创作!

热评文章