WPS Office官网下载

公式技巧

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

WPS官方团队
WPS表格提取身份证出生日期公式, MID函数提取出生年月日, TEXT函数转换日期格式, 批量提取身份证号生日, 身份证号码15位转18位后提取生日, 提取日期出现1900错误怎么办, 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 / 移动

平台最低版本函数支持备注
WindowsWPS 2019 11.8MID/LET/DATEVALUELET 需 2021 以上
macOSWPS 2022 5.3同 WindowsM1 原生性能提升明显
Linux 信创WPS 2026 专业版完整 LET龙芯/鲲鹏需手动装字体
Android / 鸿蒙12.3 以上MID/IF/TEXTLET 暂不支持,可改用传统写法

经验性观察:移动端打开含 LET 的表格会回退为“#NAME?”错误,因此若文件需跨手机编辑,应优先使用传统嵌套写法。

操作路径:从打开到批量填充

  1. 打开 WPS 表格,将身份证号粘到 A 列,确保左上角绿色三角消失(文本转数值已完成)。
  2. 在 B2 输入上述“统一公式”,回车。
  3. 双击 B2 右下角填充柄,自动扩展到最后一行。
  4. 选中 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 位),并在文件→属性→自定义里添加“个人数据已脱敏”标记,满足《个人信息保护法》最小可用原则。

验证与观测方法

  1. 随机抽样 10 条,人工核对出生日期与身份证是否一致。
  2. 在空白列用 =DATEDIF(B2,TODAY(),"y") 计算年龄,筛选是否出现 <0 或 >120 的异常值。
  3. 用“条件格式→重复值”检查 B 列是否出现大量 1900-01-01,通常对应脏数据。

适用 / 不适用场景清单

  • 适用:员工档案、活动报名、教育统计,名单行数 ≤5 万,更新频率 ≤1 次/周。
  • 不适用:实时接口流水(毫秒级写入)、需区块链时间戳存证的司法场景、含少数民族 19 码证件。

最佳实践 6 条

  1. 原始身份证列设为“文本”,防止科学计数法截断。
  2. 公式列统一命名“出生日期_计算”,方便后期数据透视。
  3. 文件上传金山云前,先“另存为副本”去公式,仅保留值,减少下载端重算时间。
  4. 使用 LET 时,把长表拆分为 1 万行以内区块,可降内存峰值 20 %(经验性观察)。
  5. 若需导入 SQL,请把日期列复制→右键“选择性粘贴→数值”,避免 ODBC 把公式当字符串。
  6. 年度审计前,用“公式→公式求值”逐行复核 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 节点,届时只需把公式列替换为“值粘贴”,就能平滑过渡。

公式数据清洗自动化文本函数日期格式

相关文章