|
以前身份证号15位,还好一点,如今可真是麻烦,既有15位又有18位,晕啊……
由于EXCEL单元格的限制,15位以上的数字后几位就会自己动变为0,这样一来,别说计算了,数值都不准确了,麻烦!
当然了,可以把单元格的格式改成文本(先改格式后输入数字),或者在数字前加“'”,来让18位都显示出来,但两种不同的号毕竟有着很多问题。
我们都知道,通过身份证号是可以识别生日和性别的,两种格式的身份证就意味着在识别的时候要加条件,晕,又得制造一个几公里长的公式!
所以,我在具体做的过程中是把身份证号分四个单元格输入的:
A:320101
B:出生年月日
C:001
D:识别码
其中B列是日期格式,设置为“YYYYMMDD”;C列格式设置为“000”。
个人觉得这样做最大的好处是可以避免身份证号输入时的错位,尤其在输入B列时,不是日期范围立刻会被提醒。
当然,这样一来出现了新问题,应该是15位的身份证号变成了17位,总不能一个一个去改吧,貌似条件格式也用不起来,所以,这只是个身份证号的输入,显示的时候还需要做点手脚:
=A2&IF(D2="",TEXT(B2,"YYMMDD"),TEXT(B2,"YYYYMMDD"))&TEXT(C2,"000")&D2
当然了,如果仅是为了输入而输入,不需要对性别年龄进行识别,那就不用这么麻烦。
整体输入的身份证是不是就无法识别年龄性别了呢?也不是,前面说到要加条件。
从身份证号中计算年龄的公式是:
=--TEXT(TODAY()-SUM(DATE(MIDB(C3,7,{4,2}),MIDB(C3,{11,9},2),MIDB(C3,{13,11},2))*(LENB(C3)={18,15})),"Y")
或者
=YEAR(TODAY()-IF(LENB(A2)=15,19&MIDB(A2,7,2)&"-"&MIDB(A2,9,2)&"-"&MIDB(A2,11,2),MIDB(A2,7,4)&"-"&MIDB(A2,11,2)&"-"&MIDB(A2,13,2)))
或者
=DATEDIF(--TEXT((MID(C4,7,6+(LEN(C4)=18)*2)),"#-00-00"),TODAY(),"y")
从身份证号中提取性别的公式是:
=CHOOSE(ISODD(MID(A2,15+(LEN(A2)=18)*2,1))+1,"女","男")
注:识别身份证号种类可以用LEN(B)的方式,或者CHOOSE的方式,以上各举一例。
吼吼~~~~~~~~~~~~~~~哪个更麻烦一些?
没办法,谁让中国的身份证号设得麻烦呢?! |
|