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

功能定位:为什么不用「分列」而要用函数
在 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 桌面端
- 打开 WPS 表格,选中目标单元格(假设身份证在 A2)。
- 直接在编辑栏粘贴公式即可,无需额外菜单。
- 若希望整列溢出,在 2026 春季版只需将公式写在 B2,结果会自动向下溢出;旧版需双击填充柄。
Android/iOS 移动端
- 打开表格文件 → 点击底部「工具」→「插入」→「函数」→「文本」。
- 搜索 MID→依次输入参数;再手动拼接 DATE。受限于屏幕键盘,建议先在电脑端建好模板,云同步后手机查看。
公式 1:提取出生日期(兼容 2007 以上版本)
解释:先用 LEN 判断长度,15 位就补“19”,再按固定偏移取年、月、日;18 位则直接取 4 位年。DATE 函数会把文本数字自动转为真日期,单元格格式建议设置为「yyyy-mm-dd」。
公式 2:计算周岁年龄(精确到“生日是否已过”)
DATEDIF 第三参数 "Y" 会返回整年数,遇到生日未自动加一,符合中国法律对“周岁”的定义。若想同时显示“岁零几个月”,可把 "YM" 再嵌一段,& 符号拼接即可。
公式 3:一条公式同时溢出整列(2026 春季版专享)
LET 把重复计算缓存到内存,经验性观察在 10 万行级别可让刷新时间从 3 秒降到亚秒级;若电脑为 Intel Arc 或 RTX 50 系,WPS 会自动调用 GPU 加速,但提升幅度取决于驱动版本。
常见分支:身份证末尾带 X 怎么办?
X 只出现在第 18 位校验位,不影响 7–14 位生日段,因此公式无需额外处理。若原始数据里 X 被写成小写 x,可用 UPPER 统一转换,避免 VLOOKUP 区分大小写时找不到人。
不适用场景与副作用
- 数据含空格或全角字符:MID 按字节偏移,全角空格会被当两个字符,导致截断失败。解决:先用 CLEAN(TRIM()) 清洗。
- 护照、港澳居民居住证号长度不同,不能硬套上述公式;需改用正则匹配或 PowerQuery 条件列。
- 若文件需移交审计,不建议把 TODAY() 写死,因为每次打开都会变。可改为「截止填报日期」字段,让审计可追溯。
与 PowerQuery 的取舍:何时上脚本
当身份证分散在 120 个 CSV 且列名不统一时,函数维护成本陡增。此时可用「数据-获取数据-自文件夹」把 PowerQuery 拉进来,在 M 语言里写 Text.Middle([证件号码],6,8) 再转日期。脚本方案一次性搭建,后期「刷新全部」即可,但文件体积会增大约 1.3 倍;经验性观察在 50 万行以上才值得切换。
验证与观测方法
- 随机抽样 10 条,手工对照公安部「公民身份号码校验工具」官网结果,确认生日无误。
- 在空白列用
=B2=DATE(1990,3,15)做布尔测试,TRUE 表示公式与目标日期完全相等。 - 打开「文件-选项-公式-启用迭代计算」,观察循环引用报警是否出现,确保 TODAY() 未意外嵌套自身。
最佳实践清单(可直接打印当检查表)
| 步骤 | 检查点 | 通过标准 |
|---|---|---|
| 1 | 原始列是否文本格式 | 身份证左上角无绿色小三角 |
| 2 | 公式列格式 | 日期列=yyyy-mm-dd,年龄列=常规 |
| 3 | 空白或错误值 | 用 IFERROR 包起来,返回“证件号异常” |
| 4 | 文件移交 | 把 TODAY() 换成静态日期并批注说明 |
故障排查速查表
可能原因:DATE 得到 1900-01-00,WPS 把负数日期当 1900-01-00 处理。
验证:选中出生列 → 状态栏若出现「1900/1/0」即确认。
处置:检查 MID 偏移是否错位,尤其是 15 位证补“19”后偏移量需 +2。
可能原因:外部链接被禁用,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电脑版 和功能介绍,可以继续浏览博客列表和下载页,获取更完整的安装与使用信息。

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