打开APP
userphoto
未登录

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

开通VIP
史上最全的身份证号码处理思路合集

Hello,各位小伙伴们大家好呀,上一期和大家分享了'Excel从入门到放弃'的一些阶段,有小伙伴@melo留言说能不能分享一期有关于身份证提取户籍和年龄的案例。

Yogurt花了大概一天的时间把国家统计局2009年、2013-2016年的三级行政区划给整理了一下。

PS:顺便吐槽一下国家统计局的网站。。。不知道是和Yogurt一样同时爬数据的人太多了呢还是来不及维护。。。

2017年天津市的二级页面乱码

2017年湖北省的二级界面乱码

这里截出来的图都是个例,其他的就没看了,像这种情况还不少。。。早在几个月之前,重庆市的二级界面也出现过乱码的情况,那次也没爬成功,也算了,所以,知道为嘛只爬了09年和13-16年的了吧。

当然了,即便是这样,还是要感谢那些在背后默默付出的国家统计员们,没有你们在一线一点一滴的记录,也不可能把全国3000多个区级单位统计上报,当然往下的街道和居委会更是数不胜数了,万分感谢你们的辛勤付出。

截止到发稿前,网站恢复了,之前发生乱码的情况应该是由于访问的人次过多导致的。

咱们会到正题。

关于身份证里的一些计算方式,Yogurt在去年写了一篇,

不过现在回头看的时候,不知道当时为嘛少写了一个身份证验证的步骤。而且在现在看来,当时涵盖的内容还有点不全面,本期Yogurt打算完善一下关于身份证的所有处理方式,将会和大家一起分享如何使用一个身份证号码来完成大部分个人信息的填写,减少录入的工作量。

1

基础数据准备

1.1 准备身份证代码数据库

在身份证号码中可以很直观的获取各种各样的信息,唯一一个没法直接获取的就是身份证号码前6位的行政区划代码所代表的籍贯信息。为了能够运用Excel来获取这一信息,首先我们需要先准备一份尽可能完善的身份证行政区划代码数据库。

这里Yogurt使用的Python 3.7.1 request库对国家统计局的数据进行多次爬取得到的数据。

python代码如下:

由于国家统计局的网站不需要其他的验证,又是静态网页,所以直接从网页原代码里爬取就可以了。具体的Python用法没法一句话两句话讲清楚,但可以和大家分享一下我的思路。

http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2009/index.html

以2009年的行政区划为例,打开国家统计局的网站,然后【右键】-【查看源代码】,然后就可以看到这一页的信息,我们需要的内容就是这里选中的部分。

北京市

天津市

河北省

山西省

内蒙古自治区

辽宁省

吉林省

黑龙江省

上海市

江苏省

浙江省

安徽省

福建省

江西省

山东省

河南省

湖北省

湖南省

广东省

广西壮族自治区

海南省

重庆市

四川省

贵州省

云南省

西藏自治区

陕西省

甘肃省

青海省

宁夏回族自治区

新疆维吾尔自治区

台湾省

香港特别行政区

澳门特别行政区

这里含的信息有网址和省份名称。我们可以用正则表达式把这里的信息提取出来。

.*?(.*?)

关于正则表达式的相关内容,后期如果有机会可以和大家多分享一些,但这一期里篇幅有限不能介绍太多,大家可以去百度了解一下。

代码中的网址是缩写,爬取信息需要完整的网址,所以再加上前面的网址内容凑成完整的网址就是最终的爬取网址。下一级的网址获取方法与这一阶段一致。

大致的流程图是上述这样,操作起来其实稍微比流程图画的更简单一点。

接着再把这些获取到的数据进行汇总、去重、整合,形成完整的身份证代码数据库。由于经过了多年,行政区域发生了许多变化,我们的身份证号是唯一的,从入户开始就没有发生过变化,因此身份证代码数据库不能以最新的行政区划为准,这也就是为什么要从2009年开始获取并整合。

Yogurt实际测试的时候发现还是有很多行政代码没有办法识别出来,接着就到人力资源与社会保障部的官网上再下载了一份截止到2018年2月5号全国行政区划代码表。

下载下来的表格长这样,要达到我们使用的标准还是差了一些,因此还需要对其进行稍微进行修饰、整合、去重,由于人力资源与社会保障部官网的数据相对全面一些,因此最终形成以人力资源与社会保障部官网数据为主,国家统计局数据为辅的共4773条身份证行政代码数据库。

即便这份数据是Yogurt想尽了一切办法整理出来的,但众所周知,我国幅员辽阔,地广人多,自改革开放以来社会发展迅速,很多地名都发生了变化,最终根据数据库匹配出来的地名可能会与身份证稍微会有点出入,这就需要在实际工作中对其进行核对了。

1.2 准备计算表

Yogurt把所有能想到从身份证号中获取或衍生的信息内容都列了出来,也许大家也没想到一个身份证号里能包含这么多信息可以获取和计算的吧,如果还有能想到的获取信息不妨给Yogurt留言,咱们相互交流。

我们接下来的分享将会围绕这份表格来进行。

温馨提示:该表格中的人名、身份证号全部都是为了此次推送随机生成的,存在雷同的概率应该是比较低的,如果真的雷同了,请私聊联系Yogurt。

2

实操处理

2.0 前期准备

一直以来我们都习惯于下拉填充公式,全部做完以后才对表格进行排版。这次Yogurt借此机会,和大家分享一种新的制表方式,相信对大家会有所帮助。

【套用表格样式】这个玩法在Yogurt接触到小伙伴中,很少会这么玩的,不过真的很能够提高写函数的效率,大家接着往下看就知道了。

快捷键是【Ctrl】 【L】,快捷键设置的是默认样式,如果想直接就选好样式的话,还是用鼠标选吧。

用好这个方法有个前提,需要表格是100%的数据库式制表法——即不能有任何一个合并单元格。

OK,前期准备完成,接下来就可以进入我们的实操环节了。

2.1 隐藏身份证号码

隐藏身份证号码有两种方法。一种是通用的函数法,另一种则是Excel 2013版及以上的【Ctrl】 【E】大法。

2.1.1 方法一:通用函数法

=REPLACE([@身份证号码],7,8,REPT('*',8))

=REPLACE(D3,7,8,REPT('*',8))

在【套用表格样式】的环境下写函数,最大的好处就是对于需要连续填充的表格来说,只需要写一次函数,打完回车,剩下的就自动填充完成了。

这里的函数写法也和传统的写法不太一样,大家参照下面的一个公式就知道了。这是因为设置了【套用表格样式】之后,表格中的计算就会基于其命名的特点来进行,与数据库中的计算方式大同小异。

官方说明:

REPLACE(old_text,start_num,num_chars,new_text)

中文翻译:

REPLACE(要提换的内容,从哪开始,要替换多少个,替换成什么)

REPLACE函数是通过截取数量进行替换的函数,对于编码格式、字符长度一致的字符串的替换优势相当强。很多小伙伴可能更加习惯于使用SUBSTITUTE()进行替换,但在这种情况下,SUBSTITUTE()就显得捉襟见肘了。

官方说明:

REPT(text,number_times)

中文翻译:

REPT(需要重复的字符/字符串,重复次数)

REPT函数是对指定字符或字符串进行重复输出的一种函数。用的人比较少,但必要时候效果还是不错的。

在没有使用REPT()的情况下,REPLACE()中的第四个参数就写成'*********'。少的时候没什么,多了就容易出错。比如Yogurt在这里打了9个'*',不仔细看真的容易看错。

2.1.2 方法二:【Ctrl】 【E】大法

Excel 2013版及以上中有一个非常实用的快捷键——【Ctrl】 【E】,它可以快速填充与第一个输入的单元格相同的操作。对于很多一次性的操作,可以提高不少的工作效率。

两种方法,各有各的好处,不过呢,既然是考虑到了要隐藏身份证信息的情况,因此如果是要发送出去的,记得要把发送的信息复制出去,然后粘贴为文本哦,直接使用保护工作表的安全系数是很低的。所有涉及与员工隐私信息、企业隐私信息相关的内容,一旦是需要发送给他人的,建议全部处理并隐藏,一律不能保留原始数据源。

2.2 验证身份证号码

公民身份证号码是经过了我国国家质量技术监督局的提出,多个相关单位共同起草的国家标准——《GB 11643-1999》

http://www.gb688.cn/bzgk/gb/newGbInfo?hcno=080D6FBF2BB468F9007657F26D60013E

在公开的国家标准中,对校验码的计算有着详细的说明。

而我们要做的就是将国家标准中提到的计算方法转换为Excel的计算方法即可。

2.2.1 原理解释

身份证从二代开始,身份证号码总共有18位,由6位行政代码 8位出生日期 3位顺序码 1位校验码构成。至于网上提到的顺序码为当地派出所代码的说法,Yogurt暂时还没有找到比较官方的解释,我想《GB 11643-1999》里已经说得很详细了。

上图中,将身份证号码前17位分别单独取出来,一一与对应的加权系数相乘,然后将17个结果相加,最终之和与11相除所得的余数对应的校验码就是身份证最后一位的校验码。

上图是原理,而我们应用到实际运算中可不能做得这么麻烦,需要将公式简化。

2.2.2 公式含义

2.2.2.1 拆分身份证号码

将身份证号码拆成17个单独的数字,这里需要用到MID函数。

官方说明:

MID(text,start_num,num_chars)

中文翻译:

MID(待截取字符串,从哪开始,截取多长)

MID函数与LEFT()、RIGHT()一起并称'截取三剑客',其中MID函数的灵活性相对较高,结合数组使用,能够收获意想不到的效果。

=--MID([@身份证号码],COLUMN($A:$Q),1)

一般情况下使用ROW()会比较多,突然使用COLUMN函数也许大家会有点意外。和ROW函数一样,都是获取连续数字的好方法,而不同的是ROW()得到的结果是横向数组,而COLUMN()是纵向。因此在MID中得到的结果也是不一样的。而我们这里由于为了规避'三键结束',而涉及到了SUMPRODUCT函数,因此选择使用了COLUMN(),具体会在下面提到。

COLUMN(A:Q),其实就是1到17。结果为,再经过MID()截取了相关的数值之后,以上述身份证号码为例,结果为。大家这里会发现中间的分隔符号有变化。如果使用ROW()的话,这里的分隔符号会恰恰相反。这里就好比横向输出与纵向输出的不同。

黄色区域写成数组为,绿色区域写数组为。这里MID输出结果同理。

截取的结果为文本型数字,因此需要加上--来转换为数值,或者*1,又或者使用VALUE函数。Yogurt个人比较习惯用--,看个人喜好。

2.2.2.2 身份证号码加权计算

每一个数字与其对应的加权因子相乘,然后相加起来。有些小伙伴在这里可能会有点犯难,毕竟数组计算和单元格计算不一样,单元格里可以逐一进行选择,然后每一个乘以一个对应加权因子,最后将其加起来即可。也有些小伙伴可能会用SUM(拆分结果数组*加权因子),然后'三键结束',但这个方法有点麻烦,Yogurt的方法可以避免使用'三键',就是SUMPRODUCT函数。

官方说明:

SUMPRODUCT(array1,[array2],......)

中文翻译:

SUMPRODUCT(数组1,[数组2],......)

SUMPRODUCT函数简单理解的话可以认为是A*B C*D,也就是把所有参数里的数组对应相乘,然后将所有乘积相加的这么一个函数。

计算前提1:数组的大小要一致。不能说比如一个数组有15个数字,另一个是16位数字。

计算前提2:数组方向要一致,横向数组和纵向数组之间不能进行计算。

=SUMPRODUCT(--MID(),)

这里根据计算前提2中的限制,也就是为什么MID函数里要使用COLUMN()而不使用ROW()了。当然,如果觉得使用ROW()比较方便的话,那就把加权因子中的逗号改为分号,将其变为纵向数组进行计算就可以了。

2.2.2.3 求余数

余数函数我想大家应该都还记得——MOD()

官方说明:

MOD(number,divisor)

中文翻译:

MOD(被除数,除数)

MOD函数的原理很简单,就是小学时候学的求余数的方法。

=MOD(SUMPRODUCT(--MID()),11)

至于为啥除以11,应该是由于这套标准所采用的ISO 7064:1983(现标准号为ISO 7064:2003)。这份标准在道客巴巴上可以查看,下载需要2000积分,而且以Yogurt这蹩脚的英文水平,看得有点吃力,所以就不详细解释了,如果有需要的小伙伴可以自行搜索下载。

2.2.2.4 求校验码

根据上述算出来余数,输出指定位置的校验码,这计算身份证校验码的工作就算是完成了。

官方说明:

CHOOSE(index_num,value1,[value2],......)

中文翻译:

CHOOSE(索引值,数值1,[数值2],......)

CHOOSE函数是一个比较尴尬的函数,从下面的另一种方法就可以看出,MID函数分分钟就可以代替它,不过呢,对于不是那么规律的输出结果来说,CHOOSE函数的特长就发挥出来了。有时候我们可能会对满足某个条件的值进行指定结果的输出,一般很多小伙伴可能都会选择使用IF()进行嵌套,对于嵌套过多的情况,写起来不方便,后期维护的时候也不方便,这时可以把满足的条件转换为索引值,然后用CHOOSE()来输出,可以简化不少的工作量,也使函数的可维护性更高。

=CHOOSE(MOD() 1,'1','0','X','9','8','7','6','5','4','3','2')

这里的计算方法不止一种,Yogurt用的是CHOOSE函数,也可以使用MID函数,这样看上去更短一点。这里使用CHOOSE()是借此机会给大家介绍一个新的函数。不过不管用的是哪种方法,MOD()的结果都是需要 1的。原因很简单,函数中的几乎所有的索引值都是从1开始的,而余数中有0,无法识别,所以需要 1。

2.2.2.5 加入判断,完善函数

IF函数就不用多说了,但凡是涉及到'如果'、'判断'这种字眼的时候,第一反应就是IF()。这里既然是要做身份证号码校验,那么就需要从以下几个方面进行验证:

身份证号码长度

身份证校验码不正确

可能有小伙伴会说为什么不检查行政代码和出生日期是否正确?

这就是为啥身份证会有校验码的原因了。校验码是需要通过相对复杂的计算才能得出来的结果,除非是某些心算大神故意为难,否则只要前17位数字有一个不一样都会影响校验码的结果,因此无需再多余对行政代码和出生日期进行校验。

《GB 11643-1999》是在1999年1月19日批准,同年7月1日起实施,现在的身份证号码早就已经从15位升为了18位,因此不需要再考虑15位身份证号码的情况了。

这里的C×代表的是Code Error(校验码错误),L×代表的是Length Error(长度错误)。

2.3 获取性别

=TEXT(-1^MID([@身份证号码],17,1),'女;男')

=IF(MOD(--MID([@身份证号码],17,1),2)=0,'女','男')

=TEXT(MOD(--MID([@身份证号码],17,1),2),'[=0]女;男')

官方说明:

TEXT(value,format_text)

中文翻译:

TEXT(数值,输出格式)

在Excel中有一种操作叫做'自定义格式',由于这个功能的存在,TEXT函数很少会被人想起。用过'自定义格式'的小伙伴们会知道其神奇之处,而TEXT函数的作用与该功能一致,但凡是可以用在'自定义格式'中的代码,都可以在TEXT函数中使用。

TEXT函数除了可以改变数值的输出格式以外,还有一个就是针对不同的数字输出不同的结果,从某种程度上可以与IF()媲美。

TEXT多条件输出格式默认排列顺序为:正数;负数;0;文本。

在前面咱们提到了《GB 11643-1999》标准,身份证中的15-17位顺序码,其中奇数为男性,偶数为女性,而奇偶的划分就是能否被2整除,三位数的奇偶判断的关键在于最后一位是否能为2整除,因此,只要确定第17位数字的奇偶情况即可判断性别。

上面提到了三种函数的写法,都可以。下面两种是比较常见的写法,也方便理解。Yogurt个人比较倾向于第一种,一来是比较短,二来用的函数也是最少的。其原理很简单,往下看会有恍然大'哦~~'的感觉。

在数学中,负数的奇数幂还是负数,偶数幂为正数。因此通过对-1进行幂计算的出来的结果就只有正数和负数的区别了,正数为女(偶),负数为男(奇),再根据TEXT()多条件输出的特点,输出性别就不在话下了。

2.4 获取出生年月

=TEXT(MID([@身份证号码],7,8),'0-00-00')

依然是经典的TEXT函数。

生日在身份证号码中的位置处于7-14位,因此,用MID()截取的时候,从第7位开始,截取8位即可。截取出来的结果用TEXT()转换为日期格式输出即可。非常经典的操作。

2.5 计算年龄

=DATEDIF([@出生日期],TODAY(),'Y')

官方说明:

DATEDIF(start_date,end_date,unit)

中文翻译:

DATEDIF(起始日期,结束日期,返回类型)

DATEDIF()是Excel中为数不多的几个隐藏函数之一。WPS上是可以直接输入的。这是用于计算两个日期之间相隔时间的函数,通过对返回类型的设置,从而返回不同的计算结果。

代码方面的官方说明如下

'Y':一段时期内的整年数。

'M':一段时期内的整月数。

'D':一段时期内的天数。

'MD':start_date 与 end_date 之间天数之差。 忽略日期中的月份和年份。重要: 不推荐使用“MD”参数,因为存在相关已知限制。

'YM':start_date 与 end_date 之间月份之差。 忽略日期中的天和年份

'YD':start_date 与 end_date 的日期部分之差。 忽略日期中的年份。

这个函数的输入特点是:起始日期一定要比结束日期小,也就是起始日期一定要在结束日期之前。挺废话的一句,但有时出错的往往都在这。

这里计算年龄是以年为单位进行计算的,所以选用'Y'。当然,这里其实也可以用

=YEAR(TODAY())-YEAR([@出生日期])

但输出的结果严格意义上来讲没有DATEDIF()的计算结果精确。

2.6 计算生肖

十二生肖是十二地支的形象化代表,即子(鼠)、丑(牛)、寅(虎)、卯(兔)、辰(龙)、巳(蛇)、午(马)、未(羊)、申(猴)、酉(鸡)、戌(狗)、亥(猪),随着历史的发展逐渐融合到相生相克的民间信仰观念,表现在婚姻、人生、年运等,每一种生肖都有丰富的传说,并以此形成一种观念阐释系统,成为民间文化中的形象哲学,如婚配上的属相、庙会祈祷、本命年等。现代,更多人把生肖作为春节的吉祥物,成为娱乐文化活动的象征。

——百度百科《十二生肖》

=MID('猴鸡狗猪鼠牛虎兔龙蛇马羊',MOD(YEAR([@出生日期]),12) 1,1)

在十二生肖是每12年一轮回,因此通过将日期除以12所得到的余数一一对应相应的属相即可。不过,咱们中国人习惯于用农历来区别属相,而有些小伙伴的身份证号是用的阳历登记,因此出来的结果存在出入也是在所难免。

2.7 计算星座

=VLOOKUP(--TEXT([@出生日期],'mdd'),,2,1)

VLOOKUP()也是大家比较常用的函数了,关于精确匹配的部分Yogurt就不细说了,这里来聊一聊关于模糊匹配方面的部分。

模糊匹配在整个Excel查询函数中几乎是所有入门Excel的小伙伴相对较晚才开始接触的部分,一般来说都是使用精确匹配。

模糊匹配分为升序和降序两种。除了MATCH()支持升降两种外,其他的例如VLOOKUP()、LOOKUP()、HLOOKUP()都仅支持升序,也就是0-9,a-z等等。

比较常用的地方就是区间匹配。例如达到某个金额区间的星级评定;达到某个分数段为优良中差;重量达到某个范围的计算等等。

在这里也是一样的,在一年里,最小的日子是1月1日,最大的日子是12月31日。可能很多小伙伴会想着怎么去通过计算日期来匹配结果,其实我们可以换个思路来考虑这个问题,马上就能迎刃而解。

1-12个月,1-31天,实际上两者结合转换为数学的表达其实也不会出现重复的情况。例如1月1日可以写成101;5月18日可以写成518,12月20日,可以写成1220等等,这样既可以表示时间,同时又能够满足构成区间的条件。

对于摩羯座的时间范围跨越了12月和来年1月,因此,我们将摩羯座的日期区间拆成两个部分即可。

同理生肖属相,由于身份证号码存在阳历和农历的不同,而星座一般来讲是以阳历为准,因此输出的结果也会存在一定的出入。

2.8 设置生日提醒

=TEXT(TEXT([@出生日期],'mm-dd')-TODAY(),'还有0天;;今天')

生日提醒在企业对员工的关怀中显得十分的重要,当然,如果是农历生日的话可能要多花点心思,毕竟阳历与农历的转换并不是那么的有规律。但不影响我们的操作。

生日提醒从计算的角度出发,本质上就是计算出生的日期在当前年中与当前日期的相隔时间。在Excel中,如果输入的只是月和日,也就是例如:12-30;1-1等这样的格式,都会默认转换为当前系统年的日期,例如:2018-12-30;2018-1-1等。因此我们在提取日期的时候,直接用'mm-dd'的格式提取月和日后,减去当天的时间,就是两个时间相隔的天数。此时会出现正数、负数和0三种情况。

还记得前面介绍TEXT函数多条件输出是的格式排列吗?

正数代表还没有到生日,负数代表生日已经过去,0代表当天为生日。既然是提醒,因此已经过完的生日就不需要再进行提醒了,那么,当相隔结果为负数的时候就不显示了。

2.9 计算退休年龄

法定退休年龄是指1978年5月24日第五届全国人民代表大会常务委员会第二次会议原则批准,现在仍然有效的《国务院关于安置老弱病残干部的暂行办法》和《国务院关于工人退休、退职的暂行办法》(国发【1978】104号)文件所规定的退休年龄,现行退休年龄是为,男性60周岁,女性55周岁。

——百度百科《法定退休年龄》

=TEXT(EDATE([@出生日期],IF([@性别]='男',60,55)*12),'yyyy-mm-dd')

官方说明:

EDATE(start_date,months)

中文翻译:

EDATE(开始日期,相隔月份)

EDATE函数是通过对增加开始时间的月份来返回日期的函数。用法就好比我们常说的:下个月、下下个月、3个月之后等等这样的说法。一年有12个月,因此在对增加年进行计算的时候,一定要记得转换时间。

这里分享的公式是基于男60,女55的法定退休年龄进行的计算,而实际的企业环境下的要求可能会更加具体和细化,这里没法兼顾,只能具体问题具体分析。但总的操作原理是一致的——在出生日期的基础上增加指定的年数×12,得到的日期就是退休日期,这个日期是以身份证号上的登记日期为准的,不存在阳历和阴历这一说。

2.10 获取籍贯

=PHONETIC(OFFSET(表1[[#标题],[代码]],MATCH(LEFT([@身份证号码],6),表1[代码],0),1,1,3))

官方说明:

PHONETIC(reference)

中文翻译:

PHONETIC(引用区域)

PHONETIC()是一个比较特别的函数,像是为汉语定做的一样。这个函数只能获取含有拼音信息的字符串,对于一个引用区域来说,只要是包含了拼音信息的单元格,就会将其全部合并到一个区域。一般情况下我们在合并单元格字符串的时候往往都是使用&作为连接符,一个个单元格的点击实现连接。而在Office 365中有TEXTJOIN,可以很方便的批量连接各种字符串,而在其他版本的Office里无法实现。PHONETIC()是唯一一个可以有限度的实现批量连接字符串的函数。

官方说明:

OFFSET(reference,rows,cols,[height],[width])

中文翻译:

OFFSET(引用区域或单元格,偏移行数,偏移列数,[返回结果行范围],[返回结果列范围])

OFFSET()是所有查询函数里需要一定想象力来运用的函数,它返回的结果是一个引用,这是其他查询函数所做不到的。

OFFSET()是通过一个引用位置或者引用区域的左上角的位置,根据指定的偏移行数和偏移列数来返回指定行范围和列范围的引用单元格或引用区域。

在实际运用过程中常与MATCH()一起搭配使用。

官方说明:

MATCH(lookup_value,lookup_array,[match_type])

中文翻译:

MATCH(查询值,在哪一列或在哪一行找,[精确匹配还是模糊匹配])

MATCH()是一个很百搭的函数,几乎可以与任何一个查询函数搭配在一起,经典的搭配是INDEX() MATCH()。该函数是输出查询值在某一行或者某一列中相对位置。通过这个位置信息来与其他查询函数搭配使用,进而返回最终的匹配结果。

这里为了返回的结果能够有间隔,Yogurt给数据源的每一个单元格都加了一个空格,这样可以使得PHONETIC()输出的结果之间能够间隔,看着更舒服。

这里的原理很简单,通过MATCH()来定位行政区划代码在数据库中的位置,然后以数据库中A1的位置,也就是【表1[[#标题],[代码]]】为参照系,向下偏移MATCH()所定位到的位置;然后向右偏移1列,也就是【】列,行范围为1,列范围为3,即【】列到【】列;最终输出的结果为一个含有三个文本的数组。

最终用PHONETIC()将这个数组连接起来,输出即可。

3

后记

以上就是所有关于身份证号码的处理思路,其他的处理方式大同小异,可以尽情发挥。

下面把成品的全图展示给大家。

如果这是一个要我们自己来填写的表的话,一个个打上去未免也太花时间了,还不能保证一定是正确的。而在填充好函数和公式以后,在填写信息的时候就只要把姓名和身份证号码填上,剩下的部分就只需要稍微的核对即可。

在制表的时候,最花时间且最容易出错的部分就是录入基础信息的时候,有些基础信息是可以受一些规则约束而获取或者计算出来的。就比如这里的行政区划代码,Yogurt并没有一个个打上去,而是选择去找权威部门提供的公开信息,对其信息进行获取和整合得到的。录入的身份证号码也可以是根据各种要求而输出各种所需的信息。

当然,这种方法并不是说临时要就能直接给做出来的,Yogurt光是花在搜集行政区划代码上的时间就用了5、6个小时,对于一些比较着急的工作,可以根据实际情况来选择不同的处理方式。当然,如果这个数据库早就已经建立好了,那就更加不错了,哈哈哈哈。

好啦,本期内容就到这里啦,如果还有什么好的想法和建议,不妨在本文下方留言,咱们一起交流一下。觉得好的话,别忘了在右下角给Yogurt点个赞或者赞赏支持一下,实在不行,转发一下也是可以的,哈哈哈,要的有点多,就先这样吧。

临近年关,Yogurt的工作会比较忙,更新速度也许会受到影响,不管怎么样还是会尽可能抓紧时间更新,感谢大家的支持哈。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
你会从身份证号码算生日吗?
15个Excel函数公式的套路,可直接套用,收藏备用吧
如何根据身份证号码取得个人生日信息
怎么在excel中输入身份证号码,如何利用函数提取出生年月?
1个公式搞定根据身份证号码计算年龄
学会这8个Excel函数公式 告别加班
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服