腾讯防成谜的身份证验证算法。身份证验证算法

//顶层封装

    onIdenBlur:function()
        {
            var id_type = $('#card_type').val(); //类型1为身份证验证
            var id_num =  $('#uv_aq_identity').val(); //身份证号
            id_num = $.trim(id_num);
            if(id_num == ""){
                $("#uv_aq_identity").parent().next().show().find("span").text("不能为空");
                return false;
            }
            var flag = true;
            if(id_type == "1")
            {
                if(!this.IdCardValidate(id_num)){
                    flag = false;
                }
            }
            else if(id_type == "3")
            {
                var pattern = /^(H|h|M|m)(\d{10})$/;
                if(!pattern.test(id_num)){
                    flag = false;
                }
            }
            if(!flag){
                $("#uv_aq_identity").parent().next().show().find("span").text("证件号码格式不对");
            }else{
                $("#card_type_index").val(id_type);
            }
            return flag;
        }

// 中间身份证位数判断 15位或者18 位

IdCardValidate:function(idCard)
        {
                idCard = $.trim(idCard);               //去掉字符串头尾空格  
                if (idCard.length == 15) 
                {
                    return this.isValidityBrithBy15IdCard(idCard);       //进行15位身份证的验证
                }
                else if (idCard.length == 18) 
                {
                    var a_idCard = idCard.split("");                // 得到身份证数组  
                    if(this.isValidityBrithBy18IdCard(idCard)&&this.isTrueValidateCodeBy18IdCard(a_idCard))
                    {
                        //进行18位身份证的基本验证和第18位的验证
                        return true;
                    }
                    else
                    {
                        return false; 
                    }
                }
                else
                {
                    return false;
                }
        }

//身份证验证算法(函数)

//十五位
 isValidityBrithBy15IdCard:function(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 false;   
                }  
                else 
                {    
                    return true;   
                }   
        }

//十八位

isValidityBrithBy18IdCard:function(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 false;   
            }else{   
                return true;   
            }    
        }

///十八位的第二个验证
 isTrueValidateCodeBy18IdCard:function(a_idCard)
        {
            var ValideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ];    // 身份证验证位值.10代表X
            var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ];    // 加权因子
            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;   
            }       
            else    
            {       
                return false;   
            }       
        }

//来源 https://aq.qq.com/v2/uv_aq/html/mbmanage/pc_mobile_uv_2.html
1.非空判断
2.位数判断
3.身份证号验证
结论:进过多次尝试输错验证码我发现,他这个算法可以验证身份证号码是否填写正确,这个算法只验证了位数 以及生日还有最后一位数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值