⾝份证校验规则
/*
* ⾝份证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}((0d)|(1[0-2]))(([0|1|2]d)|3[0-1])d{3}$)|(^[1-9]d{5}[1-9]d{3}((0d)|(1[0-2]))(([0|1|2]d)|3[0-1])((d{4})|d{3}[Xx])$)$/;
//如果通过该验证,说明⾝份证格式正确,但准确性还需计算
if((idCard)){
if(==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+=ing(i,i+1)*idCardWi[i];
}
}
var idCardMod=idCardWiSum%11;//计算出校验码所在数组的位置
var idCardLast=ing(17);//得到最后⼀位⾝份证号码
//如果等于2,则说明校验码是10,⾝份证号码最后⼀位应该是X
if(idCardMod==2){
if(idCardLast=="X"||idCardLast=="x"){
alert("恭喜通过验证啦!");
}else{
alert("⾝份证号码错误!");
}
}else{
//⽤计算出的验证码与最后⼀位⾝份证号码匹配,如果⼀致,说明通过,否则是⽆效的⾝份证号码
if(idCardLast==idCardY[idCardMod]){
alert("恭喜通过验证啦!");
}else{
alert("⾝份证号码错误!");
}
}
}
}else{
alert("⾝份证格式不正确!");
}
}
本文发布于:2023-05-28 02:48:43,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/falv/fa/86/124086.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |