js身份证校验方法集合
校验方法一:
/** 身份证15位编码规则:dddddd yymmdd xx p* dddddd:6位地区编码* yymmdd: 出生年(两位年)月日,如:910215* xx: 顺序编码,系统产生,无法确定* p: 性别,奇数为男,偶数为女** 身份证18位编码规则:dddddd yyyymmdd xxx y* dddddd:6位地区编码* yyyymmdd: 出生年(四位年)月日,如:19910215* xxx:顺序编码,系统产生,无法确定,奇数为男,偶数为女* y: 校验码,该位数值可通过前17位计算获得** 前17位号码加权因子为 Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ]* 验证位 Y = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ]* 如果验证码恰好是10,为了保证身份证是十八位,那么第十八位将用X来代替* 校验位计算公式:Y_P = mod( ∑(Ai×Wi),11 )* i为身份证号码1...17 位; Y_P为校验码Y所在校验码数组位置*/function validateIdCard(idCard){//15位和18位身份证号码的正则表达式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])$)$/;//如果通过该验证,说明身份证格式正确,但准确性还需计算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位加权因子保存在数组里var idCardY=new Array( 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ); //这是除以11后,可能产生的11位余数、验证码,也保存成数组var idCardWiSum=0; //用来保存前17位各自乖以加权因子后的总和for(var i=0;i<17;i++){idCardWiSum+=idCard.substring(i,i+1)*idCardWi[i];}var idCardMod=idCardWiSum%11;//计算出校验码所在数组的位置var idCardLast=idCard.substring(17);//得到最后一位身份证号码//如果等于2,则说明校验码是10,身份证号码最后一位应该是Xif(idCardMod==2){if(idCardLast=="X"||idCardLast=="x"){alert("恭喜通过验证啦!");}else{alert("身份证号码错误!");}}else{//用计算出的验证码与最后一位身份证号码匹配,如果一致,说明通过,否则是无效的身份证号码if(idCardLast==idCardY[idCardMod]){alert("恭喜通过验证啦!");}else{alert("身份证号码错误!");}}}}else{alert("身份证格式不正确!");}}
校验方法2:
/*
check(ID)验证身份证号码
返回值:0 : "是正确的身份证号"1 : "身份证校验不符合求和模11=1这个等式",2 : "身份证最后一位校验位有误",3 : "身份证位数不正确",4 : "年份错误",5 : "月份错误",6 : "日错误"*/function check(ID) {var ck = new IDCard();ck.check(ID);return ck.errNum;
}function IDCard(ID) {var me = this;this.checkCode = new Array(1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2);this.ID;this.errNum = 0;this.err = {1 : "身份证校验不符合求和模11=1这个等式",2 : "身份证最后一位校验位有误",3 : "身份证位数不正确",4 : "年份错误",5 : "月份错误",6 : "日错误"};this.err_msg = function() {return (0 !== this.errNum) ? this.err[this.errNum] : null;};this.check = function(ID) {this.errNum = 0;this.ID = ID;if (cardValidate()) {if (!aiCheck()) this.errNum = 1;if (!LastByteCheck()) this.errNum = 2;return (0 === this.errNum) ? true: false;} else {return false;}};function getNum(str) {var re = /^[0]*([0-9]*)$/;str.match(re);return parseInt(RegExp.$1,10);}//对身份证位数,出生日期,初步验证function cardValidate() {var re = /^[0-9x]{15,18}$/i;if (!re.test(me.ID)) {me.errNum = 7;return false;}if (15 == me.ID.length || 18 == me.ID.length) {var realLen = 0;if (18 == me.ID.length) realLen = 2;var year = parseInt(me.ID.substr(6, 2 + realLen),10);var month = getNum(me.ID.substr(8 + realLen, 2));var day = parseInt(me.ID.substr(10 + realLen, 2),10);if (4 == year.length) if (year < 1900 || year > 2050) me.errNum = 4;if (month < 1 || month > 12) me.errNum = 5;if (day < 1 || day > 31) me.errNum = 6;return 0 === me.errNum;} else {me.errNum = 3;return false;}}//总和模11应该等于1var aiCheck = function() {var sum = 0;for (var i = 1; i <= me.ID.length; i++) {var ai = me.ID.substr(me.ID.length - i, 1);ai = (ai.toLowerCase() == 'x') ? 10 : ai;var wi = Math.pow(2, i - 1) % 11;sum += parseInt(ai,10) * wi;}return 1 == sum % 11;};//最后一位校验,这个可以和aiCheck合在一起,减少一次循环var LastByteCheck = function() {var sum = 0;for (var i = 2; i <= me.ID.length; i++) {var ai = me.ID.substr(me.ID.length - i, 1);ai = (ai.toLowerCase() == 'x') ? 10 : ai;var wi = Math.pow(2, i - 1) % 11;sum += parseInt(ai,10) * wi;}var checkCodeIndex = sum % 11;var c = me.ID.substr(me.ID.length - 1, 1);//alert(c+"=="+me.checkCode[checkCodeIndex]);return c == me.checkCode[checkCodeIndex];};
}
if(document.form1.csrq.value==""){
alert("请填写出生日期!");
document.form1.csrq.focus();
return false;
}
if(document.form1.csrq.value==""){
alert("请填写出生日期!");
document.form1.csrq.focus();
return false;
}else{
if(document.form1.csrq.value.length!=8){
alert("出生日期必须为8位!");
document.form1.csrq.focus();
return false;
}
if(document.form1.sfzh.value.length==18){
var sfzh =document.form1.sfzh.value;
if(document.form1.csrq.value!=sfzh.substring(6,14)){
alert("出生日期与身份证号不一致!");
document.form1.csrq.focus();
return false;
}
}
if(document.form1.sfzh.value.length==15){
var sfzh =document.form1.sfzh.value;
if(document.form1.csrq.value!='19'+sfzh.substring(6,12)){
alert("出生日期与身份证号不一致!");
document.form1.csrq.focus();
return false;
}
}
}
if(!isIdCardNo(document.form1.sfzh.value)){
document.form1.sfzh.focus();
return false;
}
function isNN(num){
var badChar ="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //大写字母
badChar += "abcdefghijklmnopqrstuvwxyz"; //小写字母
badChar += "0123456789"; //数字
badChar += " "+" ";//半角与全角空格
badChar += "`~!@#$%^&()-_=+]\\|:;\"\\'<,>?/";//特殊符号
var c;
//for(var i=0;i
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
