身份证校验

  1 <html>
  2 
  3 <head>
  4 
  5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6 
  7 <title>身份证号码验证</title>
  8 
  9 <script type="text/javascript">        
 10 
 11    //校验身份证号码
 12 
 13        var yyyy;
 14 
 15        var mm;
 16 
 17        var dd;
 18 
 19        var birthday;
 20 
 21        var address;
 22 
 23        var sex;
 24 
 25 function CheckValue(idCard){
 26 
 27        //是否输入
 28 
 29        var id=idCard;
 30 
 31        var id_length=id.length;        
 32 
 33        if (id_length==0){
 34 
 35            alert("请输入身份证号码!");
 36 
 37            return false;
 38 
 39        }
 40 
 41        //长度校验
 42 
 43        if (id_length!=15 && id_length!=18){
 44 
 45            alert("身份证号长度应为15位或18位!");
 46 
 47            return false;
 48 
 49        }
 50 
 51   //判断是否纯数字
 52 
 53   if(isNaN(idCard))
 54 
 55        {
 56 
 57           alert("含有非法字符!");
 58 
 59           return false;
 60 
 61        }
 62 
 63        //地区校验
 64 
 65                //
 66 
 67         var area={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:"国外"}
 68 
 69         if(area[parseInt(idCard.toString().substr(0,2))]==null)
 70 
 71         {
 72 
 73             alert('身份证地区非法!')
 74 
 75             return false;
 76 
 77         }
 78 
 79         else
 80 
 81           address = area[parseInt(idCard.toString().substr(0,2))];
 82 
 83        //日期校验
 84 
 85        if (id_length==15){
 86 
 87            yyyy="19"+id.toString().substring(6,8);
 88 
 89            mm=id.toString().substring(8,10);
 90 
 91            dd=id.toString().substring(10,12);
 92 
 93            if (mm>12 || mm<=0){
 94 
 95                alert("输入身份证号,月份非法!");
 96 
 97                return false;
 98 
 99            }
100 
101            if (dd>31 || dd<=0){
102 
103                alert("输入身份证号,日期非法!");
104 
105                return false;
106 
107            }
108 
109            birthday=yyyy+ "-" +mm+ "-" +dd;
110 
111            if ("13579".indexOf(id.toString().substring(14,15))!=-1){
112 
113                sex="";
114 
115            }else{
116 
117                sex="";
118 
119            }
120 
121        }else if (id_length==18){
122 
123                yyyy=id.toString().substring(6,10);
124 
125                if (yyyy>2200 || yyyy<1900){
126 
127                    alert("输入身份证号,年度非法!");
128 
129                    return false;
130 
131                }
132 
133                mm=id.toString().substring(10,12);
134 
135                if (mm>12 || mm<=0){
136 
137                    alert("输入身份证号,月份非法!");
138 
139                    return false;
140 
141                }
142 
143                dd=id.toString().substring(12,14);
144 
145                if (dd>31 || dd<=0){
146 
147                    alert("输入身份证号,日期非法!");
148 
149                    return false;
150 
151                }
152 
153                        //校验位校验
154 
155                if (!isChinaIDCard(idCard))
156 
157                {
158 
159                   return false ;
160 
161                }
162 
163                birthday=yyyy+ "-" +mm+ "-" +dd;
164 
165                if ("13579".indexOf(id.toString().substring(14,15))!=-1){
166 
167                    sex="";
168 
169                }else{
170 
171                    sex="";
172 
173                }
174 
175        }      
176 
177        return true;
178 
179 }
180 
181 //18位校验码校验
182 
183 function isChinaIDCard(StrNo)
184 
185 {
186 
187    StrNo = StrNo.toString();
188 
189    var a, b, c;
190 
191    a = parseInt(StrNo.substr(0, 1)) * 7+parseInt(StrNo.substr(1, 1)) * 9 +parseInt(StrNo.substr(2, 1)) * 10;
192 
193    a = a + parseInt(StrNo.substr(3, 1)) * 5+parseInt(StrNo.substr(4, 1)) * 8+parseInt(StrNo.substr(5, 1)) * 4;
194 
195    a = a + parseInt(StrNo.substr(6, 1)) * 2+parseInt(StrNo.substr(7, 1)) * 1+parseInt(StrNo.substr(8, 1)) * 6;
196 
197    a = a + parseInt(StrNo.substr(9, 1)) * 3+parseInt(StrNo.substr(10, 1)) * 7+parseInt(StrNo.substr(11, 1)) * 9;
198 
199    a = a + parseInt(StrNo.substr(12, 1)) * 10+parseInt(StrNo.substr(13, 1)) * 5+parseInt(StrNo.substr(14, 1)) * 8;
200 
201    a = a + parseInt(StrNo.substr(15, 1)) * 4+parseInt(StrNo.substr(16, 1)) * 2;
202 
203    b = a % 11;
204 
205    if (b == 2)
206 
207    //最后一位为校验位
208 
209    {
210 
211        c = StrNo.substr(17, 1).toUpperCase(); //转为大写X
212 
213    }
214 
215    else
216 
217    {
218 
219        c = parseInt(StrNo.substr(17, 1));
220 
221    }
222 
223    switch (b)
224 
225    {
226 
227        case 0:
228 
229            if (c != 1)
230 
231            {
232 
233                alert("身份证号码校验位错:最后一位应该为:1");                    
234 
235                return false;
236 
237            }
238 
239            break;
240 
241        case 1:
242 
243            if (c != 0)
244 
245            {
246 
247                alert("身份证号码校验位错:最后一位应该为:0");                    
248 
249                return false;
250 
251            }
252 
253            break;
254 
255        case 2:
256 
257            if (c != "X")
258 
259            {
260 
261                alert("身份证号码校验位错:最后一位应该为:X");                      
262 
263                return false;
264 
265            }
266 
267            break;
268 
269        case 3:
270 
271            if (c != 9)
272 
273            {
274 
275                alert("身份证号码校验位错:最后一位应该为:9");                  
276 
277                return false;
278 
279            }
280 
281            break;
282 
283        case 4:
284 
285            if (c != 8)
286 
287            {
288 
289                alert("身份证号码校验位错:最后一位应该为:8");                      
290 
291                return false;
292 
293            }
294 
295            break;
296 
297        case 5:
298 
299            if (c != 7)
300 
301            {
302 
303                alert("身份证号码校验位错:最后一位应该为:7");                  
304 
305                return false;
306 
307            }
308 
309            break;
310 
311        case 6:
312 
313            if (c != 6)
314 
315            {
316 
317                alert("身份证号码校验位错:最后一位应该为:6");                    
318 
319                return false;
320 
321            }
322 
323            break;
324 
325        case 7:
326 
327            if (c != 5)
328 
329            {
330 
331                alert("身份证号码校验位错:最后一位应该为:5");                      
332 
333                return false;
334 
335            }
336 
337            break;
338 
339        case 8:
340 
341            if (c != 4)
342 
343            {
344 
345                alert("身份证号码校验位错:最后一位应该为:4");                      
346 
347                return false;
348 
349            }
350 
351            break;
352 
353        case 9:
354 
355            if (c != 3)
356 
357            {
358 
359                alert("身份证号码校验位错:最后一位应该为:3");                      
360 
361                return false;
362 
363            }
364 
365            break;
366 
367        case 10:
368 
369            if (c != 2)
370 
371            {
372 
373                alert("身份证号码校验位错:最后一位应该为:2");                      
374 
375                return false
376 
377            }
378 
379    }
380 
381    return true ;
382 
383 }
384 
385 //响应单击事件
386 
387 function myclick()
388 
389 {
390 
391   var strinput=document.getElementById("idCard").value ;
392 
393   if(CheckValue(strinput))
394 
395   {
396 
397       alert('输入正确!请核对您的信息:出生日期:'+birthday+'.性别:'+sex+'.出生地:'+address);
398 
399   }
400 
401 }
402 
403    </script>
404 
405 </head>
406 
407 <body>
408 
409 输入身份证号码:
410 
411 <input name="idCard" type="text" maxlength="25" id="idCard"/>
412 
413 <input name="myButton" type="button" id="myButton" onclick="myclick()" value="确定" />
414 
415 </body>
416 
417 </html>

 

posted @ 2014-05-06 21:39  daishuguang  阅读(564)  评论(0编辑  收藏  举报