Excel中通过设置数据有效性避免身份证号码录入错误

最近在贴吧中学习Excel,很多问题自己不能回答。只能看别人的答复。看过之后觉得看懂了,但不久之后可能就忘了,收益甚少。今天突然有了一个想法,分析别人的解答结果,记录推测解答思路。也许这样自己记忆更深刻,理解更透彻。说做就做。

问题:如何通过设置数据有效性,避免身份证录入的错误?

答案:数据-有效性-自定义

式将公式中IF的条件作为有效性检验条件:

=NOT(iSERR(--TEXT(--MID(A2,7,8),"#-00-00")))*(MID(A2,7,8)<TEXT(NOW(),"emmdd"))*(RIGHT(A2)=MID("10X98765432",MOD(SUMPRODUCT(MID(A2,ROW($1:$17),1)*MOD(2^(18-ROW($1:$17)),11)),11)+1,1))

解析1,关于数据有效性,如果条件公式结果不是0或是true,便可以正常录入数据;条件公式得到的结果为0或是false,在录入数据之后Excel会弹出非有效数据的提示,数据无法正常输入。

解析2:证个公式分为三个判断,用“*”连接,说明这三个条件必须要同时成立。

解析3第一个判断:NOT(ISERR(--TEXT(--MID(A2,7,8),“#-00-00”))),判断身份证的第7位到第15位是否为日期。

(1)--MID(A2,7,8),去除身份证号码中的日期,将其转化为数字。

(2)函数text,降数字转化为日期,及19230203,表示的是1923年2月3日,而非一九二三千万零二百零三,函数text前的“--”,将日期转化为所代表的数字既:1923年2月3日=8435,如果月份大于13,或日期大于当月最大天数,都会出现#value!

(3)iserr(),检测返回时是否是#N/A以外的错误只,是返回true(真),否则返回false(假)

所以第一部分判断身份证出生日期部分是否是一个日期,如果是返回true(参与*运算时相当于1),否则返回false(参与*运算时相当于0)。

解析4第二个判断:mid(A2,7,8)<text(now(),"emmdd")

(1)now()返回,现在时间的数值,

(2)text中,“emmdd”,是将8位日期形式文本

故第二个判断是身份证日期不得大于当天日期

解析5第三个判断:(RIGHT(A2)=MID("10X98765432",MOD(SUMPRODUCT(MID(A2,ROW($1:$17),1)*MOD(2^(18-ROW($1:$17)),11)),11)+1,1))

这是身份证验证码算法用Excel中的公式表示。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容