javascript校驗身份證,獲取生日、性別、年齡和身份證算法說明


中國大陸身份證生成器: http://www.tool7001.com/IDCodeGenerate.aspx

function checkId(pId) {
    //檢查身份證號碼 
    var arrVerifyCode = [1, 0, "x", 9, 8, 7, 6, 5, 4, 3, 2];
    var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    var Checker = [1, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1];
    if (pId.length != 15 && pId.length != 18) return "身份證號共有15位或18位";
    var Ai = pId.length == 18 ? pId.substring(0, 17) : pId.slice(0, 6) + "19" + pId.slice(6, 16);
    if (!/^\d+$/.test(Ai)) return "身份證除最后一位外,必須為數字!";
    var yyyy = Ai.slice(6, 10), mm = Ai.slice(10, 12) - 1, dd = Ai.slice(12, 14);
    var d = new Date(yyyy, mm, dd), now = new Date();
    var year = d.getFullYear(), mon = d.getMonth(), day = d.getDate();
    if (year != yyyy || mon != mm || day != dd || d > now || year < 1800) return "身份證輸入錯誤!";
    for (var i = 0, ret = 0; i < 17; i++) ret += Ai.charAt(i) * Wi[i];
    Ai += arrVerifyCode[ret %= 11];
    return pId.length == 18 && pId != Ai ? "身份證輸入錯誤!" : Ai;
};

//根據身份證取 省份,生日,性別
function getInfo() {
    //獲取輸入身份證號碼
    var ic = $("#txtCardID").val();
    ic = checkId(ic);
    if (isNaN(ic)) return;
    var ic = String(ic);
    //獲取出生日期
    var birth = ic.substring(6, 10) + "-" + ic.substring(10, 12) + "-" + ic.substring(12, 14);
    //獲取性別
    var gender = ic.slice(14, 17) % 2 ? "1" : "2"; // 1代表男性,2代表女性
    var sexOption = document.getElementsByName("rabSex");
    for (var i = 0; i < sexOption.length; i++) {
        if (sexOption[i].value == gender) {
            sexOption[i].checked = true;
            break;
        }
    }
    //獲取年齡
    var myDate = new Date();
    var month = myDate.getMonth() + 1;
    var day = myDate.getDate();
    var age = myDate.getFullYear() - ic.substring(6, 10) - 1;
    if (ic.substring(10, 12) < month || ic.substring(10, 12) == month && ic.substring(12, 14) <= day) {
        age++;
    }
    $("#txtAge").val(age);
}

【轉載】中國大陸18位身份證算法。  

經常看到網上有驗證18位身份證號碼的網站,他是怎么驗證的?

其實只要知道了算法,那么一切都簡單了。

大陸的身份證為18位,老的身份證是15位。

關於身份證第18是怎么計算的,原理如下:根據〖中華人民共和國國家標准 GB 11643-1999〗中有關公民身份號碼的規定,公民身份號碼是特征組合碼,由十七位數字本體碼和一位數字校驗碼組成。排列順序從左至右依次為:六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。

地址碼(身份證前六位)表示編碼對象常住戶口所在縣(市、旗、區)的行政區划代碼。(所有區域的編碼可以到這個網站http://www.stats.gov.cn/tjbz/index.htm 查詢到最新的縣及縣以上的行政編碼資料。)

生日期碼(身份證第七位到第十四位)表示編碼對象出生的年、月、日,其中年份用四位數字表示,年、月、日之間不用分隔符。例如:1981年05月11日就用19810511表示。

順序碼(身份證第十五位到十七位)為同一地址碼所標識的區域范圍內,對同年、月、日出生的人員編定的順序號。其中第十七位奇數分給男性,偶數分給女性。

校驗碼(身份證最后一位)是根據前面十七位數字碼,按照ISO 7064:1983.MOD 11-2校驗碼計算出來的檢驗碼。

第十八位數字的計算方法為:

1.將前面的身份證號碼17位數分別乘以不同的系數。從第一位到第十七位的系數分別為:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

2.將這17位數字和系數相乘的結果相加。

3.用加出來和除以11,看余數是多少?

4余數只可能有0 1 2 3 4 5 6 7 8 9 10這11個數字。其分別對應的最后一位身份證的號碼為1 0 X 9 8 7 6 5 4 3 2。

5.通過上面得知如果余數是2,就會在身份證的第18位數字上出現羅馬數字的Ⅹ。如果余數是10,身份證的最后一位號碼就是2。

例如:某男性的身份證號碼是34052419800101001X。我們要看看這個身份證是不是合法的身份證。

首先:我們得出,前17位的乘積和是189

然后:用189除以11得出的結果是17 + 2/11,也就是說余數是2。

最后:通過對應規則就可以知道余數2對應的數字是x。所以,這是一個合格的身份證號碼。

備注說明:關於大陸身份證有的人會發現前幾位為什么變化了。這主要出現在中國的重慶。原有的重慶人的身份證多數以51開頭。以前隸屬於四川的原因。但新辦的身份證可能是50開頭,原因是行政區划改變所致。中國各地的行政區划代碼請參考國家統計局網站。

版權聲明:本文為博主原創文章,未經博主允許不得轉載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM