身份證號(hào)碼驗(yàn)證

剛剛在扒12306能改火車(chē)席位的代碼,貌似這個(gè)bug現(xiàn)在已經(jīng)被修復(fù)了。

不過(guò)扒的過(guò)程中發(fā)現(xiàn)了身份證驗(yàn)證的一段代碼,就研究了一下,發(fā)現(xiàn)果然不是隨便生成的[哈哈]。

來(lái)說(shuō)一下18位的身份證號(hào)碼:

前6位號(hào)碼是地區(qū)編號(hào),(地址碼) 其中前兩位是省份。

中間8位是出生年月日。

再3位 是順序碼,貌似是那一天第多少個(gè)出生的。(這3位的最后一位,也就是身份證號(hào)碼的第17位,奇數(shù)為男偶數(shù)為女)

最后1位,校驗(yàn)碼,驗(yàn)證身份證號(hào)真?zhèn)巍?/p>

驗(yàn)證碼的算法:

1:身份證號(hào)碼前17位數(shù)分別乘以以下系數(shù):7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2;

2:將以上分別相乘得到的結(jié)果相加:

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

3:以上結(jié)果除以11,得出余數(shù);

4:余數(shù)0-10 分別對(duì)應(yīng)下數(shù)字:1,0,X,9,8,7,6,5,4,3,2。(0=>1,1=>0,2=>X,3=>9……)。

上面那個(gè)數(shù)字就是第18位

以下代碼扒自12306

function validateFirIdCard(g) {
var f = 0;
var a;
var e = {
11 : "北京",
12 : "天津",
13 : "河北",
14 : "山西",
15 : "內(nèi)蒙",
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 : "臺(tái)灣",
81 : "香港",
82 : "澳門(mén)",
91 : "國(guó)外"
};

    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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容