美文网首页
身份证号码验证

身份证号码验证

作者: 小5筒 | 来源:发表于2017-08-29 10:59 被阅读0次

刚刚在扒12306能改火车席位的代码,貌似这个bug现在已经被修复了。

不过扒的过程中发现了身份证验证的一段代码,就研究了一下,发现果然不是随便生成的[哈哈]。

来说一下18位的身份证号码:

前6位号码是地区编号,(地址码) 其中前两位是省份。

中间8位是出生年月日。

再3位 是顺序码,貌似是那一天第多少个出生的。(这3位的最后一位,也就是身份证号码的第17位,奇数为男偶数为女)

最后1位,校验码,验证身份证号真伪。

验证码的算法:

1:身份证号码前17位数分别乘以以下系数:7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2;

2:将以上分别相乘得到的结果相加:

第一位*7 + 第二位*9 +…… + 第17位*2

3:以上结果除以11,得出余数;

4:余数0-10 分别对应下数字:1,0,X,9,8,7,6,5,4,3,2。(0=>1,1=>0,2=>X,3=>9……)。

上面那个数字就是第18位

以下代码扒自12306

function validateFirIdCard(g) {
var f = 0;
var a;
var e = {
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 : "国外"
};

    if (g.length == 15) {
        a = idCardUpdate(g)
    } else {
        a = g
    }
    if (!/^\d{17}(\d|x)$/i.test(a)) {
        return false
    }
    a = a.replace(/x$/i, "a");
    if (e[parseInt(a.substr(0, 2))] == null) {
        return false
    }
    var c = a.substr(6, 4) + "-" + Number(a.substr(10, 2)) + "-" + Number(a.substr(12, 2));
    var h = new Date(c.replace(/-/g, "/"));
    if (c != (h.getFullYear() + "-" + (h.getMonth() + 1) + "-" + h.getDate())) {
        return false
    }
    for (var b = 17; b >= 0; b--) {
        f += (Math.pow(2, b) % 11) * parseInt(a.charAt(17 - b), 11)
    }
    if (f % 11 != 1) {
        return false
    }
    return true
}

function idCardUpdate(g) {
    var b;
    var f = /^(\d){15}$/;
    if (f.test(g)) {
        var e = 0;
        var a = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
        var d = new Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2");
        g = g.substr(0, 6) + "19" + g.substr(6, g.length - 6);
        for (var c = 0; c < g.length; c++) {
            e += parseInt(g.substr(c, 1)) * a[c]
        }
        g += d[e % 11];
        b = g
    } else {
        b = "#"
    }
    return b

相关文章

  • 苹果验证身份证号码

    iOS身份证号码验证

  • 互金当中可以参考判断用户的纬度

    验证申请人身份: 姓名、身份证号码:通过国政通来验证 姓名、银行卡号:通过银行验证 手机号、姓名、身份证号码、家庭...

  • 校验身份证是否正确

    //验证身份证号码 +(BOOL)checkIdentityCardNo:(NSString*)cardNo { ...

  • go web接收参数的验证

    必填字段验证: 密码的正则验证 数字验证: 中文验证: 英文验证 电子邮箱验证: 手机号码验证: 身份证号码 十八...

  • PHP常用的一些正则验证规则

    1、验证手机号码 正确返回 true 2、验证固定电话 3、验证邮箱格式 4、验证身份证号码格式 5、验证银行卡号...

  • 身份证号码验证

    今天项目需要添加身份证号码输入框,如果不对身份证号码验证,那这个框的存在毫无意义,所以从网上找了一段代码

  • 身份证验证

    最近在参与一个共享汽车的项目的开发,该项目是需要上传身份证号码作为绑定验证的,身份证号码作为我国公民的唯一标识,有...

  • iOS 正则表达式

    1,常用元字符 2,常用正则表达式 1,手机号 2,身份证号码 3,邮箱 4,IP验证 5,密码验证 6,0到10...

  • 身份证号码验证

    刚刚在扒12306能改火车席位的代码,貌似这个bug现在已经被修复了。 不过扒的过程中发现了身份证验证的一段代码,...

  • 社保资格认证

    支付宝~豫事办~社保资格认证~前往认证~为他人认证,输入老人姓名身份证号码,活脸验证

网友评论

      本文标题:身份证号码验证

      本文链接:https://www.haomeiwen.com/subject/mphodxtx.html