2000年以后出生15位身份证转换为18位的问题

为什么在EXCEL里用:=IF(LEN(A1)=15,REPLACE(A1,7,,19)&MID("10X98765432",MOD(SUM(MID(REPLACE(A1,7,,19),ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1),A1)来将2000年以后出生的人的身份证转换成18位的,最后一位校验码会出错呢,如:52242220010105341x,我把这个身份证号的“20”和最后一位“X”去掉成为15位,之后用上面这条函数转换18位,最后一位不是“X”而是“3”呢,请高手帮忙解决下,谢谢!!

第1个回答  2016-05-31
用公式:
=IF(LEN(A1)=15,REPLACE(A1,7,,19)&INDEX({0;"X";9;8;7;6;5;4;3;2;1},MOD(SUMPRODUCT(MID(REPLACE(A1,7,,19),ROW($1:$17),1)*{7;9;10;5;8;4;2;1;6;3;7;9;10;5;8;4;2}),11)),A1)
第2个回答  2018-05-14
AAAA https://jingyan.baidu.com/article/48206aeaf4a633216ad6b3ff.html
能成功计算2000年以后出生的身份证最后位校验码,用来判断身份号正确。
=CHOOSE(MOD(SUM((MID(A2,1,1)+MID(A2,11,1))*7+(MID(A2,2,1)+MID(A2,12,1))*9+(MID(A2,3,1)+MID(A2,13,1))*10+(MID(A2,4,1)+MID(A2,14,1))*5+(MID(A2,5,1)+MID(A2,15,1))*8+(MID(A2,6,1)+MID(A2,16,1))*4+(MID(A2,7,1)+MID(A2,17,1))*2+MID(A2,8,1)+MID(A2,9,1)*6+MID(A2,10,1)*3),11)+1,1,0,"X",9,8,7,6,5,4,3,2)
第3个回答  2016-05-31
方法/步骤
1
首先咱们分析一下18位公民身份证号码的组成(百度百科搜索“居民身份证号码”得出的参考,以图为证):
编号识别
1、身份证编码规则如下:根据〖中华人民共和国国家标准GB11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。
顺序码(身份证第十五位到十七位)是县、区级政府所辖派出所的分配码,每个派出所分配码为10个连续号码,例如“000-009”或“060-069”,其中单数为男性分配码,双数为女性分配码,如遇同年同月同日有两人以上时顺延第二、第三、第四、第五个分配码。如:007的就是个男生,而且和他同年月日生的男生至少有两个,他们的后四位是001*和003*。分配顺序码中“999、998、997、996”四个顺序号分别为男女性百岁以上老人专用的特定编号。
校验码(身份证最后一位)是根据前面十七位数字码,按照ISO7064:1983.MOD11-2校验码计算出来的检验码。
2、从1999年10月1日起,全国实行公民身份证号码制度,居民身份证编号由原15位升至18位。前6位为地址码;第七位至14位为出生日期码,此码由6位数改为8位数,其中年份用4位数表示;第15位至17位为顺序码,取消了顺序码中对百岁老人使用的特定编号;第十八位为校验码,主要是为了校验计算机输入公民身份证号码的前17位数字是否正确,其取值范围是0至10,当值等于10时,用罗马数字符χ表示。

2
为了说明这一点,我特意翻了我某亲戚的老身份证得出一个15位的老身份证号码522634520829128来进行分析,果不其然,522634就是贵州省雷山县的行政编码,520829是他的出生日期,后面3位我想应该就是顺序码了:

3
那么,我们只需将原来的6位出生日(如上面这个号码的出生日期是520829)期变为现在的8位出生日期(把出生年改成4位,变为19520829),号码就变成17位的号码,即52263419520829128,再在末位加上校验码就变为18位身份证号码了。那么,我们再到百科去看一下校验码的计算方法:

4
咱们复制出“校验码的计算方法”出来,认真研究下是怎么回事:
1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
2、将这17位数字和系数相乘的结果相加。
3、用加出来和除以11,看余数是多少?
4、余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2。
5、通过上面得知如果余数是3,就会在身份证的第18位数字上出现的是9。如果对应的数字是10,身份证的最后一位号码就是罗马数字x。
例如:某男性的身份证号码为【53010219200508011x】, 我们看看这个身份证是不是合法的身份证。
首先我们得出前17位的乘积和【(5*7)+(3*9)+(0*10)+(1*5)+(0*8)+(2*4)+(1*2)+(9*1)+(2*6)+(0*3)+(0*7)+(5*9)+(0*10)+(8*5)+(0*8)+(1*4)+(1*2)】是189,然后用189除以11得出的结果是189/11=17----2,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的检验码是X。所以,可以判定这是一个正确的身份证号码。

那么,我们按照百科所讲的方法,绝对能够算出校验码,那么,我们就到Excel中考虑一下怎么用函数实现这一过程吧:

5
咱们就以我拿的这个15位身份证号码为例,来一步一步分析怎么实现,最后再思考怎么用一个公式实现吧!
首先用公式来实现第3步的插入“19”,咱们只需用Excel的REPLACE函数进行字符串替换就行了,输入的公式是=REPLACE(A13,7,,19):

然后,咱们来考虑第4步中校验码的计算方法要如何用公式实现,咱们得先把上面得出的17位数分别取出来放在17个单元格中,方面操作,那么,首先解决的问题是如何把他分别取出来呢?这里我想到用mid公式取数,截图给大家看看,我想应该不用说明了吧:

然后拖动填充全部取出17位对应的数:

咱们来完成第4步的第2”将这17位数字和系数相乘的结果相加“,那么,同样地,先把17位校验码依次写在电子表格的某个区域内(如图中的C7:S7),然后对应相乘的结果放在某单元格内(如图中的C12:S12),同样拖动填充乘积(下图的第二张图所示),最后再求和(下图第三张图片):

用公式完成第4步的第3”用加出来和除以11,看余数是多少?“,公式是输入=MOD(A10,11),得出余数是7:

同样地,咱们用一一对应关系,将余数与校验码对应起来,7对应的自然就是5了:

这里咱们用一个公式取值试试,输入公式=INDEX(C16:M16,1,A13+1),就得到对应的值了,来解读下这个公式:这个公式的第一个参数是数据区域,第二个参数是相对数据区域中的第几行,因为只有一行,所以我们填1,第三个参数是第几列,取A13的数值+1,为什么加1?因为上面C14:M14区域的序列是从0开始的咱们数个数他就是在原基础上加1:

之后用“&”连接字符串将前面的17位与校验码连接起来,即得出18位的身份证号码了:

通过分析最后是得出18位的新身份证号码了,但是,我们要怎么把这些步骤的公式合并起来呢?

咱们就以这个表为例,假设在A2处存放的是15位身份证号码,需要在B2处转换为18位身份证号码:
一、按照第5步方法,先添上“19”,即得出REPLACE(A2,7,,19)
二、第6步中,咱们用mid函数分别将17位数取出来,可以这样表达:
mid(REPLACE(A2,7,,19),1,1),mid(REPLACE(A2,7,,19),2,1),mid(REPLACE(A2,7,,19),3,1)...mid(REPLACE(A2,7,,19),17,1)
三、第8步将这17位数字和系数相乘的结果相加,即:
sum(mid(REPLACE(A2,7,,19),1,1)*7+mid(REPLACE(A2,7,,19),2,1)*9+...+mid(REPLACE(A2,7,,19),17,1)*2)。
四、第9步中将结果进行求余:mod(sum(mid(REPLACE(A2,7,,19),1,1)*7+mid(REPLACE(A2,7,,19),2,1)*9+...+mid(REPLACE(A2,7,,19),17,1)*2),11).
五、第11步中,我们用index取值,但想一下,其数据都在每个单元格内,现在数据变为了一个整体,我们怎么办呢?不访直接把数据放进来代替C16:M16,那么,第11步的公式可改为:INDEX({1,0,"X",9,8,7,6,5,4,3,2},1,A13+1),而A13+1的数据是咱们分步中的求余,用上面的求余表达式代替,公式变为:
INDEX({1,0,"X",9,8,7,6,5,4,3,2},1,mod(sum(mid(REPLACE(A2,7,,19),1,1)*7+mid(REPLACE(A2,7,,19),2,1)*9+...+mid(REPLACE(A2,7,,19),17,1)*2),11)),这就可以求出效验码了。
六、然后再将原来的17位(REPLACE(A2,7,,19))和校验码(INDEX({1,0,"X",9,8,7,6,5,4,3,2},1,mod(sum(mid(REPLACE(A2,7,,19),1,1)*7+mid(REPLACE(A2,7,,19),2,1)*9+...+mid(REPLACE(A2,7,,19),17,1)*2),11)+1))进行字符串连接起来,就变为18位号码了,即(REPLACE(A2,7,,19))&(INDEX({1,0,"X",9,8,7,6,5,4,3,2},1,(MOD(SUM(MID(REPLACE(A2,7,,19),1,1)*7+MID(REPLACE(A2,7,,19),2,1)*9+...+MID(REPLACE(A2,7,,19),17,1)*2),11))+1))。
最后的结果如下截图第2张所示:

最后为了说明公式是正确的,我们把公式放在下面的某个单元格中,已把最后的身份证号码显示出来为证:
当然,我们在电子表格输入公式时不能有省略号“...”的,最后完整的公式是
=(REPLACE(A2,7,,19))&(INDEX({1,0,"X",9,8,7,6,5,4,3,2},1,(MOD(SUM(MID(REPLACE(A2,7,,19),1,1)*7+MID(REPLACE(A2,7,,19),2,1)*9+MID(REPLACE(A2,7,,19),3,1)*10+MID(REPLACE(A2,7,,19),4,1)*5+MID(REPLACE(A2,7,,19),5,1)*8+MID(REPLACE(A2,7,,19),6,1)*4+MID(REPLACE(A2,7,,19),7,1)*2+MID(REPLACE(A2,7,,19),8,1)*1+MID(REPLACE(A2,7,,19),9,1)*6+MID(REPLACE(A2,7,,19),10,1)*3+MID(REPLACE(A2,7,,19),11,1)*7+MID(REPLACE(A2,7,,19),12,1)*9+MID(REPLACE(A2,7,,19),13,1)*10+MID(REPLACE(A2,7,,19),14,1)*5+MID(REPLACE(A2,7,,19),15,1)*8+MID(REPLACE(A2,7,,19),16,1)*4+MID(REPLACE(A2,7,,19),17,1)*2),11))+1))

http://jingyan.baidu.com/article/22a299b525f9cd9e18376a58.html本回答被提问者和网友采纳