天天看點

JavaScript二代公民身份證号驗證

身份證号碼中的校驗碼是身份證号碼的最後一位,是根據〖中華人民共和國國家标準GB 11643-1999〗中有關公民身份号碼的規定,

根據精密的計算公式計算出來的,公民身份号碼是特征組合碼,由十七位數字本體碼和一位數字校驗碼組成。

計算方法

1、将前面的身份證号碼17位數分别乘以不同的系數。從第一位到第十七位的系數分别為:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 ;

2、将這17位數字和系數相乘的結果相加;

3、用加出來和除以11,看餘數是多少;

4、餘數隻可能有0 1 2 3 4 5 6 7 8 9 10這11個數字。其分别對應的最後一位身份證的号碼為1 0 X 9 8 7 6 5 4 3 2;

5、通過上面得知如果餘數是2,就會在身份證的第18位數字上出現羅馬數字的Ⅹ。如果餘數是10,身份證的最後一位号碼就是2;

例如:某男性的身份證号碼是34052419800101001X。我們要看看這個身份證是不是合法的身份證。首先:我們計算3*7+4*9+0*10+5*5+...+1*2,前17位的乘積和是189

然後:

用189除以11得出的結果是商17餘2最後:通過對應規則就可以知道餘數2對應的數字是x。是以,這是一個合格的身份證号碼。

js代碼:

1 function check_id(){
 2     var idcode= document.getElementById("IDNumber").value
 3     // alert(idcode)
 4     //檢測身份證号碼合法性---全部數字或數字+X/x 18位
 5      // 權重因子
 6      var weight_factor = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
 7      // 校驗碼
 8      var check_code = ['1', '0', 'X' , '9', '8', '7', '6', '5', '4', '3', '2'];
 9  
10      var code = idcode + "";
11      var last = idcode[17];//最後一位
12  
13      var seventeen = code.substring(0,17);
14  
15      // ISO 7064:1983.MOD 11-2
16      // 判斷最後一位校驗碼是否正确
17      var arr = seventeen.split("");
18      var len = arr.length;
19      var num = 0;
20      for(var i = 0; i < len; i++){
21          num = num + arr[i] * weight_factor[i];
22      }
23      
24      // 擷取餘數
25      var resisue = num%11;
26      var last_no = check_code[resisue];
27  
28      // 格式的正則
29      // 正則思路
30      /*
31      第一位不可能是0
32      第二位到第六位可以是0-9
33      第七位到第十位是年份,是以七八位為19或者20
34      十一位和十二位是月份,這兩位是01-12之間的數值
35      十三位和十四位是日期,是從01-31之間的數值
36      十五,十六,十七都是數字0-9
37      十八位可能是數字0-9,也可能是X
38      */
39      var idcard_patter = /^[1-9][0-9]{5}([1][9][0-9]{2}|[2][0][0|1][0-9])([0][1-9]|[1][0|1|2])([0][1-9]|[1|2][0-9]|[3][0|1])[0-9]{3}([0-9]|[X])$/;
40  
41      // 判斷格式是否正确
42      var format = idcard_patter.test(idcode);
43     //  alert(format)
44      // 傳回驗證結果,校驗碼和格式同時正确才算是合法的身份證号碼
45     //  return last === last_no && format ? true : false;
46      if(!(format==true && (last_no===last))){
47          alert("身份證号碼格式輸入有誤!")
48          document.getElementById("IDNumber").focus();
49      }
50 }      

繼續閱讀