ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > 函数与公式 > 各身份证验证公式比较

各身份证验证公式比较

作者:绿色风 分类: 时间:2022-08-18 浏览:121
楼主
传递
各身份证验证公式比较

现在用公式
  1. =IF(LEN(A1)=0,"空",IF(LEN(A1)=15,"老号",IF(LEN(A1)<>18,"位数不对",IF(CHOOSE(MOD(SUM(MID(A1,1,1)*7+MID(A1,2,1)*9+MID(A1,3,1)*10+MID(A1,4,1)*5+MID(A1,5,1)*8+MID(A1,6,1)*4+MID(A1,7,1)*2+MID(A1,8,1)*1+MID(A1,9,1)*6+MID(A1,10,1)*3+MID(A1,11,1)*7+MID(A1,12,1)*9+MID(A1,13,1)*10+MID(A1,14,1)*5+MID(A1,15,1)*8+MID(A1,16,1)*4+MID(A1,17,1)*2),11)+1,1,0,"X",9,8,7,6,5,4,3,2)= IF(ISNUMBER(RIGHT(A1,1)*1),RIGHT(A1,1)*1,"X"),"正确","错误"))))



只判断校验码(长度118):
  1. =IF(RIGHT(A1)=MID("10X98765432",MOD(SUMPRODUCT(MID(A1,ROW($1:$17),1)*MOD(2^(18-ROW($1:$17)),11)),11)+1,1),"正确","错误")


身份证号码校验公式(长度183):字符串"10X98765432"中对应位置 是验证身份证是否符合规范用的。详见后例。
  1. =IF((A1="")+(LEN(A1)=15),IF(A1="","空号","老号"),IF(LEN(A1)=18,IF(RIGHT(A1)=MID("10X98765432",MOD(SUMPRODUCT(MID(A1,ROW($1:$17),1)*MOD(2^(18-ROW($1:$17)),11)),11)+1,1),"正确","错误"),"位数不对"))


或数组公式(长度176):
  1. =IF((A1="")+(LEN(A1)=15),IF(A1="","空号","老号"),IF(LEN(A1)=18,IF(RIGHT(A1)=MID("10X98765432",MOD(SUM(MID(A1,ROW($1:$17),1)*MOD(2^(18-ROW($1:$17)),11)),11)+1,1),"正确","错误"),"位数不对"))


2007以上版本用公式(长度177):
  1. =IF(LEN(B12)=0,"空",IF(LEN(B12)=15,"老号",IF(LEN(B12)<>18,"位数不对",IF(RIGHT(B12)=MID("10X98765432",MOD(SUMPRODUCT(MID(B12,ROW($1:$17),1)*MOD(2^(18-ROW($1:$17)),11)),11)+1,1),"正确","错误"))))



例子:
18位身份证号码
A1="987654321012345"

身份证号码由15位改为18位,分两部分更改:
1、在原号码的第7位插入“19”,把2位数的年份改为4位数表示:REPLACE(A2,7,,19)
2、后面加一个识别码。
①把年份改为4位数成17位号码:"98765419321012345"
②各位上的数字依次乘以2的17、16、15……1次方,并求和:
s=9*2^17+8*2^16+7*2^15+……+4*2^2+5*2^1
公式为:
各位上的数字:MID(REPLACE(A2,7,,19),ROW(INDIRECT("1:17")),1)
系数:2^(18-ROW(INDIRECT("1:17")))
求和:SUM(MID(REPLACE(A2,7,,19),ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17"))))
③求上面结果除以11所得余数:mod(s,11)
④取字符串"10X98765432"中对应位置(余数+1)上的字符。
计算过程:
在编辑栏,一步一步用鼠标按下面所示效果选取公式,按F9:
1、=IF(LEN(A2)=15,REPLACE(A2,7,,19)&MID("10X98765432",MOD(SUM(MID(REPLACE(A2,7,,19),ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1),A2)
2、=IF(LEN(A2)=15,REPLACE(A2,7,,19)&MID("10X98765432",MOD(SUM(MID("98765419321012345",ROW(INDIRECT("1:17")),1)*2^(18-ROW(INDIRECT("1:17")))),11)+1,1),A2)
3、=IF(LEN(A2)=15,REPLACE(A2,7,,19)&MID("10X98765432",MOD(SUM({"9";"8";"7";"6";"5";"4";"1";"9";"3";"2";"1";"0";"1";"2";"3";"4";"5"}*2^(18-ROW(INDIRECT("1:17")))),11)+1,1),A2)
4、=IF(LEN(A2)=15,REPLACE(A2,7,,19)&MID("10X98765432",MOD(SUM({"9";"8";"7";"6";"5";"4";"1";"9";"3";"2";"1";"0";"1";"2";"3";"4";"5"}*{131072;65536;32768;16384;8192;4096;2048;1024;512;256;128;64;32;16;8;4;2}),11)+1,1),A2)
5、=IF(LEN(A2)=15,REPLACE(A2,7,,19)&MID("10X98765432",MOD(SUM({1179648;524288;229376;98304;40960;16384;2048;9216;1536;512;128;0;32;32;24;16;10}),11)+1,1),A2)
6、=IF(LEN(A2)=15,REPLACE(A2,7,,19)&MID("10X98765432",MOD(2102514,11)+1,1),A2)
7、=IF(LEN(A2)=15,REPLACE(A2,7,,19)&MID("10X98765432",8,1),A2)
8、=IF(LEN(A2)=15,REPLACE(A2,7,,19)&"5",A2)
9、=IF(LEN(A2)=15,"987654193210123455",A2)
条件LEN(A2)=15成立,所以返回结果"987654193210123455"







各身份证验证公式比较.jpg
 

身份证验证公式收集.rar
2楼
天南地北
楼主是个有心人!
3楼
水吉果果
4楼
冷冷的春天
都是这么复杂的东西,好难看懂啊    迷茫
5楼
yncxxmj
学习,在工作中有用。

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap