JavaScript社會安全號碼碼驗證-支援新的帶x身份證
來源:互聯網
上載者:User
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 }