身份嚴(yán)格校驗(yàn)方法
function validateIdCard(idCard){
var flag = false;
//15位和18位身份證號(hào)碼的正則表達(dá)式
var regIdCard=/^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/;
//如果通過(guò)該驗(yàn)證帘靡,說(shuō)明身份證格式正確俩垃,但準(zhǔn)確性還需計(jì)算
if(regIdCard.test(idCard)){
if(idCard.length==18){
var idCardWi=new Array( 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ); //將前17位加權(quán)因子保存在數(shù)組里
var idCardY=new Array( 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ); //這是除以11后融欧,可能產(chǎn)生的11位余數(shù)、驗(yàn)證碼,也保存成數(shù)組
var idCardWiSum=0; //用來(lái)保存前17位各自乖以加權(quán)因子后的總和
for(var i=0;i<17;i++){
idCardWiSum+=idCard.substring(i,i+1)*idCardWi[i];
}
var idCardMod=idCardWiSum%11;//計(jì)算出校驗(yàn)碼所在數(shù)組的位置
var idCardLast=idCard.substring(17);//得到最后一位身份證號(hào)碼
//如果等于2,則說(shuō)明校驗(yàn)碼是10,身份證號(hào)碼最后一位應(yīng)該是X
if(idCardMod==2){
if(idCardLast=="X"||idCardLast=="x"){
flag = true;
}else{
flag = false;
}
}else{
//用計(jì)算出的驗(yàn)證碼與最后一位身份證號(hào)碼匹配定铜,如果一致,說(shuō)明通過(guò)怕敬,否則是無(wú)效的身份證號(hào)碼
if(idCardLast==idCardY[idCardMod]){
flag = true;
}else{
flag = false;
}
}
}else if(idCard.length==15){
var id17 = idCard.substring(0,6) + '19' + idCard.substring(6);
var parityBit = getParityBit(id17);
var tempIdCard = id17 + parityBit;
flag = validateIdCard(tempIdCard);
}
}else{
flag = false;
}
return flag;
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者