javaScript身份证严格验证

集合jquery ValidationEngine

如下所示

<input type="text" name="sfz" id="sfz"  class="form-control validate[required,funcCall[strictCheckIdCard]]" placeholder=""/>

如果验证信息不通过,直接返回提示信息即可

function strictCheckIdCard(field, rules, i, options){

/*
* 该方法由网友提供; 对身份证进行严格验证;
*/
gets=field.val();
var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ];// 加权因子;
var ValideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ];// 身份证验证位值,10代表X;


if (gets.length == 15) {   
return isValidityBrithBy15IdCard(gets);   
}else if (gets.length == 18){   
var a_idCard = gets.split("");// 得到身份证数组
if (isValidityBrithBy18IdCard(gets)&&isTrueValidateCodeBy18IdCard(a_idCard)) {   
return true;   
}   
return '身份证输入格式不正确';
}
return '身份证输入格式不正确';

function isTrueValidateCodeBy18IdCard(a_idCard) {   
var sum = 0; // 声明加权求和变量
if (a_idCard[17].toLowerCase() == 'x') {   
a_idCard[17] = 10;// 将最后位为x的验证码替换为10方便后续操作
}   
for ( var i = 0; i < 17; i++) {   
sum += Wi[i] * a_idCard[i];// 加权求和
}   
valCodePosition = sum % 11;// 得到验证码所位置
if (a_idCard[17] == ValideCode[valCodePosition]) {   
return true;   
}
return '身份证输入格式不正确';   
}

function isValidityBrithBy18IdCard(idCard18){   
var year = idCard18.substring(6,10);   
var month = idCard18.substring(10,12);   
var day = idCard18.substring(12,14);   
var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));   
// 这里用getFullYear()获取年份,避免千年虫问题
if(temp_date.getFullYear()!=parseFloat(year) || temp_date.getMonth()!=parseFloat(month)-1 || temp_date.getDate()!=parseFloat(day)){   
return '身份证输入格式不正确';   
}
return true;   
}

function isValidityBrithBy15IdCard(idCard15){   
var year =  idCard15.substring(6,8);   
var month = idCard15.substring(8,10);   
var day = idCard15.substring(10,12);
var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));   
// 对于老身份证中的你年龄则不需考虑千年虫问题而使用getYear()方法
if(temp_date.getYear()!=parseFloat(year) || temp_date.getMonth()!=parseFloat(month)-1 || temp_date.getDate()!=parseFloat(day)){   
return '身份证输入格式不正确';   
}
return true;
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值