做人事、行政、学校教务、社区登记的朋友,几乎每个月都要和身份证号打交道:入职登记要填出生日期、年度体检要算年龄、考勤统计要分性别。一条身份证号里其实藏着全部信息——第 7 到 14 位是出生日期,第 17 位是性别,但一条一条肉眼抄出来,几百人的名单要抄到什么时候?

其实 WPS 表格有不止一种办法,能把「身份证号 → 出生日期 / 年龄 / 性别」这个转换过程完全自动化。最常用的函数方案一个公式就能批量处理,更省事的智能填充甚至不用记任何函数。本文把这三种方法全部讲透,从原理到操作步骤再到常见报错,读完你就能选最适合自己的那一种直接用起来。

一、先看懂身份证号的编码规则

用公式提取信息之前,先花一分钟搞清楚身份证号的位次结构。知道哪一位代表什么,后面所有公式都不需要死记硬背。

18 位身份证号码从左到右的构成:

位数内容说明
第 1-6 位地址码出生登记地所在省、市、区县
第 7-14 位出生日期码8 位数字,格式 YYYYMMDD,如 19900101
第 15-17 位顺序码同地址同日期出生者的顺序号,第 17 位奇数为男、偶数为女
第 18 位校验码由前 17 位按加权公式算出,可能是数字 0-9 或字母 X

18位身份证号码结构分解图

对本文来说,只要记住两个关键点:第 7-14 位是出生日期,第 17 位决定性别(奇数男、偶数女)。另外还有少部分早年签发的 15 位号码,出生日期在第 7-12 位(YYMMDD 六位),后面会专门讲怎么兼容处理。

二、方法一:MID 函数组合公式(最灵活)

函数方案的核心是三个函数:MID 负责「截取」,DATE 负责「拼成真日期」,DATEDIF 负责「算年龄」。三个函数串起来,一条公式就能把身份证号变成完整的人事信息。

1. 用 MID 提取出生日期

MID 函数的语法是 =MID(文本, 起始位置, 截取长度),从身份证号第 7 位开始截取 8 个字符,正好是 YYYYMMDD 格式的出生日期。

假设身份证号在 A2 单元格,公式是:

=MID(A2,7,8)

结果是一个文本字符串,比如 19900101。到这里信息已经提取出来了,但它还只是「长得像日期的一串数字」,不能直接参与日期计算。

2. 用 DATE 把文本变成真日期

要让 WPS 表格把 19900101 认成日期,需要把它拆成年、月、日三部分喂给 DATE 函数。DATE 的语法是 =DATE(年, 月, 日),再配合三个 MID 截取:

=DATE(MID(A2,7,4), MID(A2,11,2), MID(A2,13,2))
  • MID(A2,7,4) 截出年份 1990
  • MID(A2,11,2) 截出月份 01
  • MID(A2,13,2) 截出日期 01

公式返回的是真正的日期值。设置单元格格式为「日期」后,显示为 1990-01-01;之后参与排序、筛选、日期运算都不会出问题。

💡 提示:如果只想让单元格显示成 1990-01-01 而不是计算,也可以在 MID 结果里手动插入连接符:=MID(A2,7,4)&"-"&MID(A2,11,2)&"-"&MID(A2,13,2)。但注意这样得到的是文本,不是日期,不能直接参与后续日期计算。这也是很多表格里日期无法排序、无法计算的根源。

3. 用 DATEDIF 计算年龄

有了真实出生日期,年龄计算用 DATEDIF 函数一行搞定。语法是 =DATEDIF(开始日期, 结束日期, "Y"),第三个参数 "Y" 表示返回整年数:

=DATEDIF(DATE(MID(A2,7,4), MID(A2,11,2), MID(A2,13,2)), TODAY(), "Y")

这个公式的含义:从出生日期到今天的完整年数。TODAY() 是动态的,每天打开表格年龄都会自动更新,年末做全员年龄统计时尤其省心。

DATEDIF 的第三个参数除了 "Y"(年)还有几个实用变体:"M" 返回整月数(算工龄、社保年限常用),"D" 返回天数,"YM" 返回忽略年份后的剩余月数。人事表格里计算精确工龄时,"Y" 和 "M" 组合使用是标配。

4. 用 MOD + IF 判断性别

性别藏在第 17 位:奇数是男,偶数是女。公式逻辑分三步——MID 截出第 17 位,MOD 判断它除以 2 的余数,IF 根据余数输出结果:

=IF(MOD(MID(A2,17,1),2),"男","女")

原理拆解:MOD 返回余数,余数为 1 表示奇数(男),余数为 0 表示偶数(女)。IF 函数里条件位置是「非 0 即真」,余数 1 触发真值输出「男」,余数 0 触发假值输出「女」。

身份证信息提取公式流程图

5. 一次写全四个公式,拖拽批量填充

实际使用中,建议在 B、C、D、E 四列分别写入四个公式,选中四个单元格后双击填充柄或向下拖拽,几百行的名单几秒钟全部算完:

列公式结果示例
B 出生日期=DATE(MID(A2,7,4),MID(A2,11,2),MID(A2,13,2))1990-01-01
C 年龄=DATEDIF(B2,TODAY(),"Y")36
D 性别=IF(MOD(MID(A2,17,1),2),"男","女")男

其中 C 列的 DATEDIF 可以直接引用 B 列已经算好的出生日期,公式更短也更易读。函数之间互相引用,正是表格公式的推荐写法。

三、方法二:智能填充 Ctrl+E(零公式,最快)

如果不想记任何函数,WPS 表格的智能填充是另一个好选择。它的原理是:你在第一个单元格手打一个示例结果,WPS 识别出提取规律,自动把整列的规则套用到剩余数据。

操作步骤:

  1. 在身份证号右侧第一行(如 B2)手动输入第一条的出生日期,比如 19900101
  2. 选中 B2,按下快捷键 Ctrl+E(或点击「数据」选项卡下的「智能填充」)
  3. WPS 自动识别「从第 7 位开始取 8 位」的规则,瞬间把 B 列其余单元格全部填好

同样的思路可以提取性别:在 C2 手动判断第一条数据的性别填进去,选中后按 Ctrl+E,WPS 会发现「第 17 位奇数→男」的规律并批量完成。甚至可以把几段信息组合提取,比如在 D2 手打 1990年01月01日,Ctrl+E 后整列都按这个格式输出。

智能填充的优点是无门槛,缺点是结果是一次性静态文本:以后源数据改了,填充结果不会自动更新,而且规律复杂时偶尔会识别错误。所以正式的人事台账建议用函数公式,临时处理一批一次性数据用 Ctrl+E 最省事。

对智能填充的更多玩法感兴趣,可以参考 WPS表格分列功能完全指南,分列和智能填充经常配合使用。

四、方法三:插入函数里的「常用公式」(官方封装版)

WPS 表格其实把身份证提取做成了内置的「常用公式」,一行公式都不用自己写。

操作步骤:

  1. 选中要输出结果的单元格
  2. 点击「公式」选项卡 →「插入函数」
  3. 在弹出的对话框里切换到「常用公式」标签页
  4. 列表里找到「提取身份证年龄」「提取身份证性别」「提取身份证出生日期」等条目
  5. 选择对应条目,在参数栏点击身份证号所在的单元格,确定即可

这个功能本质上是 WPS 把第二节的函数组合封装成了带对话框的一键工具,对完全不熟悉函数的用户非常友好。唯一的不足是它生成的公式不够透明,想要微调(比如年龄想算到月)就不如自己写函数灵活。函数熟练之后,推荐直接手写,因为逻辑完全可控,换表格、换列位置都能自己改。

五、进阶:15 位旧身份证号怎么处理

2013 年 1 月 1 日之前签发的一代证是 15 位号码,区别在于:出生日期是第 7-12 位共 6 位(YYMMDD),没有第 18 位校验码,而且年份只有两位(如 90 代表 1990 年)。如果你的名单里混有 15 位号码,用 18 位的公式会提取出错误结果。

通用兼容公式的思路是先用 LEN 判断号码长度,再分情况提取。以出生日期为例:

=IF(LEN(A2)=15, DATE(19&MID(A2,7,2), MID(A2,9,2), MID(A2,11,2)), DATE(MID(A2,7,4), MID(A2,11,2), MID(A2,13,2)))

解读:如果 A2 长度是 15 位,年份取第 7-8 位并在前面补 19(15 位号码都是 1900 年代出生),月份取第 9-10 位,日期取第 11-12 位;否则按 18 位规则处理。性别判断同理,15 位号码的顺序码最后一位(第 15 位)决定性别:

=IF(MOD(MID(A2, IF(LEN(A2)=15, 15, 17), 1), 2), "男", "女")

现实中新录入的数据基本都已经是 18 位,但如果从老系统导出的历史名单,最好先统一用 LEN 函数检查一遍号码长度,再决定要不要上兼容公式。

六、五个高频踩坑点与排查方法

1. 身份证号变成了科学计数法

身份证号输入单元格后显示成 4.10102E+17,或者末尾三位变成 000——这是因为 WPS 表格把它当成了数值,而数值超过 15 位有效数字就会被舍入。解决方法有两个:输入前先输入英文单引号 ' 强制按文本处理,或者选中区域把单元格格式设为「文本」再输入。已经变形的数据无法靠改格式恢复,只能重新录入。

2. MID 截出来的日期是文本不是日期

用 =MID(A2,7,8) 得到的结果靠单元格格式改「日期」也无效,因为它本质是文本。必须像第二节那样用 DATE 函数组合,或者用 TEXT 函数转换:=TEXT(MID(A2,7,8), "0-00-00")。判断一个「日期」是不是真日期,最简单的办法是看它能不能被日期函数正常计算。

3. 公式显示 #VALUE! 错误

常见原因是身份证号所在单元格里混了空格、全角字符,或号码根本不是数字。先用 TRIM 函数清空格,再检查单元格格式是否为文本。另外确认 MID 的起始位置参数没有写错,18 位号码出生日期一定从第 7 位开始。

4. 年龄结果比预期大一岁

用 =YEAR(TODAY())-MID(A2,7,4) 这种「年份相减」的算法,在生日未过时会多算一岁。精确的周岁年龄应该用 DATEDIF 函数,它按完整周年计算,不会出现虚岁偏差。

5. 下拉填充后公式结果都一样

这是因为公式里的引用没有按行递增。检查公式是否用了绝对引用(如 $A$2),把 $ 去掉改成相对引用 A2 再下拉。另外确认「公式」选项卡下的计算方式是「自动」,手动计算模式下公式不会实时刷新。

七、总结:三种方法怎么选

方法上手难度自动化程度适用场景
函数公式需要记函数高,源数据变化自动更新正式人事台账、需长期维护的名单
智能填充 Ctrl+E几乎为零一次性静态结果临时整理、一次性提取
常用公式低中函数新手、需要快速出结果

日常工作里最稳妥的做法是函数公式打底:出生日期、年龄、性别三个公式一次性写好存成表格模板,下次拿到新的身份证名单直接粘贴、下拉填充即可。想进一步把提取出来的日期做统计,可以继续学习 WPS表格排序筛选教程 和 WPS表格条件格式化教程,把人事表做成自动化的管理工具。

常见问题 FAQ

WPS表格怎么从身份证号提取出生年月日?
在 B2 单元格输入公式 =DATE(MID(A2,7,4),MID(A2,11,2),MID(A2,13,2))(身份证号在 A2),回车后得到真日期,设置单元格格式为「日期」即可显示为年-月-日。更简单的方式是手动输入第一条示例后按 Ctrl+E 智能填充。
WPS表格如何用身份证号计算年龄?
用 DATEDIF 函数:=DATEDIF(DATE(MID(A2,7,4),MID(A2,11,2),MID(A2,13,2)),TODAY(),"Y")。先由 MID 和 DATE 组合出出生日期,再与 TODAY() 比较得到整年数,结果会随日期自动更新。
身份证第 17 位怎么判断男女?
第 17 位数字为奇数则是男,偶数是女。公式:=IF(MOD(MID(A2,17,1),2),"男","女")。MOD 取除以 2 的余数,余数 1 输出男,余数 0 输出女。
15 位身份证号码能用这些公式吗?
不能直接用,需用 LEN 判断长度后分情况处理。出生日期用 =IF(LEN(A2)=15,DATE(19&MID(A2,7,2),MID(A2,9,2),MID(A2,11,2)),DATE(MID(A2,7,4),MID(A2,11,2),MID(A2,13,2))),性别判断把第 17 位换成第 15 位。
提取出来的日期为什么不能排序和计算?
因为 MID 直接截取的结果是文本而不是日期。用 DATE 函数组合(或 TEXT 转换)得到真日期后,排序、筛选、日期函数计算都正常。辨别方法:真日期在单元格中默认右对齐,文本日期左对齐。