直接使用15位身份证号码转18位工具直接转换:

https://4.plus/15-18

下面是详细介绍:

第一代身份证十五位数升为第二代身份证十八位数的一般规则是:

第一步,在原十五位数身份证的第六位数后面插入19 ,这样身份证号码即为十七位数;

第二步,按照国家规定的统一公式计算出第十八位数,作为校验码放在第二代身份证的尾号。
校验码计算方法:将身份证前十七位数分别乘以不同系数,从第一至十七位的系数分别为7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2,将这十七位数字和系数相乘的结果相加,用加出来的和除以11,看看余数是多少。余数只可能有0、1、2、3、4、5、6、7、8、9、10这十一个数字,其分别对应的最后一位身份证的号码为1、0、X、9、8、7、6、5、4、3、2,这样就得出了第二代身份证第十八位数的校验码。
目前的第二代身份证号码十八位数字就是一组特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码、八位数字出生日期码、三位数字顺序码和一位数字校验码。
地址码(前六位数):表示身份证编码对象常住户口所在省(直辖市、自治区)、地(市),以及县(市、旗、区)的行政区划代码,按照GB/T2260的规定执行。其中:前一、二位数字表示所在省(直辖市、自治区)的代码;第三、四位数字表示所在地(市)的代码;第五、六位数字表示:所在县(市、旗、区)的代码。
出生日期码(第七位至十四位):表示身份证编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
顺序码(第十五位至十七位):表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
校验码(第十八位数):作为尾号的校验码,是由身份证号码编制单位按统一的公式计算出来的。

公式见依据:中华人民共和国国家标准《公民身份号码》(GB11643-1999)

可以用Excel制作15位身份证号码升18位表格:

方法一:

假设身份证在A1单元格
在B1单元格输入公式
=replace(a1,7,,19)&mid(“10×98765432”,mod(sumproduct(mid(replace(a1,7,,19),row(1:17),1)*2^(18-row(1:17))),11)+1,1)
然后可以下拉填充公式

方法二:

A2是15位身份证号

=IF(LEN(A2)=15,REPLACE(A2,7,,19)&MID(“10X98765432”,MOD(SUMPRODUCT(MID(REPLACE(A2,7,,19),ROW(INDIRECT(“1:17”)),1)*2^(18-ROW(INDIRECT(“1:17”)))),11)+1,1),A2)

 

html代码

<html>
<head>
<title>把15位身份证号码转成18位</title>
<script language="javascript">
    var v = new Array();
    var vs = "10X98765432";
    var newCardID = "";   
    function onload()
    {
        document.getElementById("cardID").focus();
    }  
    function checkCardID(cardID15)
    {
         v.push(2, 4, 8, 5, 10, 9, 7, 3, 6, 1, 2, 4, 8, 5, 10, 9, 7);
         var cardID = cardID15.value;
         if(cardID.length!=15)
        {
            alert("请输入15位身份证号码!");
            cardID15.focus();
            return;
        }
        var month = cardID.substring(8,10);//获得15位号码中的月份
        if(!checkMonth(month))
         {
              alert("你输入的身份证号码格式不正确,月份填写错误!")
              cardID15.focus();
              return;
         }
       var year = "19" + cardID.substring(6,8);
       var day = cardID.substring(10,12);
       if(!checkDay(year,month,day))
       {
        alert("你输入的身份证号码的格式不正确,日期格填写错误");
        cardID15.focus();
        return;
       }
     //alert(checkDay(year,month,day));
    //将15位的号码转换位17位
    var cardID17 = cardID.substring(0,6)+"19"+cardID.substring(6);
    var N = 0;
    var R = -1;
    var T = '0';//储存最后一个数字
    var j = 0;
    var cardID18="";
    //计数出第18位数字   
    for (var i = 16; i >= 0; i--) 
    {
            N += parseInt(cardID17.substring(i, i + 1)) * v[j];
            j++;
    }
    R = N % 11;
    T = vs.charAt(R);
    cardID18 = cardID17 + T;
    document.getElementById("cardID18").value=cardID18;
    newCardID = cardID18;
}
//判断输入的月份是否正确
function checkMonth(month)
{
    if(month<1||month>12)
    {
        return false;
    }
    return true;
}
/**
**检查你输入的天数是否正确
**yean为年
**month为月
**day为日
**/
function checkDay(year,month,day)
{
    var Mday = 0;
    if(day<1||day>31)
    {
        return false;
    }
    if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
    {
         Mday = 31;
    } 
    if(month==4||month==6||month==9||month==11)
    {
         Mday = 30;
    }
    if(month==2)
    {
         Mday = isLeapYear(year); 
    }
    if(day>Mday)
    {
        return false;
    }
    return true;
}
//判断你输入的年是否位闰年
function isLeapYear(year)
{
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) ? 29 : 28;
}
function checkNewCardID()
{
alert("18位身份证号码为:"+newCardID);
}
</script>
</head>

<body onload="onload()">
15位号码:<input id="cardID" type="text" maxlength="15" onmouseout="checkCardID(this)"/></br>
18位号码:<input id="cardID18" type="text" readonly="readonly" />
<input type="button" onclick="checkNewCardID();" value="提交"/>
</body>
</html>