2.2.5 从身份证号码中提取出生日期和性别
如果工作表中已经包含身份证号码的信息,可以通过公式和函数快速从身份证号码中提取出生日期和性别。18位身份证号码中的第7~14位数字标识一个人的出生日期。在这8位数字中,前4位表示出生年份,后4位表示出生的月和日。18位身份证号码中的第17位数字标识一个人的性别,如果该数字为奇数,则为男性,否则为女性。
如图2-18所示,从B列的身份证号码中提取员工的出生日期和性别。在C2单元格中输入下面的公式并按Enter键,然后将公式向下复制到其他单元格,得到每个员工的出生日期。
=TEXT(MID(B2,7,8),"0000年00月00日")
图2-18 提取出生日期
公式解析:使用MID函数从身份证号码的第7位开始,连续提取8位数字。然后使用TEXT函数将提取出的数字格式设置为“年月日”的形式。TEXT函数的第二个参数中的0是数字占位符,其数量决定要设置的数字位数。在本例中,“0000年00月00日”是将8位数字中的前4位表示为年份,第5~6位表示为月份,最后两位表示为具体的日期。
在D2单元格中输入下面的公式并按Enter键,然后将公式向下复制到其他单元格,得到每个员工的性别,如图2-19所示。
=IF(MOD(MID(B2,17,1),2),"男","女")
图2-19 提取性别
公式解析:使用MID函数提取身份证号码中的第17位数字,然后使用MOD函数判断该数字是否能被2整除,如果不能被2整除,说明该数字是奇数,MOD函数的返回值是1,由于非0数字等价于逻辑值TRUE,所以此时IF条件的判断结果为TRUE,这样就会返回IF函数条件为真时的部分,即为本例中的“男”。如果数字能被2整除,说明该数字偶数,MOD函数的返回值是0,相当于逻辑值FALSE,此时将返回IF函数条件为假时的部分,即本例中的“女”。
下面列出了本例中用到的几个函数的语法格式。
1.MID函数
MID函数用于从文本中的指定位置开始,提取指定数量的字符,语法格式如下:
MID(text,start_num,num_chars)
● text(必选):要从中提取字符的内容。
● start_num(必选):提取字符的起始位置。
● num_chars(可选):提取的字符数量,如果省略该参数,其值默认为1。
2.MOD函数
MOD函数用于计算两个数字相除后的余数,语法格式如下:
MOD(number,divisor)
● number(必选):表示被除数。
● divisor(必选):表示除数。如果该参数为0,MOD函数将返回#DIV/0!错误值。
3.TEXT函数
TEXT函数用于设置文本的数字格式,与在“设置单元格格式”对话框中自定义数字格式的功能类似,语法格式如下:
TEXT(value,format_text)
● value(必选):要设置格式的内容。
● format_text(必选):自定义数字格式代码,需要将格式代码放到一对双引号中。
4.IF函数
IF函数用于在公式中设置判断条件,根据判断结果得到的逻辑值TRUE或FALSE,来返回相应的内容,语法格式如下:
IF(logical_test,[value_if_true],[value_if_false])
● logical_test(必选):IF函数的判断条件,用于对值或表达式进行测试,如果条件成立,则返回TRUE,否则返回FALSE。例如,A1>16是一个表达式,如果单元格A1中的值为15,由于15大于16这个条件不成立,所以该表达式的结果为FALSE。如果logical_test参数不是表达式而是一个数字,那么所有非0数字等价于TRUE,0等价于FALSE。
● value_if_true(可选):当logical_test参数的结果为TRUE时所返回的值。如果logical_test参数的结果为TRUE且省略value_if_true参数的值,即该参数的位置为空,IF函数将返回0。例如,IF(A1>16,,"小于16"),当A1>16为TRUE时,该公式将返回0。
● value_if_false(可选):当logical_test参数的结果为FALSE时所返回的值。如果logical_test参数的结果为FALSE且省略value_if_false参数,即不为该参数保留其逗号分隔符,IF函数将返回FALSE而不是0。但是如果保留value_if_false参数的逗号分隔符,IF函数将返回0而不是FALSE。这说明省略参数的值与省略参数将会影响函数返回的最终结果。