专注于.Net

享受编程的乐趣
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

JavaScript身份证号码验证-支持新的带x身份证

Posted on 2008-01-22 14:30  古道飘零客  阅读(5265)  评论(6编辑  收藏  举报
 1 //--身份证号码验证-支持新的带x身份证
 2 function isIdCardNo(num) 
 3 {
 4     var factorArr = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
 5     var error;
 6     var varArray = new Array();
 7     var intValue;
 8     var lngProduct = 0;
 9     var intCheckDigit;
10     var intStrLen = num.length;
11     var idNumber = num;    
12     // initialize
13     if ((intStrLen != 15&& (intStrLen != 18)) {
14         //error = "输入身份证号码长度不对!";
15         //alert(error);
16         //frmAddUser.txtIDCard.focus();
17         return false;
18     }    
19     // check and set value
20     for(i=0;i<intStrLen;i++) {
21         varArray[i] = idNumber.charAt(i);
22         if ((varArray[i] < '0' || varArray[i] > '9'&& (i != 17)) {
23             //error = "错误的身份证号码!.";
24             //alert(error);
25             //frmAddUser.txtIDCard.focus();
26             return false;
27         } else if (i < 17) {
28             varArray[i] = varArray[i]*factorArr[i];
29         }
30     }
31     if (intStrLen == 18) {
32         //check date
33         var date8 = idNumber.substring(6,14);
34         if (checkDate(date8) == false) {
35             //error = "身份证中日期信息不正确!.";
36             //alert(error);
37             return false;
38         }        
39         // calculate the sum of the products
40         for(i=0;i<17;i++) {
41             lngProduct = lngProduct + varArray[i];
42         }        
43         // calculate the check digit
44         intCheckDigit = 12 - lngProduct % 11;
45         switch (intCheckDigit) {
46             case 10:
47                 intCheckDigit = 'X';
48                 break;
49             case 11:
50                 intCheckDigit = 0;
51                 break;
52             case 12:
53                 intCheckDigit = 1;
54                 break;
55         }        
56         // check last digit
57         if (varArray[17].toUpperCase() != intCheckDigit) {
58             //error = "身份证效验位错误!正确为: " + intCheckDigit + ".";
59             //alert(error);
60             return false;
61         }
62     } 
63     else{        //length is 15
64         //check date
65         var date6 = idNumber.substring(6,12);
66         if (checkDate(date6) == false) {
67             //alert("身份证日期信息有误!.");
68             return false;
69         }
70     }
71     //alert ("Correct.");
72     return true;
73 }