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