Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4665|回复: 8

[已解决]身份证号码校验公式 长度418

[复制链接]
发表于 2011-8-3 21:37 | 显示全部楼层 |阅读模式
目前最短的身份证号码检验公式,长度:418(含等号)
1 小时前 上传
下载附件 (14.5 KB)



=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"),"正确","错误"))))
最佳答案
2011-8-5 16:54
本帖最后由 qinqh_yl 于 2011-8-5 17:55 编辑

回复 雄鹰 的帖子

函数嵌套层数过多,2003版函数嵌套不能超过7层,2007以上版本就没问题。
可以改为:

=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),"正确","错误"),"位数不对"))
或:
=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),"正确","错误"),"位数不对"))
后一个为数组公式。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-8-3 21:41 | 显示全部楼层
如果只判断位数和识别码的话,418个字符算是很长很长的公式了
回复

使用道具 举报

发表于 2011-8-3 21:44 | 显示全部楼层
这个公式今天在这版已经是第2次发了.
不知道是从哪转来的.
回复

使用道具 举报

发表于 2011-8-4 22:37 | 显示全部楼层
只判断校验码:
=IF(RIGHT(A1)=MID("10X98765432",MOD(SUMPRODUCT(MID(A1,ROW($1:$17),1)*MOD(2^(18-ROW($1:$17)),11)),11)+1,1),"正确","错误")

回复

使用道具 举报

发表于 2011-8-4 23:10 | 显示全部楼层
长点没关系吧,自己的逻辑关系自己懂就行
回复

使用道具 举报

发表于 2011-8-6 13:54 | 显示全部楼层
本帖最后由 wangg913 于 2011-8-6 13:54 编辑

回复 雄鹰 的帖子

终极版?再想365小时。
回复

使用道具 举报

 楼主| 发表于 2011-8-6 07:47 | 显示全部楼层
身份证号码校验公式:
=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),"正确","错误"),"位数不对"))

或数组公式:
=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以上版本用公式:
=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),"正确","错误"))))

呵呵,这会不会是终极版的了呢?
回复

使用道具 举报

发表于 2011-8-5 16:54 | 显示全部楼层    本楼为最佳答案   
本帖最后由 qinqh_yl 于 2011-8-5 17:55 编辑

回复 雄鹰 的帖子

函数嵌套层数过多,2003版函数嵌套不能超过7层,2007以上版本就没问题。
可以改为:

=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),"正确","错误"),"位数不对"))
或:
=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),"正确","错误"),"位数不对"))
后一个为数组公式。

评分

参与人数 1 +1 收起 理由
雄鹰 + 1

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2011-8-5 15:24 | 显示全部楼层
只判断校验码:
=IF(RIGHT(A1)=MID("10X98765432",MOD(SUMPRODUCT(MID(A1,ROW($1:$17),1)*MOD(2^(18-ROW($1:$17)),11)),11)+1,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),"正确","错误"))))
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-21 19:31 , Processed in 0.608209 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表