今天遇到了一個需要驗證身份證號的正確性的問題,依據判斷規則。自己寫了下。希望大家多多補充
規則: 身份證號碼校驗:
-
首先校驗長度:15位和18位是可通過校驗的
-
然後校驗編碼邏輯,15位身份證號無需校驗,校驗18位身份證號步驟如下: 1)將身份證號前17位分別乘以下列係數:7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 2)將步驟1)中的結果相加 3)將步驟2)中的結果除以11,得到餘數 4)餘數0,1,2,3,4,5,6,7,8,9,10分別對應身份證號最後一位1,0,X,9,8,7,6,5,4,3,2
例子:以我的身份證號為例,230106199003190813,按照步驟計算過程如下: 1)2*7=14,3*9=27,1*5=5,6*4=24,1*2=2,9*1=9,9*6=54,3*9=27,1*10=10,9*5=45,8*4=32,1*2=2 2)14+27+5+24+2+9+54+27+10+45+32+2 = 251 3)251 mod 11 = 9 4)餘數9對應身份證號最後一位是3 我的身份證號碼通過校驗 複製程式碼
身份證號碼提取有效資訊:
-
性別:擷取身份證號碼15-17位,如果是奇數,則為男性;如果是偶數,則為女性。以上面的例子來說明,15-17位是081,是奇數,判斷為男性
-
出生日期:擷取身份證號碼7-10位,是出生年 擷取身份證號碼11-12位,是出生月 擷取身份證號碼13-14位,是出生日 以上面的例子來說明:7-10位是1990,是我出生的年。月和日同理,不再贅述
首先取到身份證號的值:我這裡用idcard;
var pattern = /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X|x)$/;
if (!pattern.test(idcard) || idcard == "") {
alert("請輸入正確的身份證號");
return false;
}else{
var such = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
var sum = 0;
for(var i = 0;i <idcard.length-1;i++){
for(var j = 0;j<such.length;j++){
var product = idcard[i]*such[j];
sum += product;
}
}
var result = sum % 11;
var example = ['1','0','X','9','8','7','6','5','4','3','2'];
if(idcard[17] == example[result]){
alert("正確");
}else{
alert("錯誤");
return false;
}
}
複製程式碼