【验证】JS身份证号验证

看到一篇身份证号验证的博客,就也来分享和积累一下吧

【方法一】

方法一是一位博友的博客原文,下面是原文链接:点击打开链接

  最近的前台验证比较多,自然要求也比较高,毕竟是网站上需要的一些东西。

     之前做验证身份证号好像一直是验证位数够不够,如果够,则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: '不是有效的身份证号码'    
        }     
    });  
	

【小结】

    对比两种方式,发现道理都是一样的,不断探索,不断积累。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 29
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值