Delphi身份证号码升级为18位
问题描述:老师说为了积累开发经验,我们应该多看看看别人开发的软件,可我水平有限很多都看不懂,例如老师给我们的15位身份证号码升级为18位身份证计算器,就没有摸到门道,希望得到高人的详细指点。
开发者:软件是经过封装的,但看外观当然看不出门道,你老师的意思是让你们私下研究相关的思路和技术。不过你既然问了,那我就来详细解说其中的门道吧!首先,你要明白18位身份证号码的编码规则:
第一、二位数字表示省、自治区、直辖市;第三、四位数字表示地区、市、州、盟;第五、六位数字表示县、市、镇、区;第七位至第十四位数字表示身份证持有者的出生年月日;第十五位至第十七位数字是顺序码,顺序码的奇数分配给男性,偶数分配给女性。第十八位数字表示效验码。
效验码的算法如下:
S=Ai*Wi,i=1,...,17
Y=mod(S,11)
i表示号从右至左不包括效验码字符在内的位置序号;Ai表示第i位置上的身份证号码字符值;Wi表示第i位置上的加权因子。例如某男性公民身份号码本体码为
510402780502301,S=Σ(Ai×Wi)=(35+9+0+20+0+8+2+9+42+24+0+45+0+10+24+0+2)=230,Y=mod(S,11)=mod(203,11)=20+10/11=10。而10的校验码为2,所以该公民的新身份号码应该为510402197805023012。
本文站长资源库 版权所有,未经批准转载必究