看到一篇身份证号验证的博客,就也来分享和积累一下吧
【方法一】
方法一是一位博友的博客原文,下面是原文链接:点击打开链接
最近的前台验证比较多,自然要求也比较高,毕竟是网站上需要的一些东西。
之前做验证身份证号好像一直是验证位数够不够,如果够,则ok,这种简单的验证已经不符合现在的合法性要求了。因为身份证号是根据规则定出来的,所以,必然有相应的规则去验证它,下边是代码的分享:
[html] view plain copy print?
<pre code_snippet_id="1982858" snippet_file_name="blog_20161113_1_43122" name="code" class="html">// 身份证号验证
function validateIdnumber(event) {
if ($(event).val() == "") {
$(event).css("border-color", "#a94442");
if($(event).attr("id") =="sidnumber"){
$("#error").css('display', 'block');
$("#error").html("*身份证号为必须填写项");
$("#error").css('color', '#a94442');
}else{
$("#error"+ $(event).attr("id")).css('display', 'block');
$("#error"+ $(event).attr("id")).html("*必须填写项");
$("#error"+ $(event).attr("id")).css('color', '#a94442');
}
$(event).focus();
} else {
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])$)$/;
var idnumber = $(event).val();
if (regIdCard.test(idnumber)) {
// 准确性
if (idnumber.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 += idnumber.substring(i, i + 1) * idCardWi[i];
}
var idCardMod = idCardWiSum % 11;// 计算出校验码所在数组的位置
var idCardlast = idnumber.substring(17);// 得到最后一位身份证号码
if (idCardMod == 2) {
if (idCardlast != "X" && idCardlast != "x") {
$(event).css("border-color", "#a94442");
if($(event).attr("id") =="sidnumber"){
$("#error").css('display', 'block');
$("#error").html("*身份证号格式错误");
$("#error").css('color', '#a94442');
}else{
$("#error"+ $(event).attr("id")).css('display', 'block');
$("#error"+ $(event).attr("id")).html("*格式错误");
$("#error"+ $(event).attr("id")).css('color', '#a94442');
}
$(event).focus();
} else {
$(event).css("border-color", "#ccc");
if($(event).attr("id") =="sidnumber"){
$("#error").css('display', 'none');
}else{
$("#error"+ $(event).attr("id")).css('display', 'none');
}
}
} else {
if (idCardlast != idCardY[idCardMod]) {
$(event).css("border-color", "#a94442");
if($(event).attr("id") =="sidnumber"){
$("#error").css('display', 'block');
$("#error").html("*身份证号格式错误");
$("#error").css('color', '#a94442');
}else{
$("#error"+ $(event).attr("id")).css('display', 'block');
$("#error"+ $(event).attr("id")).html("*格式错误");
$("#error"+ $(event).attr("id")).css('color', '#a94442');
}
$(event).focus();
} else {
$(event).css("border-color", "#ccc");
if($(event).attr("id") =="sidnumber"){
$("#error").css('display', 'none');
}else{
$("#error"+ $(event).attr("id")).css('display', 'none');
}
}
}
}
} else {
$(event).css("border-color", "#a94442");
if($(event).attr("id") =="sidnumber"){
$("#error").css('display', 'block');
$("#error").html("*身份证号格式错误");
$("#error").css('color', '#a94442');
}else{
$("#error"+ $(event).attr("id")).css('display', 'block');
$("#error"+ $(event).attr("id")).html("*格式错误");
$("#error"+ $(event).attr("id")).css('color', '#a94442');
}
$(event).focus();
}
}
}</pre><br>
<br>
<pre></pre>
<br>
完美的身份验证,代码就是不断的解析 规则。
<p></p>
【方法二】
方法二为自己项目中的积累。
//身份证号验证
var aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}
function isCardID(sId){
var iSum=0 ;
var info="" ;
if(!/^\d{17}(\d|x)$/i.test(sId)) return "你输入的身份证长度或格式错误";
sId=sId.replace(/x$/i,"a");
if(aCity[parseInt(sId.substr(0,2))]==null) return "你的身份证地区非法";
sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2));
var d=new Date(sBirthday.replace(/-/g,"/")) ;
if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate()))return "身份证上的出生日期非法";
for(var i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11) ;
if(iSum%11!=1) return "你输入的身份证号非法";
return true;//aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?"男":"女")
}
$.extend($.fn.validatebox.defaults.rules, {
idcared: {
validator: function(value,param){
var flag= isCardID(value);
return flag==true?true:false;
},
message: '不是有效的身份证号码'
}
});
【小结】
对比两种方式,发现道理都是一样的,不断探索,不断积累。