15位身份证号码升18位,你可以直接使用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("10x98765432",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)
源码:
15位身份证号码转18位工具的html源代码:
<html>
<head>
<title>把15位身份证号码转成18位(4.plus)</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>