一、背景介紹
身份證號碼是每個公民唯一的身份識別碼。15位身份證號碼由6位出生年份(不含世紀數)、4位出生月份和日期、3位順序編號、1位校驗碼組成。18位身份證號碼由17位同等位數數字加一位校驗碼組成,其中校驗碼由十七位數字根據ISO 7064:1983.MOD 11-2校驗碼計算得出。
因為15位身份證號碼已經逐步被18位身份證號碼取代,因此有時需要將15位身份證號碼轉換為18位身份證號碼。本文介紹的15位身份證轉18位身份證工具就可以幫助你完成這一轉換。
二、轉換原理
身份證15位號碼與18位號碼的轉換,是根據公民的出生日期、出生地代碼、順序號、校驗碼,按照國家標準GB 11643-1999執行的演算法來完成的。具體過程如下:
1、將15位身份證號碼的第7-12位,即出生年份及月份日前加上對應的世紀年份20,如:741221 –> 19741221;
2、將15位身份證號碼的第15-17位,即順序號加3個隨機數字,作為18位身份證號碼的第14-16位;
3、計算身份證號碼的校驗碼,具體演算法可以參考國家標準GB 11643-1999。
三、代碼實現
function transferID(oldID) { var idYear = oldID.substring(6,8); var century = "19"; if (parseInt(idYear) >= 0 && parseInt(idYear) <= 22) { century = "20"; } var newID = oldID.substring(0,6) + century + idYear + oldID.substring(8); var randomNum = Math.floor(Math.random() * 1000).toString(); while (randomNum.length < 3) { randomNum = "0" + randomNum; } newID = newID.substring(0,14) + randomNum + newID.substring(14); var sum = 0; for (var i = 0; i < 17; i++) { sum += newID.charAt(i) * ((Math.pow(2, 17 - i)) % 11); } var checkCode = (12 - sum % 11) % 11; if (checkCode == 10) { checkCode = "X"; } else { checkCode = checkCode.toString(); } newID = newID + checkCode; return newID; }
該函數接受一個15位身份證號碼作為輸入,輸出對應的18位身份證號碼。實現過程中,首先將15位身份證號碼的出生年份加上世紀年份,並把加和結果替換原來的6-8位;然後在14-16位隨機添加3個數字,形成新的18位身份證號碼;最後通過校驗碼計算規則,計算出最後一位校驗位並添加到最終的18位身份證號碼中。
四、使用示例
var oldID = "110102760505001"; var newID = transferID(oldID); console.log("15位身份證號碼:" + oldID); console.log("轉換後的18位身份證號碼:" + newID);
以上代碼輸出結果如下:
15位身份證號碼:110102760505001
轉換後的18位身份證號碼:110102197605055000
五、注意事項
身份證是每個公民的重要身份證明,轉換身份證號碼時需要注意以下幾點:
1、轉換過程存在一定的錯誤率,因此建議使用時進行多次驗證;
2、轉換後的18位身份證號碼並不一定是正確的身份證號碼,仍需進一步核驗。
原創文章,作者:CBFW,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/147388.html