问题场景


  • 从user表中的身份信息中拿到用户的年龄性别

  • 以下方法也可适用于提取其他数据,目的在于通过实例操作了解更多函数用法

  • 以下图中数据都为测试数据,不具备真实性!

场景一


  • 从user表中的18位身份证信息列中提取所有用户的年龄。

    • 不考虑15位的身份证信息。

目标


  • 提取18位身份证信息列的出生日期来判断所有用户的年龄。

解决方案一


用year()、today()、mid()函数实现。

  • 函数解释
=YEAR(serial_number)
//将系列数转换为年,serial_number一个日期值,其中包含要查找的年份=TODAY()
//TODAY函数没有参数,作为YEAR函数的参数来获取当前年份
//MID函数参考上篇文章,有解释含义和用法
  • 第一步:在G2单元格英文状态下输入:=YEAR(TODAY())-MID(D2,7,4)。

    • 公式解释:使用TODAY函数作为 YEAR函数的参数来获取当前年份,减去他的出生年份(MID函数从D2格单元的第7位起截取4位获取出生年份)。

  • 第二步:鼠标移到G2单元格的右下角,出现实心的黑色【+】号,双击填充此公式。

  • 第三步:最后结果。

解决方案二


用Datedif()函数、Text()函数和MID()函数。

  • 函数解释
=DATEDIF(start_date,end_date,unit)
//Start_date起始日期;End_date结束日期;Unit为所需信息的返回类型,通常有三种"Y""M""D"。
//Y、M、D参数:分别计算开始日期与结束日期的年份差、月份差、和天数差。
//text函数参考上篇文章,有解释含义和用法。
  • 第一步:在G2单元格英文状态下输入:=DATEDIF(TEXT(MID(D2,7,8),"00-00-00"),TODAY(),"y")。

    • 公式解释:MID函数从D2格单元的第7位起截取8位获取出生年月日,再用Text函数转换为日期格式,最后用datedif函数计算当前年份和出生日期的年份差。

  • 第二步:鼠标移到G2单元格的右下角,出现实心的黑色【+】号,双击填充此公式。

  • 第三步:最后结果。

解决方案三


用Datedif()函数、 date()函数和MID()函数。

  • 函数解释
=DATE(year,month,day)
//将结果将设为日期格式,且year,month,day三个参数为年、月、日参数
//用法示例参考上篇。
  • 第一步:在G2单元格英文状态下输入:=DATEDIF(DATE(MID(D2,7,4),1,1),TODAY(),"y")。

    • 公式解释:MID函数从D2格单元的第7位起截取8位获取出生年月日,再用Date函数转换为日期格式(月和日的参数定1),最后用datedif函数计算当前年份和出生日期的年份差。

  • 第二步:鼠标移到G2单元格的右下角,出现实心的黑色【+】号,双击填充此公式。

  • 第三步:最后结果。

解决方案四


  • 分两步,先提取出生日期,上篇中详细介绍了怎么提取出生日期,这列可以拿来用;

  • 再用上述函数直接跟当前年份做差算出年龄。

场景二


  • 从user表中的18位身份证信息列中判断所有用户的性别。

    • 不考虑15位的身份证信息。

目标


  • 从18位身份证信息中判断所有用户的性别。

    • 18位身份证的第17位代表性别,奇数为男,偶数为女

解决方案一


用if()、MOD()、MID()函数。

  • 函数解释
=IF(logical_test,value_if_true,value_if_false)
//例:=if(2>1,1,0),如果2>1,则返回1否则返回0;
//例:=if(2>1,"Ture","False"):如果2>1,则返回Ture否则返回False=MOD(number,divisor)
//求余函数,Number 为被除数;Divisor 为除数,返回余数。
  • 第一步:在H2单元格英文状态下输入:=IF(MOD(MID(D2,17,1),2),"男","女")或者=IF(MOD(MID(D2,17,1),2)=1,"男","女")。

    • 公式解释:MID函数从D2格单元的第17位,再用MOD函数求余,在用IF函数判断余数,余数为0则是假值,返回“女”,否则返回“男”(Excel中真值为0可以代表假)。

  • 第二步:鼠标移到H2单元格的右下角,出现实心的黑色【+】号,双击填充此公式。

  • 第三步:最后结果。

解决方案二


用if()、ISODD()、MID()函数。

  • 函数解释
=ISODD(number)
//判断参数是不是奇数,如果是返回ture,否则返回False.
  • 第一步:在H2单元格英文状态下输入:=IF(ISODD(MID(D2,17,1)),"男","女")。

    • 公式解释:MID函数从D2格单元的第17位,然后用ISODD判断第17位是否为奇数,在用IF函数判断如果是,返回“男”,否则返回“女”。

  • 第二步:鼠标移到H2单元格的右下角,出现实心的黑色【+】号,双击填充此公式。

  • 第三步:最后结果。

总结


实际业务场景复杂时,如果不能一次性解决问题,可择优使用、或可结合使用,多尝试,办法总比困难多!

Excel提取身份证年龄和性别③的更多相关文章

  1. Excel提取身份证出生日期②

    问题场景 从user表中的身份信息中提取用户的出生日期: 以下方法也可适用于提取其他数据,不仅是身份证信息: 以下图中数据都为测试数据,不具备真实性! 场景一 user表中的18位身份证,提取出生日期 ...

  2. Excel通过身份证获取出生年月,性别,年龄,生肖,星座,省份等信息总结归纳

    Excel通过身份证获取出生年月,性别,年龄,生肖,星座,省份等信息总结归纳 早期的身份证号码为15位数字,现在使用的身份证号码为18位数字,它们的含义如下:(1)15位:1-6位为地区代码,7-8位 ...

  3. Java中校验身份证号合法性(真伪),获取出生日期、年龄、性别、籍贯

    开发过程中有用的身份证号的业务场景,那么校验身份证的合法性就很重要了,另外还有通过身份证获取出生日期.年龄.性别.籍贯等信息, 下面是本人在开发中用到的关于校验身份证真伪的工具类,可以直接拿来使用,非 ...

  4. C#根据身份证号码,计算生日、年龄、性别

    朋友谈及身份证相关的信息,才了解到原来省份证号码中包含了年龄和性别. 这样在数据库中,就不必单独留字段存放它们了(不过,要根据具体情况来,要是读取频率较高,还是单独列出为好),这样顺带解决了年龄变更的 ...

  5. js脚本根据身份证号获取性别、年龄、家庭地址、生日

    做项目测试时需要根据身份证号获取其信息,也不想调接口,就自己在本地通过收集资料整合了一个

  6. java根据身份证号和获取用户年龄和性别的工具类

    import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util ...

  7. IOS 根据身份证号码获取 年龄 生日 性别

    /** 从身份证上获取年龄 18位身份证 */ -(NSString *)getIdentityCardAge:(NSString *)numberStr { NSDateFormatter *for ...

  8. CardUtil算出当前身份证持有者的性别和年龄

    import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util ...

  9. JavaScript 通过身份证号获取出生日期、年龄、性别 、籍贯

    JavaScript 通过身份证号获取出生日期.年龄.性别 .籍贯(很全) 效果图: 示例代码: //由于没有写外部JS,所以代码比较长!!! <!DOCTYPE html PUBLIC &qu ...

随机推荐

  1. ken桑带你读源码 之scrapy scrapy\extensions

    logstats.py 爬虫启动时 打印抓取网页数   item数 memdebug.py 爬虫结束 统计还被引用的内存 也就是说gc 回收不了的内存   memusage.py 监控爬虫 内存占用  ...

  2. 在CentOS 7 上为docker配置端口转发以兼容firewall

    在CentOS 7上当我们以类似下列命令将主机端口与容器端口映射时可能遇到无法访问容器服务的问题 docker run --name web_a -p 192.168.1.250:803:80 -d ...

  3. [转]jquery如何判断checkbox(复选框)是否被选中,至少被选中一个

    谁都知道 在html 如果一个复选框被选中 是 checked="checked". 但是我们如果用jquery alert($("#id").attr(&qu ...

  4. Apache Tomcat/8.5.51 secretRequired="true"

    1.报错IllegalArgumentException: The AJP Connector is configured with secretRequired="true" b ...

  5. pandas_分类与聚合

    # 分组与聚合 import pandas as pd import numpy as np # 设置列对齐 pd.set_option("display.unicode.ambiguous ...

  6. FPGA内部IP核DDS

    项目当中需要正弦信号与余弦信号,首先想到了DDS芯片,例如AD9833.AD9834.由于还需要用FPGA   做一些数据处理,后来干脆直接用FPGA 内部的DDSIP核,同时根据IP核内部的相位累加 ...

  7. hashMap在jdk1.7与jdk1.8中的原理及不同

    在分析jdk1.7中HashMap的hash冲突时,不知大家是否有个疑问就是万一发生碰撞的节点非常多怎么版?如果说成百上千个节点在hash时发生碰撞,存储一个链表中,那么如果要查找其中一个节点,那就不 ...

  8. Linux-sed命令使用笔记

    Linux的sed命令和python脚本一起,可以对文本进行快速的修改.比如在删除日志的时候,python写出固定日期删除脚本,再用sed循环将python脚本的日期修改调用,就可以批删除指定日期的日 ...

  9. Java 通过Jna调用dll路径问题

    调试阶段 C++ dll --> window/system32C# dll --> C:\Program Files\Java\jdk1.8.0_171\bin [jdk bin] 打包 ...

  10. linux tcpdump抓包Post请求

    tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)' -w f ...