WPS表格如何用公式提取身份证生日?

功能定位:为什么公式比“分列”更稳
在 WPS Spreadsheets 里,提取身份证生日常见三条路线:分列、Ctrl+E 智能填充、公式。前两者一旦追加数据就得重来,多人协作时还容易被误触破坏格式;公式一次写完,后期新增行可自动向下填充,同时保留原始身份证号,方便稽核。下文只聊“公式法”,兼顾 15 位与 18 位号码,并给出 2007 旧版(.et)与 2026 新版的差异点。
核心原理:号码结构 & 日期边界
大陆身份证第 7–14 位(18 位证)或 7–12 位(15 位证)存放出生日期。18 位直接取 4 位年 + 2 位月 + 2 位日;15 位需要把 2 位年补全为 19xx。公式必须同时完成“截取 + 补位 + 转真日期”三件事,才能参与后续工龄、年龄、退休日等运算。
18 位证提取(最简形态)
=TEXT(MID(A2,7,8),"0000-00-00")*1
MID 截取 8 位数字 → TEXT 强制加横杠 → *1 把文本转真日期。列宽不足时显示 5 位序列号,把单元格格式改为“日期”即可。
15 位证提取(需补 19)
=TEXT(IF(LEN(A2)=15,19&"","")&MID(A2,7,6),"0000-00-00")*1
先判断长度,仅 15 位时拼接“19”,再按 6 位日期解析。公式向下填充可同时兼容 15/18 位混合名单。
统一公式(15/18 自动识别)
=LET( id,A2, len,LEN(id), ym,MID(id,7,IF(len=18,8,6)), dateTxt,IF(len=18,ym,TEXT(19&ym,"000000")), DATEVALUE(TEXT(dateTxt,"0000-00-00")) )
LET 把重复计算收拢,提升大表性能;DATEVALUE 显式转日期,避免 *1 被误认为是数值运算。
平台差异:Windows / macOS / Linux / 移动
| 平台 | 最低版本 | 函数支持 | 备注 |
|---|---|---|---|
| Windows | WPS 2019 11.8 | MID/LET/DATEVALUE | LET 需 2021 以上 |
| macOS | WPS 2022 5.3 | 同 Windows | M1 原生性能提升明显 |
| Linux 信创 | WPS 2026 专业版 | 完整 LET | 龙芯/鲲鹏需手动装字体 |
| Android / 鸿蒙 | 12.3 以上 | MID/IF/TEXT | LET 暂不支持,可改用传统写法 |
经验性观察:移动端打开含 LET 的表格会回退为“#NAME?”错误,因此若文件需跨手机编辑,应优先使用传统嵌套写法。
操作路径:从打开到批量填充
- 打开 WPS 表格,将身份证号粘到 A 列,确保左上角绿色三角消失(文本转数值已完成)。
- 在 B2 输入上述“统一公式”,回车。
- 双击 B2 右下角填充柄,自动扩展到最后一行。
- 选中 B 列→开始→格式→单元格格式→日期→选“2012-03-14”样式,完成。
若数据后续还会追加,可把 A:B 整体转为“表格”(Ctrl+T),新行会自动继承公式,无需再次双击填充。
常见失败分支与回退
失败 1:公式返回 ########
列宽不足或出现负日期。先拉宽列,若仍报错,用“筛选”检查是否混入字母或全角字符,清洗后再算。
失败 2:15 位证全部变成 1900 年
把 *1 写成 +0 导致文本转数值失败。改回 *1 或使用 DATEVALUE 显式转换。
失败 3:协作时别人看见 #NAME?
对方版本低于 LET 支持。文件→另存为→选择“兼容模式”,WPS 会自动把 LET 展开为传统嵌套。
是否值得?公式法 vs Power Query 法
WPS 2026 已集成类 Power Query 的“数据→获取与转换”功能,可鼠标点击完成“列拆分→类型转换→上载”。若数据量过万行且需要定期追加,Power Query 更省内存;但公式法零学习成本、即时刷新,适合千人以内、月更几次的中小名单。经验性观察:5 万行以下公式法 CPU 占用差异不足 1 %,可忽略。
合规提示:脱敏与权限
提取后的生日属于“间接身份识别信息”。若表格需外发,应对身份证号做掩码(如保留首尾 4 位),并在文件→属性→自定义里添加“个人数据已脱敏”标记,满足《个人信息保护法》最小可用原则。
验证与观测方法
- 随机抽样 10 条,人工核对出生日期与身份证是否一致。
- 在空白列用 =DATEDIF(B2,TODAY(),"y") 计算年龄,筛选是否出现 <0 或 >120 的异常值。
- 用“条件格式→重复值”检查 B 列是否出现大量 1900-01-01,通常对应脏数据。
适用 / 不适用场景清单
- 适用:员工档案、活动报名、教育统计,名单行数 ≤5 万,更新频率 ≤1 次/周。
- 不适用:实时接口流水(毫秒级写入)、需区块链时间戳存证的司法场景、含少数民族 19 码证件。
最佳实践 6 条
- 原始身份证列设为“文本”,防止科学计数法截断。
- 公式列统一命名“出生日期_计算”,方便后期数据透视。
- 文件上传金山云前,先“另存为副本”去公式,仅保留值,减少下载端重算时间。
- 使用 LET 时,把长表拆分为 1 万行以内区块,可降内存峰值 20 %(经验性观察)。
- 若需导入 SQL,请把日期列复制→右键“选择性粘贴→数值”,避免 ODBC 把公式当字符串。
- 年度审计前,用“公式→公式求值”逐行复核 20 条样本,留存截图备查。
FAQ:提取身份证生日的 5 个高频疑问
公式返回空白怎么办?
检查身份证列是否存在前置空格,用 CLEAN(TRIM()) 预处理后再计算。
为何 2000 年后出生被识别成 1900 年?
15 位证规则默认补 19,遇到 2000 年后必须人工确认原号码是否升位,建议先用数据→分列→固定宽度把 15 位单独标色。
手机端能否编辑含 LET 的文件?
截至当前的最新版本,Android/鸿蒙仍不支持 LET,会显示 #NAME?;建议外出前在 PC 上另存为“兼容模式”。
提取后如何批量改农历?
WPS 暂无官方农历函数,可调用第三方插件“华夏日历”,但需启用宏;政务场景建议改用 Python 节点离线转换。
能否一次提取性别、年龄、退休日?
可以,用相同逻辑嵌套 IF 与 MOD 即可;但建议分三列书写,降低后续调试难度。
收尾:下一步行动
读完本文,你已掌握 WPS 表格用公式提取身份证生日的完整链路:从版本差异、跨平台兼容到脏数据清洗与合规脱敏。立刻打开一份真实名单,按“统一公式”复现;验证无误后,把文件存为模板,下次只需粘贴新数据即可秒级刷新。若行数超过 5 万或需要与数据库实时同步,再考虑迁移到 Power Query 或 Python 节点,届时只需把公式列替换为“值粘贴”,就能平滑过渡。



