身份证15位转18位升位转换工具详解

发布时间:2023-05-20

一、背景介绍

身份证号码是每个公民唯一的身份识别码。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位身份证号码并不一定是正确的身份证号码,仍需进一步核验。