打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
从身份证号码里学常用函数

身份证号码里,每一位都有明确的含义,本期将从身份证号码出发,给大家介绍其中可以玩转的常用函数。

首先,给大家列示一下身份证号码各数位的含义:

(1)前1、2位数字表示:所在省份的代码; 

(2)第3、4位数字表示:所在城市的代码; 

(3)第5、6位数字表示:所在区县的代码; 

(4)第7~14位数字表示:出生年、月、日; 

(5)第15、16位数字表示:户口所在地派出所的代表号码; 

(6)第17位数字表示性别:奇数表示男性,偶数表示女性; 

(7)第18位数字是校检码:根据前十七位数字计算所得。

接下来,我们把几个字段合并归类,从以下4个应用角度给大家介绍相关的函数:

01 提取出生地

我们把前6位统一放在一起,做为出生地信息。首先,我们学习如何从字符串的左边提取指定长度的子串。函数为:

LEFT(text, [num_chars])

text(必需):包含要提取的字符的文本字符串。

num_chars(可选):指定要由 LEFT 提取的字符的数量。num_chars 必须大于或等于零。如果 num_chars 大于文本长度,则 LEFT 返回全部文本。如果省略 num_chars,则假定其值为 1。


在下图中,C2单元格中输入的函数为 =LEFT(B2, 6),表示从B2单元格中从左提取6位。然后双击填充柄向下填充:


假定我们手中还有一套这样的代码与地区的对应表,上述的信息还可以进一步利用:


我们将使用以下函数,从这个对应表中自动检索出相应的地区名称,函数如下:

VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])

lookup_value(必需):要查找的值。要查找的值必须位于 table-array 中指定的单元格区域的第一列中。

Table_array (必需):VLOOKUP 在其中搜索 lookup_value 和返回值的单元格区域。

col_index_num (必需):其中包含返回值的单元格的编号(table-array 最左侧单元格为 1 开始编号)。

range_lookup(可选):TRUE 假定表中的第一列按数字或字母排序,然后搜索最接近的值。这是未指定值时的默认方法。

FALSE 在第一列中搜索精确值。


在下图中,D2单元格中输入的函数为 =VLOOKUP(C2,[地区代码库.xlsx]归属地!$B:$C,2,FALSE),其中,要到地区代码库表中查找的字段是C2,被查找的区域是B:C,查到以后,返回的信息是这个区域的第2列,FALSE表示精确匹配查找。


通过LEFT和VLOOKUP,我们就将一个身份证号码的归属地显示了出来。

02 提取性别

第17位表示性别,我们先把这个位提取出来。函数为:

MID(text, start_num, num_chars)

text(必需):包含要提取的字符的文本字符串。

start_num(必需):文本中要提取的第一个字符的位置。 文本中第一个字符的 start_num 为 1,以此类推。

num_chars(必需):指定希望 MID 从文本中返回字符的个数。


在下图中,E2单元格的函数为 =MID(B2, 17, 1),表示从B2的第17位起,取1位:


取出这1位后,根据身份证的编码规则,我们要对它进行奇偶的判断。判断奇偶,从数学上可以用这个数字来除以2,余数为0即偶数,否则为奇数。对于如何求余数,函数为:

MOD(number, divisor)

Number(必需):要计算余数的被除数。

Divisor(必需):除数。


下图中,F2单元格中的函数为 =MOD(E2,2),表示求E2除以2之后的余数:


奇偶的结果有了,根据编码规则,奇数为男性,偶数为女性,那么接下来就要做这个判断,并显示为相应的性别。用到的函数:

IF(logical_test, value_if_true, value_if_false)

logical_test(必需):计算结果为 TRUE 或 FALSE 的任意值或表达式。

value_if_true(必需):ogical_test 为 TRUE 时返回的值。

value_if_false(必需):logical_test 为 FALSE 时返回的值。


在下图中,G2单元格中的公式为 =IF(F2=0, '女','男')

上述用辅助列的方式适用于初学者,或者公式较复杂的时候。熟练后,可以合并为一个公式:=IF(MOD(MID(B2, 17, 1),2)=0, '女','男')

03 提取生日

第7位起的连续8位表示出生年月日,我们先把这个段提取出来,函数仍为MID。


但是仅仅这样提取,得到的只是个8位的字符串,不是一个真正的日期格式,需要进一步加工,所用函数:

TEXT(value, format_text)

value(必需)要转换为文本的数值。

format_text(必需)一个文本字符串,定义要应用于所提供值的格式。


如下图,H2单元格中的公式为 =--TEXT(MID(B2,7,8),'0-00-00'),表示把MID(B2,7,8)的结果,以'0-00-00'格式来显示。两个减号是把文本格式转为数字(日期的本质也是数字):


这样得到的日期,就可以参与日期相关的运算了。比如我们想看看今年的生日那天是星期几。用到的函数有:

WEEKDAY(serial_number,[return_type])

Serial_number(必需): 一个序列号,代表尝试查找的那一天的日期。

return_type(可选):用于确定返回值类型的数字。1 或省略:数字 1(星期日)到 7(星期六)。2:数字 1(星期一)到 7(星期日)。


YEAR(serial_number) / MONTH(serial_number) / DAY(serial_number)

serial_number(必须):日期值。


DATE(year, month, day)

year(必须):可以包括一到四位数字。

month(必须):一个正整数或负整数,表示一年中从 1 月至 12 月(一月到十二月)的各个月。

day(必须):一个正整数或负整数,表示一月中从 1 日到 31 日的各天。


TODAY()

无参数。


下图中,J2单元格的公式为 =WEEKDAY(DATE(YEAR(TODAY()), MONTH(H2), DAY(H2)), 2)。公式有点长,不过很简单,我们从外往内一层层看。最外面是WEEKDAY,它有两个参数,第一个是今年的生日,第二个是2(从周一开始算一周的第一天)。那么接下来我们集中注意力在今年的生日上。今年的生日就是“今天TODAY()”的、“出生日期H2”的、“出生日期H2”的,三个值拼在一起的,拼的函数是DATE。而取用年、月、日的函数分别是YEAR、MONTH、DAY。这样一分解,就明白了吧。


给大家留了一个思考题:出生年是否闰年?想想怎么做。

04 提取校验码

倒数第1位是身份证的校验码,是前面各数位一起通过一个算法计算出来的,算法如下(留给有兴趣的同学),和本文关系不大,可直接跳过。

第一步:将身份证号码的第1位数字与7相乘;将身份证号码的第2位数字与9相乘;将身份证号码的第3位数字与10相乘;将身份证号码的第4位数字与5相乘;将身份证号码的第5位数字与8相乘;将身份证号码的第6位数字与4相乘;将身份证号码的第7位数字与2相乘;将身份证号码的第8位数字与1相乘;将身份证号码的第9位数字与6相乘;将身份证号码的第10位数字与3相乘;将身份证号码的第11位数字与7相乘;将身份证号码的第12位数字与9相乘;将身份证号码的第13位数字与10相乘;将身份证号码的第14位数字与5相乘;将身份证号码的第15位数字与8相乘;将身份证号码的第16位数字与4相乘;将身份证号码的第17位数字与2相乘。

第二步:将第一步身份证号码1~17位相乘的结果求和,全部加起来。

第三步:用第二步计算出来的结果除以11,这样就会出现余数为0,余数为1,余数为2,余数为3,余数为4,余数为5,余数为6,余数为7,余数为8,余数为9,余数为10共11种可能性。

第四步:如果余数为0,那对应的最后一位身份证的号码为1;如果余数为1,那对应的最后一位身份证的号码为0;如果余数为2,那对应的最后一位身份证的号码为X;如果余数为3,那对应的最后一位身份证的号码为9;如果余数为4,那对应的最后一位身份证的号码为8;如果余数为5,那对应的最后一位身份证的号码为7;如果余数为6,那对应的最后一位身份证的号码为6;如果余数为7,那对应的最后一位身份证的号码为5;如果余数为8,那对应的最后一位身份证的号码为4;如果余数为9,那对应的最后一位身份证的号码为3;如果余数为10,那对应的最后一位身份证的号码为2。


通过这1位,可以对身份证号码进行验伪。首先需要提取出这1位。用到的函数:

RIGHT(text, [num_chars])

text(必需):包含要提取的字符的文本字符串。

num_chars(可选):指定要由 RIGHT 提取的字符的数量。num_chars 必须大于或等于零。如果 num_chars 大于文本长度,则 RIGHT 返回全部文本。如果省略 num_chars,则假定其值为 1。


下图中,K2单元格的函数为: =RIGHT(B2,1),即从B2右取1位。


上述是从号码中提取的,那么号码的前17位按标准算法应该算出什么呢?这个公式比较复杂,就不展开讲了,我们拿来直接使用(有兴趣的同学可以研究,或单独找我沟通),填写在L2单元格中: =LOOKUP(MOD(SUM(MID(MID(B2,1,17),ROW(INDIRECT('1:17')),1)*MOD(2^(18-ROW(INDIRECT('1:17'))),11)),11),{0,1,2,3,4,5,6,7,8,9,10},{1,0,'X',9,8,7,6,5,4,3,2})

在M2中编写判断,比较K2和L2是否相同,=IF(K2=L2,'合法','非法'),如下图:


上面我们从4个方面,给大家介绍到了文本函数、数学函数、日期函数、逻辑判断函数、查找函数等多个门类的常用函数,希望能给大家今后自学函数抛个砖。


(全文完)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
EXCEL中如何从身份证号码提取出生年月日及性别
你知道用EXCEL可以从身份证中提取生日、性别、年龄、生肖吗?
身份证号码录入那些事
Excel中根据身份证号生成出生年月、年龄
【Excel技巧】在学籍管理中自动生成年龄
文本提取函数mid的用法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服