1 | export default function validateIdCard(code) {
|
2 | code = String(code);
|
3 |
|
4 | var vcity = {
|
5 | 11: "北京",
|
6 | 12: "天津",
|
7 | 13: "河北",
|
8 | 14: "山西",
|
9 | 15: "内蒙古",
|
10 | 21: "辽宁",
|
11 | 22: "吉林",
|
12 | 23: "黑龙江",
|
13 | 31: "上海",
|
14 | 32: "江苏",
|
15 | 33: "浙江",
|
16 | 34: "安徽",
|
17 | 35: "福建",
|
18 | 36: "江西",
|
19 | 37: "山东",
|
20 | 41: "河南",
|
21 | 42: "湖北",
|
22 | 43: "湖南",
|
23 | 44: "广东",
|
24 | 45: "广西",
|
25 | 46: "海南",
|
26 | 50: "重庆",
|
27 | 51: "四川",
|
28 | 52: "贵州",
|
29 | 53: "云南",
|
30 | 54: "西藏",
|
31 | 61: "陕西",
|
32 | 62: "甘肃",
|
33 | 63: "青海",
|
34 | 64: "宁夏",
|
35 | 65: "新疆",
|
36 | 71: "台湾",
|
37 | 81: "香港",
|
38 | 82: "澳门",
|
39 | 91: "国外"
|
40 | };
|
41 |
|
42 | var checkcode = function(code) {
|
43 |
|
44 | if (
|
45 | !code ||
|
46 | !iscodeNo(code) ||
|
47 | !checkProvince(code) ||
|
48 | !checkBirthday(code) ||
|
49 | !checkParity(code)
|
50 | ) {
|
51 | return false;
|
52 | }
|
53 | return true;
|
54 | };
|
55 |
|
56 |
|
57 | var iscodeNo = function(code) {
|
58 |
|
59 | var reg = /(^\d{15}$)|(^\d{17}(\d|[xX])$)/;
|
60 | if (reg.test(code) === false) {
|
61 | return false;
|
62 | }
|
63 | return true;
|
64 | };
|
65 |
|
66 |
|
67 | var checkProvince = function(code) {
|
68 | var province = code.substr(0, 2);
|
69 | if (vcity[province] == undefined) {
|
70 | return false;
|
71 | }
|
72 | return true;
|
73 | };
|
74 |
|
75 |
|
76 | var checkBirthday = function(code) {
|
77 | var len = code.length;
|
78 |
|
79 | if (len == "15") {
|
80 | var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;
|
81 | var arr_data = code.match(re_fifteen);
|
82 | var year = arr_data[2];
|
83 | var month = arr_data[3];
|
84 | var day = arr_data[4];
|
85 | var birthday = new Date("19" + year + "/" + month + "/" + day);
|
86 | return verifyBirthday("19" + year, month, day, birthday);
|
87 | }
|
88 |
|
89 | if (len == "18") {
|
90 | var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/i;
|
91 | var arr_data = code.match(re_eighteen);
|
92 | var year = arr_data[2];
|
93 | var month = arr_data[3];
|
94 | var day = arr_data[4];
|
95 | var birthday = new Date(year + "/" + month + "/" + day);
|
96 | return verifyBirthday(year, month, day, birthday);
|
97 | }
|
98 | return false;
|
99 | };
|
100 |
|
101 |
|
102 | var verifyBirthday = function(year, month, day, birthday) {
|
103 | var now = new Date();
|
104 | var now_year = now.getFullYear();
|
105 |
|
106 | if (
|
107 | birthday.getFullYear() == year &&
|
108 | birthday.getMonth() + 1 == month &&
|
109 | birthday.getDate() == day
|
110 | ) {
|
111 |
|
112 | var time = now_year - year;
|
113 | if (time >= 3 && time <= 100) {
|
114 | return true;
|
115 | }
|
116 | return false;
|
117 | }
|
118 | return false;
|
119 | };
|
120 |
|
121 |
|
122 | var checkParity = function(code) {
|
123 |
|
124 | code = changeFivteenToEighteen(code);
|
125 | var len = code.length;
|
126 | if (len == "18") {
|
127 | var arrInt = new Array(
|
128 | 7,
|
129 | 9,
|
130 | 10,
|
131 | 5,
|
132 | 8,
|
133 | 4,
|
134 | 2,
|
135 | 1,
|
136 | 6,
|
137 | 3,
|
138 | 7,
|
139 | 9,
|
140 | 10,
|
141 | 5,
|
142 | 8,
|
143 | 4,
|
144 | 2
|
145 | );
|
146 | var arrCh = new Array(
|
147 | "1",
|
148 | "0",
|
149 | "X",
|
150 | "9",
|
151 | "8",
|
152 | "7",
|
153 | "6",
|
154 | "5",
|
155 | "4",
|
156 | "3",
|
157 | "2"
|
158 | );
|
159 | var codeTemp = 0,
|
160 | i,
|
161 | valnum;
|
162 | for (i = 0; i < 17; i++) {
|
163 | codeTemp += code.substr(i, 1) * arrInt[i];
|
164 | }
|
165 | valnum = arrCh[codeTemp % 11];
|
166 | if (valnum == code.substr(17, 1)) {
|
167 | return true;
|
168 | }
|
169 | return false;
|
170 | }
|
171 | return false;
|
172 | };
|
173 |
|
174 |
|
175 | var changeFivteenToEighteen = function(code) {
|
176 | if (code.length == "15") {
|
177 | var arrInt = new Array(
|
178 | 7,
|
179 | 9,
|
180 | 10,
|
181 | 5,
|
182 | 8,
|
183 | 4,
|
184 | 2,
|
185 | 1,
|
186 | 6,
|
187 | 3,
|
188 | 7,
|
189 | 9,
|
190 | 10,
|
191 | 5,
|
192 | 8,
|
193 | 4,
|
194 | 2
|
195 | );
|
196 | var arrCh = new Array(
|
197 | "1",
|
198 | "0",
|
199 | "X",
|
200 | "9",
|
201 | "8",
|
202 | "7",
|
203 | "6",
|
204 | "5",
|
205 | "4",
|
206 | "3",
|
207 | "2"
|
208 | );
|
209 | var codeTemp = 0,
|
210 | i;
|
211 | code = code.substr(0, 6) + "19" + code.substr(6, code.length - 6);
|
212 | for (i = 0; i < 17; i++) {
|
213 | codeTemp += code.substr(i, 1) * arrInt[i];
|
214 | }
|
215 | code += arrCh[codeTemp % 11];
|
216 | return code;
|
217 | }
|
218 | return code;
|
219 | };
|
220 |
|
221 | return checkcode(code);
|
222 | }
|