中國大陸身份證生成器: 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開頭,原因是行政區划改變所致。中國各地的行政區划代碼請參考國家統計局網站。
版權聲明:本文為博主原創文章,未經博主允許不得轉載。