您的位置:

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

一、背景介绍

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