如何利用身份证号码提取相关信息

发布时间:2011-02-28   来源:文档文库   
字号:
如何利用身份证号码提取相关信息?
一、分析身份证号码

其实,身份证号码与一个人的性别、出生年月、籍贯等信息是紧密相连的,无论是15位还是18位的身份证号码,其中都保存了相关的个人信息。

15位身份证号码:第78位为出生年份(两位数,第910位为出生月份,1112位代表出生日期,第15位代表性别,奇数为男,偶数为女。

18位身份证号码:第78910位为出生年份(四位数,第11、第12为出生月份,第1314位代表出生日期,第17位代表性别,奇数为男,偶数为女。

例如,某员工的身份证号码(15320521720807024,那么表示197287日出生,性别为女。如果能想办法从这些身份证号码中将上述个人信息提取出来,不仅快速简便,而且不容易出错,核对时也只需要对身份证号码进行检查,肯定可以大大提高工作效率。

二、提取个人信息

这里,我们需要使用IFLENMODMIDDATE等函数从身份证号码中提取个人信息。如图1所示,其中员工的身份证号码信息已输入完毕(C,出生年月信息填写在D列,性别信息填写在B列。

1 输入身份证号码


1.提取出生年月信息

由于上交报表时只需要填写出生年月,不需要填写出生日期,因此这里我们只需要关心身份证号码的相应部位即可,即显示为“7208”这样的信息。在D2元格中输入公式=IF(LEN(C2=15,MID(C2,7,4,MID(C2,9,4,其中:

LEN(C2=15:检查C2单元格中字符串的字符数目,本例的含义是检查身份证号码的长度是否是15位。

MID(C2,7,4:从C2单元格中字符串的第7位开始提取四位数字,本例中表示提取15位身份证号码的第78910位数字。

MID(C2,9,4:从C2单元格中字符串的第9位开始提取四位数字,本例中表示提取18位身份证号码的第9101112位数字。


IF(LEN(C2=15,MID(C2,7,4,MID(C2,9,4IF是一个逻辑判断函数,表示如果C2单元格是15位,则提取第7位开始的四位数字,如果不是15位则提取自第9位开始的四位数字。

如果需要显示为“7012这样的格式,请使用DATE格式,并在单元格格式日期中进行设置。

2.提取性别信息

由于报表中各位员工的序号编排是按照上级核定的编制进行的,因此不可能按照男、女固定的顺序进行编排,如果一个一个手工输入的话,既麻烦又容易出错。

例如性别信息统一在B列填写,可以在B2单元格中输入公式=IF(MOD(IF(LEN(C2=15,MID(C2,15,1,MID(C2,17,1,2=1,"",""其中

LEN(C2=15:检查身份证号码的长度是否是15位。

MID(C2,15,1:如果身份证号码的长度是15位,那么提取第15位的数字。

MID(C2,17,1:如果身份证号码的长度不是15位,即18位身份证号码,那么应该提取第17位的数字。

MOD(IF(LEN(C2=15,MID(C2,15,1,MID(C2,17,1,2:用于得到给出数字除以指定数字后的余数,本例表示对提出来的数值除以2以后所得到的余数。

IF(MOD(IF(LEN(C2=15,MID(C2,15,1,MID(C2,17,1,2=1,"","":如果除以2以后的余数是1,那么B2单元格显示为,否则显示为

回车确认后,即可在B2单元格显示正确的性别信息,接下来就是选中填充柄直接拖曳如图2所示现在这份报表无论是提取信息或是核对都方便多了!
+++++++====
自动录入出生日期
(1函数分解
CONCATENATE函数将几个文本字符串合并为一个文本字符串。
语法:CONCATENATE(text1,text2,... Text1,text2,...130个要合并成单个文本项的文本项。文本项可以为文本字符串、数字或对单个单元格的引用。 (2实例分析

与上面的思路相同,我们可以在E2单元格中输入公式“=IF(LEN(C2=15,CONCATENATE("19",MID(C2,7,2,"",MID(C2,9,2,"",MID(C2,11,2,"",CONCCTENCTE(MID(C2,7,4,"",MID(C2,11,2,"",MID(C2,13,2,""”。其中“LEN(C2=15”仍然作为逻辑判断语句使用,它可以判断身份证号码15位的还是18位的,从而调用相应的计算语句。 15位的身份证号码来说,左起第712个字符表示出生年、月、日,此时可以使用MID函数从身份证号码的特定位置,分别提取出生年、月、日。然后用CONCATENATE函数将提取出来的文字合并起来,就能得到对应的出生年月日。公式中“19”是针对早期身份证号码中存在2000年问题设计的,它可以在计算出来的出生年份前加上“19”。对“18”位的身份证号码的计算思路相同,只是它不存在2000年问题,公式中不用给计算出来的出生年份前加上“19”
注意:CONCATENATE函数和MID函数的操作对象均为文本,所以存放身份证号码的单元格必须事先设为文本格式,然后再输入身份证号。
自动计算工龄
1.首先把Word中的客户档案全部复制到Excel中生成一个数据库文件。然后在数据库文件中新建一列,并命名为出生年月。因为身份证号有15位和18位,为了计算方便,先对身份证号进行排序。

2.MID函数计算出第一个客户的出生年月。函数表达方式如下:MIDE272),表示第一个客户的身份证号在E列第二行中,要从这个位置中的第7个文本始返回2个长度的字符。

回车确认后,“J2”中的值变为“62”,表示该职工62年出生。接着下拉J2公式复制单元格,快速求出每个职工的出生年月(若身份证为18位,则公式变为MIDE292))再把J列的格式改为数值型。

3.D2中输入计算机公式“=103-J2”就可求出该职工的实际年龄。下拉D2中的公式再次复制,近千个职工的年龄就一键敲定。
注:以上的方法中的出生年月只有在2000年以前才有效,如果客户中有2000年以后出生的人,则计算时还要做些变通。
补充
所谓文本函数,就是可以在公式中处理文字串的函数。例如,可以改变大小写或确定文字串的长度;可以替换某些字符或者去除某些字符等。而日期和时间函数则可以在公式中分析和处理日期值和时间值。关于这两类函数的列表参看附表,这里仅对一些常用的函数做简要介绍。

一、文本函数

(一)大小写转换

LOWER--将一个文字串中的所有大写字母转换为小写字母。

UPPER--将文本转换成大写形式。


PROPER--将文字串的首字母及任何非字母字符之后的首字母转换成大写。将其余的字母转换成小写。

这三种函数的基本语法形式均为 函数名(text)。示例说明:

已有字符串为:pLease ComE Here! 可以看到由于输入的不规范,这句话大小写乱用了。

通过以上三个函数可以将文本转换显示样式,使得文本变得规范。参见图1

LowerpLease ComE Here!= please come here!
upperpLease ComE Here!= PLEASE COME HERE!
properpLease ComE Here!= Please Come Here!
1 (二)取出字符串中的部分字符
您可以使用MidLeftRight等函数从长字符串内获取一部分字符。具体语法格式为

LEFT函数:LEFT(text,num_chars其中Text是包含要提取字符的文本串。Num_chars指定要由 LEFT 所提取的字符数。

串。Start_num是文本中要提取的第一个字符的位置。


Excel函数应用回顾
Excel函数应用之逻辑函数
Excel函数应用之数学和三角函数
Excel函数应用之函数MID函数:MID(text,start_num,num_chars其中Text是包含要提取字符的文本简介
RIGHT函数RIGHT(text,num_chars其中Text是包含要提取字符的文本串Num_chars指定希望
RIGHT 提取的字符数。

比如,从字符串"This is an apple."分别取出字符"This""apple""is"的具体函数写法为。

LEFT("This is an apple",4=This

RIGHT("This is an apple",5=apple

MID("This is an apple",6,2=is 2
(三)去除字符串的空白

在字符串形态中,空白也是一个有效的字符,但是如果字符串中出现空白字符时,容易在判断或对比数据是发生错误,在Excel中您可以使用Trim函数清除字符串中的空白。

语法形式为:TRIM(text其中Text为需要清除其中空格的文本。

需要注意的是,Trim函数不会清除单词之间的单个空格,如果连这部分空格都需清除的话,建议使用替换功能。比如,从字符串"My name is Mary"中清除空格的函数写法为:TRIM("My name is Mary"=My name is Mary 参见图3
3 (四)字符串的比较


在数据表中经常会比对不同的字符串,此时您可以使用EXACT函数来比较两个字符串是否相同。该函数测试两个字符串是否完全相同。如果它们完全相同,则返回 TRUE;否则,返回 FALSE。函数 EXACT 区分大小写,但忽略格式上的差异。利用函数 EXACT 可以测试输入文档内的文字。语法形式为:EXACT(text1,text2Text1为待比较的第一个字符串。Text2为待比较的第二个字符串。举例说明:参见图4
EXACT("China","china"=False 4
二、日期与时间函数

在数据表的处理过程中,日期与时间的函数是相当重要的处理依据。而Excel在这方面也提供了相当丰富的函数供大家使用。


(一)取出当前系统时间/日期信息

用于取出当前系统时间/日期信息的函数主要有NOWTODAY

语法形式均为 函数名()。

(二)取得日期/时间的部分字段值

如果需要单独的年份、月份、日数或小时的数据时,可以使用HOURDAYMONTHYEAR函数直接从日期/时间中取出需要的数据。具体示例参看图5

比如,需要返回2001-5-30 12:30 PM的年份、月份、日数及小时数,可以分别采用相应函数实现。

YEAR(E5=2001

MONTH(E5=5
DAY(E5=30

HOUR(E5=12 5
此外还有更多有用的日期/时间函数,可以查阅附表。下面我们将以一个具体的示例来说明Excel的文本函数与日期函数的用途。

三、示例:做一个美观简洁的人事资料分析表

1 示例说明

在如图6所示的某公司人事资料表中除了编号、员工姓名、身份证号码以及参加工作时间为手工添入外,其余各项均为用函数计算所得。


6 在此例中我们将详细说明如何通过函数求出:

1)自动从身份证号码中提取出生年月、性别信息。

2)自动从参加工作时间中提取工龄信息。

2、身份证号码相关知识


在了解如何实现自动从身份证号码中提取出生年月、性别信息之前,首先需要了解身份证号码所代表的含义。我们知道,当今的身份证号码有15/18位之分。早期签发的身份证号码是15位的,现在签发的身份证由于年份的扩展(由两位变为四位)和末尾加了效验码,就成了18位。这两种身份证号码将在相当长的一段时期内共存。两种身份证号码的含义如下:

115位的身份证号码:1~6位为地区代码,7~8位为出生年份(29~10位为出生月份,11~12为出生日期,第13~15位为顺序号,并能够判断性别,奇数为男,偶数为女。

218位的身份证号码:1~6位为地区代码,7~10位为出生年份(411~12位为出生月份,13~14位为出生日期,第15~17位为顺序号,并能够判断性别,奇数为男,偶数为女。18位为效验位。

3 应用函数

在此例中为了实现数据的自动提取,应用了如下几个Excel函数。

1IF函数:根据逻辑表达式测试的结果,返回相应的值。IF函数允许嵌套。

语法形式为:IFlogical_test, value_if_true,value_if_false

2CONCATENATE:将若干个文字项合并至一个文字项中。

语法形式为:CONCATENATE(text1,text2……


3MID:从文本字符串中指定的起始位置起,返回指定长度的字符。

语法形式为:MID(text,start_num,num_chars

4TODAY:返回计算机系统内部的当前日期。

语法形式为:TODAY()

5DATEDIF:计算两个日期之间的天数、月数或年数。

语法形式为:DATEDIF(start_date,end_date,unit

6VALUE:将代表数字的文字串转换成数字。

语法形式为:VALUE(text

7RIGHT:根据所指定的字符数返回文本串中最后一个或多个字符。

语法形式为:RIGHT(text,num_chars

8INT:返回实数舍入后的整数值。语法形式为:INT(number
4 公式写法及解释(以员工Andy为例说明)

说明:为避免公式中过多的嵌套,这里的身份证号码限定为15位的。如果您看懂了公式的话,可以进行简单的修改即可适用于18位的身份证号码,甚至可适用于1518两者并存的情况。

1)根据身份证号码求性别

=IF(VALUE(RIGHT(E4,3/2=INT(VALUE(RIGHT(E4,3/2,"",""
公式解释:a. RIGHT(E4,3用于求出身份证号码中代表性别的数字,实际求得的为代表数字的字符串

b. VALUE(RIGHT(E4,3用于将上一步所得的代表数字的字符串转换为数字

c. VALUE(RIGHT(E4,3/2=INT(VALUE(RIGHT(E4,3/2用于判断这个身份证号码是奇数还是偶数,当然你也可以用Mod函数来做出判断。

d. =IF(VALUE(RIGHT(E4,3/2=INT(VALUE(RIGHT(E4,3/2,"",""及如果上述公式判断出这个号码是偶数时,显示"",否则,这个号码是奇数的话,则返回""


2)根据身份证号码求出生日期


=CONCATENATE("19",MID(E4,7,2,"/",MID(E4,9,2,"/",MID(E4,11,2

公式解释:a. MID(E4,7,2为在身份证号码中获取表示年份的数字的字符串

b. MID(E4,9,2 为在身份证号码中获取表示月份的数字的字符串

c. MID(E4,11,2 为在身份证号码中获取表示日期的数字的字符串

d. CONCATENATE("19",MID(E4,7,2,"/",MID(E4,9,2,"/",MID(E4,11,2目的就是将多个字符串合并在一起显示。

3)根据参加工作时间求年资(即工龄)

=CONCATENATE(DATEDIF(F4,TODAY(,"y","",DATEDIF(F4,TODAY(,"ym","个月" 公式解释:

a. TODAY(用于求出系统当前的时间

b. DATEDIF(F4,TODAY(,"y"用于计算当前系统时间与参加工作时间相差的年份

c. DATEDIF(F4,TODAY(,"ym"用于计算当前系统时间与参加工作时间相差的月份忽略日期中的日和年。

d. =CONCATENATE(DATEDIF(F4,TODAY(,"y","",DATEDIF(F4,TODAY(,"ym","个月"目的就是将多个字符串合并在一起显示。
5. 其他说明

在这张人事资料表中我们还发现创建日期31-05-2001时显示在同一个单元格中的这是如何实现的呢?难道是手工添加的吗?不是,实际上这个日期还是变化的,它显示的是系统当前时间。这里是利用函数 TODAY 和函数 TEXT 一起来创建一条信息,该信息包含着当前日期并将日期以"dd-mm-yyyy"的格式表示。

具体公式写法为:="创建日期:"&TEXT(TODAY(,"dd-mm-yyyy"
至此,我们对于文本函数、日期与时间函数已经有了大致的了解,同时也设想了一些应用领域。相信随着大家在这方面的不断研究,会有更广泛的应用。

附一:文本函数
函数名
ASC 函数说明
将字符串中的全角(双字节)英文字母更改为半角(单字节)字符。
ASC(text 语法

CHAR 返回对应于数字代码的字符,函数 CHAR 可将其他类型计算机文件中的代码转换为字符。 删除文本中不能打印的字符。对从其他应用程序中输入的字符串使用 CLEAN 函数,将删除其CHAR(number CLEAN 中含有的当前操作系统无法打印的字符。例如,CLEAN(text 可以删除通常出现在数据文件头部或尾部、无法打印的低级计算机代码。
CODE 返回文字串中第一个字符的数字代码。返回的代码对应于计算机当前使用的字符集。
CODE(text CONCATENATE (text1,text2,... DOLLAR
RMB(number,decimals CONCATENATE 将若干文字串合并到一个文字串中。
DOLLAR 依照货币格式将小数四舍五入到指定的位数并转换成文字。
该函数测试两个字符串是否完全相同。如果它们完全相同,则返回 TRUE否则,返回 FALSEEXACT 函数 EXACT 能区分大小写,但忽略格式上的EXACT(text1,text2 差异。利用函数 EXACT 可以测试输入文档内的文字。
FIND 用于查找其他文本串 (within_text 内的FIND 文本串 (find_text并从 within_text 的首字符FIND(find_text,within_text,start_num 开始返回 find_text 的起始位置编号。 按指定的小数位数进行四舍五入,利用句点和逗FIXED 号,以小数格式对该数设置格式,并以文字串形FIXED(number,decimals,no_commas 式返回结果。
JIS 将字符串中的半角(单字节)英文字母或片假名更改为全角(双字节)字符。
LEFT 基于所指定的字符数返回文本串中的第
LEFT 一个或前几个字符。
LEFTB 基于所指定的字节数返回文本串中的LEFT(text,num_chars LEFTB(text,num_bytes JIS(text 第一个或前几个字符。此函数用于双字节字符。 LEN 返回文本串中的字符数。
LEN LENB 返回文本串中用于代表字符的字节数。此函数用于双字节字符。
LOWER 将一个文字串中的所有大写字母转换为小写字母。
MID 返回文本串中从指定位置开始的特定数目的字符,该数目由用户指定。
MID MIDB 返回文本串中从指定位置开始的特定数目的字符,该数目由用户指定。此函数用于双字节字符。
PHONETIC PROPER 提取文本串中的拼音 (furigana 字符。 将文字串的首字母及任何非字母字符之后的首字母转换成大写。将其余的字母转换成小写。
PHONETIC(reference PROPER(text MID(text,start_num,num_chars MIDB(text,start_num,num_bytes LEN(text LENB(text LOWER(text
REPLACE 使用其他文本串并根据所指定的字符数替换某文本串中的部分文本。
REPLACE REPLACEB 使用其他文本串并根据所指定的字符数替换某文本串中的部分文本。此函数专为双字节字符使用。
按照给定的次数重复显示文本。可以通过函数
REPT REPT 来不断地重复显示某一文字串,对单元REPT(text,number_times 格进行填充。
RIGHT 根据所指定的字符数返回文本串中最
RIGHT 后一个或多个字符。
后一个或多个字符。此函数用于双字节字符。 SEARCH 返回从 start_num 开始首次找到特定字符或文本串的位置上特定字符的编号。使用 SEARCH 可确定字符或文本串在其他文本串中的位置,这样就可使用 MID REPLACE 函数更改文本。
SEARCH SEARCHB 也可在其他文本串 (within_text 中查找文本串 (find_text并返回 find_text 起始位置编号。此结果是基于每个字符所使用的字节数,并从 start_num 开始的。此函数用于双字节字符。此外,也可使用 FINDB 在其他文本串中查找文本串。
在文字串中用 new_text 替代 old_text如果需要在某一文字串中替换指定的文本,请使用函数
SUBSTITUTE SUBSTITUTE;如果需要在某一文字串中替换SUBSTITUTE(text,old_text,new_text,instance_num 指定位置处的任意文本,请使用函数 REPLACE
T TEXT 将数值转换成文本。
T(value SEARCH(find_text,within_text,start_num SEARCHB(find_text,within_text,start_num RIGHT(text,num_chars RIGHTB 根据所指定的字符数返回文本串中最RIGHTB(text,num_bytes REPLACE(old_text,start_num,num_chars,new_text REPLACEB(old_text,start_num,num_bytes,new_text 将一数值转换为按指定数字格式表示的文本。 TEXT(value,format_text 除了单词之间的单个空格外,清除文本中所有的TRIM 空格。在从其他应用程序中获取带有不规则空格TRIM(text 的文本时,可以使用函数 TRIM
UPPER VALUE WIDECHAR YEN 将文本转换成大写形式。 将代表数字的文字串转换成数字。 将单字节字符转换为双字节字符。
使用 ¥(日圆)货币格式将数字转换成文本,并对指定位置后的数字四舍五入。


UPPER(text VALUE(text WIDECHAR(text YEN(number,decimals 附二、日期与时间函数

函数名 DATE DATEDIF 函数说明
返回代表特定日期的系列数。 计算两个日期之间的天数、月数或年数。
函数 DATEVALUE 的主要功能是将语法
DATE(year,month,day
DATEDIF(start_date,end_date,unit DATEVALUE 以文字表示的日期转换成一个系列数。
DATEVALUE(date_text
DAY 返回以系列数表示的某日期的天数,用整数 1 31 表示。
按照一年 360 天的算法(每个月以
DAY(serial_number DAYS360 30 天计,一年共计 12 个月),返回DAYS360(start_date,end_date,method 两日期间相差的天数。
返回指定日期 (start_date 之前或之EDATE 后指定月份数的日期系列数。使用函 EDATE 可以计算与发行日处于一月中同一天的到期日的日期。 返回 start-date 之前或之后指定月份中最后一天的系列数。用函数
EDATE(start_date,months EOMONTH EOMONTH 可计算特定月份中最后一天的时间系列数,用于证券的到期日等计算。
返回时间值的小时数。即一个介于
0
EOMONTH(start_date,months HOUR (12:00 A.M. 23 (11:00 P.M. HOUR(serial_number 间的整数。
MINUTE 返回时间值中的分钟。即一个介于 0 59 之间的整数。
返回以系列数表示的日期中的月份。
MINUTE(serial_number MONTH 月份是介于 1(一月) 12(十二月)MONTH(serial_number 之间的整数。
返回参数 start-data end-data NETWORKDAYS 间完整的工作日数值。工作日不包括NETWORKDAYS(start_date,end_date,holidays 周末和专门指定的假期
NOW 返回当前日期和时间所对应的系列数。
返回时间值的秒数。返回的秒数为 0 59 之间的整数。
返回某一特定时间的小数值,函数 TIME 返回的小数值为从 0
TIME 0.99999999 之间的数值,代表从 0:00:00 (12:00:00 A.M 23:59:59 (11:59:59 P.M 之间的时间。
TIME(hour,minute,second NOW( SECOND SECOND(serial_number
返回由文本串所代表的时间的小数值。该小数值为从 0
0.999999999
TIMEVALUE 的数值,代表从 0:00:00 (12:00:00 AM 23:59:59 (11:59:59 PM 间的时间。
返回当前日期的系列数,系列数是
TODAY Microsoft Excel 用于日期和时间计算TODAY( 的日期-时间代码。
返回某日期为星期几。默认情况下,
WEEKDAY 其值为 1(星期天)到 7(星期六)WEEKDAY(serial_number,return_type 之间的整数。
WEEKNUM 返回一个数字,该数字代表一年中的第几周。
返回某日期(起始日期)之前或之后
WORKDAY 相隔指定工作日的某一日期的日期值。工作日不包括周末和专门指定的假日。
YEAR 返回某日期的年份。返回值为 1900 9999 之间的整数。
返回 start_date end_date 之间的天数占全年天数的百分比。
YEAR(serial_number WORKDAY(start_date,days,holidays WEEKNUM(serial_num,return_type TIMEVALUE(time_text YEARFRAC


本文来源:https://www.2haoxitong.net/k/doc/d8251444b307e87101f69603.html

《如何利用身份证号码提取相关信息.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式