搜档网
当前位置:搜档网 › 身份证号码转换

身份证号码转换

身份证号码转换

偶然间对15位身份证号转18位身份证号的转换原理发生了兴趣,显然,前17位没有什么花样可言,而最后一位的转换,却并非是对原来的15位号码进行简单的加法或乘法运算就可以完成的。上网查了一下,发现说的都很含糊,给出的计算公式也不是那么明朗,总之,一句话,看不懂的说~~
偶尔之中,发现了一段用VB写的15位转18位的程序源码,才豁然明了。
先给大家看一下源码:
function oldtonew (oldnumber)
newnumber = left (oldnumber,6) + "19" + right (oldnumber,9)
num = 0
for i = 18 to 2 step -1
num = num + (2 ^ (i - 1) mod 11) * (mid (newnumber,19 - i,1))
next i
num = num mod 11
select case num
case 0
code = "1"
case 1
code = "0"
case 2
code = "X"
case else
code = trim (str (12 - num))
end select
oldtonew = newnumber + code
end function
估计,能看懂的不会太多,那偶就来演算一个吧。
假定旧号码为ABCDEFGHIJKLMNO
第一步,将旧号码变成ABCDEF19GHIJKLMNO
第二步,利用2的17次方到2的1次方对11进行除法运算后取得的余数,与旧号码ABCDEF19GHJIJKLMNO中的各位依次相乘并相加,得到一个num,简单来说,这个
num = 7*A+9*B+10*C+5*D+8*E+4*F+2*1+1*9+6*G+3*H+7*I+9*J+10*K+5*L+8*M+4*N+2*O
第三步,将num除以11得到一个余数S
第四步,如果S=0,则最后一位数字为1;
如果S=1,则最后一位数字为0;
如果S=2,则最后一位数字为X;
如果S=3到10,则最后一位数字为12-S
最后,将第四步得到的结果与ABCDEF19GHIJKLMNO拼接起来,就得到了18位的新号码。

祝大家不要算晕哦~~

相关主题