WPS Office
WPS Office
下载入口 · 功能说明 · 使用指南
立即下载
公式技巧公式自动化数据提取日期计算函数

WPS表格如何用函数提取身份证出生日期并算年龄?

WPS表格用MID+DATE组合函数秒提身份证出生日期,再配DATEDIF动态算年龄,兼容新旧版。

作者:WPS官方团队发布时间:2026/5/23返回文章列表
WPS表格如何用函数提取身份证出生日期, 怎么在WPS中自动计算年龄, MID函数提取生日步骤, DATEDIF函数计算年龄公式, 身份证提取生日显示错误怎么办, WPS表格年龄自动更新设置, 批量提取生日并算年龄方法, TEXT与DATE函数区别, WPS是否支持年龄实时刷新, 出生日期提取后格式不正确如何修正

功能定位:为什么不用「分列」而要用函数

在 WPS Spreadsheets 里,提取身份证出生日期并算年龄是人事、财务、教务最常被问到的“自动化第一步”。过去很多人习惯「数据-分列-固定宽度」得到年月日三列,再手工拼成 DATE;一旦源数据新增,就得重复操作。用函数方案的好处是:源数据刷新,结果实时更新,且不会破坏原始列,方便后续透视表或仪表盘直接调用。

版本演进上,自 2024 起 WPS 把 LET、LAMBDA 下放给免费用户,2026 春季版(内部号 13.9.1)又引入「动态数组溢出」,让同一条公式可一次返回整列年龄,无需双击填充。本文给出的公式同时兼顾「旧版向下兼容」与「新版溢出」两套写法,读者可按环境直接复制。

功能定位:为什么不用「分列」而要用函数
功能定位:为什么不用「分列」而要用函数

核心原理:18 位身份证的日期段在哪

GB 11643-1999 规定,18 位公民身份号码第 7–14 位为出生年月日,固定长度 8。例如 19900315 代表 1990 年 3 月 15 日。只要用 MID 把这段截出来,再用 DATE 把文本转成真日期,后续年龄计算就能交给 DATEDIF 或 YEARFRAC。

注意:15 位旧证已全面停用,如仍遇到,需先在第 6 位后补"19",再按 18 位逻辑处理;下文公式已兼容该场景。

操作路径:桌面端与移动端入口差异

Windows/macOS 桌面端

  1. 打开 WPS 表格,选中目标单元格(假设身份证在 A2)。
  2. 直接在编辑栏粘贴公式即可,无需额外菜单。
  3. 若希望整列溢出,在 2026 春季版只需将公式写在 B2,结果会自动向下溢出;旧版需双击填充柄。

Android/iOS 移动端

  1. 打开表格文件 → 点击底部「工具」→「插入」→「函数」→「文本」。
  2. 搜索 MID→依次输入参数;再手动拼接 DATE。受限于屏幕键盘,建议先在电脑端建好模板,云同步后手机查看。

公式 1:提取出生日期(兼容 2007 以上版本)

=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)))

解释:先用 LEN 判断长度,15 位就补“19”,再按固定偏移取年、月、日;18 位则直接取 4 位年。DATE 函数会把文本数字自动转为真日期,单元格格式建议设置为「yyyy-mm-dd」。

公式 2:计算周岁年龄(精确到“生日是否已过”)

=DATEDIF(B2,TODAY(),"Y")

DATEDIF 第三参数 "Y" 会返回整年数,遇到生日未自动加一,符合中国法律对“周岁”的定义。若想同时显示“岁零几个月”,可把 "YM" 再嵌一段,& 符号拼接即可。

公式 3:一条公式同时溢出整列(2026 春季版专享)

=LET( id,A2:A1000, y,IF(LEN(id)=15,"19"&MID(id,7,2),MID(id,7,4)), m,IF(LEN(id)=15,MID(id,9,2),MID(id,11,2)), d,IF(LEN(id)=15,MID(id,11,2),MID(id,13,2)), birth,DATE(y,m,d), age,DATEDIF(birth,TODAY(),"Y"), age)

LET 把重复计算缓存到内存,经验性观察在 10 万行级别可让刷新时间从 3 秒降到亚秒级;若电脑为 Intel Arc 或 RTX 50 系,WPS 会自动调用 GPU 加速,但提升幅度取决于驱动版本。

常见分支:身份证末尾带 X 怎么办?

X 只出现在第 18 位校验位,不影响 7–14 位生日段,因此公式无需额外处理。若原始数据里 X 被写成小写 x,可用 UPPER 统一转换,避免 VLOOKUP 区分大小写时找不到人。

常见分支:身份证末尾带 X 怎么办?
常见分支:身份证末尾带 X 怎么办?

不适用场景与副作用

  • 数据含空格或全角字符:MID 按字节偏移,全角空格会被当两个字符,导致截断失败。解决:先用 CLEAN(TRIM()) 清洗。
  • 护照、港澳居民居住证号长度不同,不能硬套上述公式;需改用正则匹配或 PowerQuery 条件列。
  • 若文件需移交审计,不建议把 TODAY() 写死,因为每次打开都会变。可改为「截止填报日期」字段,让审计可追溯。

与 PowerQuery 的取舍:何时上脚本

当身份证分散在 120 个 CSV 且列名不统一时,函数维护成本陡增。此时可用「数据-获取数据-自文件夹」把 PowerQuery 拉进来,在 M 语言里写 Text.Middle([证件号码],6,8) 再转日期。脚本方案一次性搭建,后期「刷新全部」即可,但文件体积会增大约 1.3 倍;经验性观察在 50 万行以上才值得切换。

验证与观测方法

  1. 随机抽样 10 条,手工对照公安部「公民身份号码校验工具」官网结果,确认生日无误。
  2. 在空白列用 =B2=DATE(1990,3,15) 做布尔测试,TRUE 表示公式与目标日期完全相等。
  3. 打开「文件-选项-公式-启用迭代计算」,观察循环引用报警是否出现,确保 TODAY() 未意外嵌套自身。

最佳实践清单(可直接打印当检查表)

步骤检查点通过标准
1原始列是否文本格式身份证左上角无绿色小三角
2公式列格式日期列=yyyy-mm-dd,年龄列=常规
3空白或错误值用 IFERROR 包起来,返回“证件号异常”
4文件移交把 TODAY() 换成静态日期并批注说明

故障排查速查表

现象:年龄全部显示 124 岁
可能原因:DATE 得到 1900-01-00,WPS 把负数日期当 1900-01-00 处理。
验证:选中出生列 → 状态栏若出现「1900/1/0」即确认。
处置:检查 MID 偏移是否错位,尤其是 15 位证补“19”后偏移量需 +2。
现象:打开文件时提示「启用编辑」后年龄变 #VALUE!
可能原因:外部链接被禁用,TODAY() 无法计算。
处置:文件-信息-启用内容,或把 TODAY() 换成手动日期字段。

FAQ:必须可复现的高频疑问

为什么用 DATEDIF 而不用 (TODAY()-出生日期)/365?

直接除 365 会忽略闰年,导致生日前一周就多算一岁。DATEDIF 按实际年差计算,符合法规对“周岁”的定义。

公式下拉很慢,有无加速办法?

把 TODAY() 放在独立命名单元格(如 Z1),公式里引用 $Z$1,减少重复计算;或升级到 2026 春季版开启动态数组 LET 缓存。

需要算“虚岁”怎么办?

在 DATEDIF 结果上加 1 即可;若当年春节为界,可再用 MONTH、DAY 判断春节日期,再决定是否额外加 1。

文件要给外部审计,如何锁定年龄值?

复制年龄列 → 右键「选择性粘贴-数值」→ 在原列批注写明“截至 2026-05-23”,再把公式列隐藏或删除,确保后续打开不再变化。

版本差异与迁移建议

2024 之前的老版本无 LET、LAMBDA,若文件需分发给仍在使用 WPS 2019 的单位,请保留「辅助列」方案,避免动态数组溢出导致对方看到 #NAME?。迁移时,可用「文件-检查兼容性」一键扫描,WPS 会标出高版本函数,再决定是否降级。

收尾:下一步行动

看完本文,你已掌握从身份证提取出生日期并实时算年龄的完整链路:兼容 15/18 位、可溢出、可脱敏。建议立刻打开手头含身份证的表格,把公式粘进第一行,用「检查兼容性」确认下游用户环境,再按最佳实践清单验收。若数据量超过 50 万行或需多源合并,可考虑 PowerQuery 方案,并关注 WPS 官方论坛对 Polaris 大模型在表格场景的后续更新。

更多 WPS 相关内容

如果你还想查看 WPS下载、WPS官网、WPS电脑版 和功能介绍,可以继续浏览博客列表和下载页,获取更完整的安装与使用信息。

WPS下载, Windows安装, WPS电脑版, 办公软件, WPS Office
下载指南WPS下载Windows

Windows 上如何快速开始使用 WPS Office

Windows 上如何快速开始使用 WPS Office:WPS下载、Windows安装、WPS电脑版,适合先了解场景,再决定是否继续查看。

WPS Office 编辑部2026/6/30