如何从身份证号码中提取出生年月,核心原理是第二代居民身份证18位号码的第7位至第14位,固定存储YYYYMMDD格式的出生日期,也就是4位年份、2位月份、2位日期连续排布,你可以通过Excel函数、WPS表格、Python代码、手工截取四种方式完成提取,该编码规则源自GB11643-1999《公民身份号码》国家标准,仅适用于现行18位二代身份证,早期15位一代身份证编码结构不同,不能直接套用这套截取位置,15位号码的出生信息为第7位至第12位,格式是YYMMDD,年份只有两位,需要自行补全世纪前缀。

如何从身份证号码中提取出生年月:表格软件操作

Excel与WPS表格的逻辑一致,假设身份证号码存放在A2单元格,你可以使用MID函数截取指定位置字符,公式为=MID(A2,7,6),这个公式的含义是从A2单元格文本的第7个字符开始,连续取出6位字符,得到的结果就是YYMMDD中的前6位,也就是出生年月,输出形态为类似199005这样的字符串。如果你需要把它转成年月的日期格式,可以继续搭配TEXT函数,公式写作=TEXT(MID(A2,7,6),"0000-00"),单元格就会显示成1990-05的样式。

表格操作有一个高频错误,很多人把身份证号码列设置成数值格式,长数字会自动变成科学计数法,末尾几位数字丢失,后续MID函数提取出来的出生年月直接出错,你需要提前把该列单元格格式设置为文本,再录入身份证号码。

方法适用场景输出形式
MID函数少量数据,基础表格用户纯数字字符串
MID+TEXT组合需要规范年月展示格式YYYY-MM文本
PowerQuery拆分列大批量身份证数据批量处理可拆分成年、月独立列

PowerQuery适合成百上千条数据批量提取,导入身份证列之后,选择从第7位字符开始提取,单独拆分出年份与月份两列,不需要逐行下拉填充公式,适合人事、统计类批量台账。

如何从身份证号码中提取出生年月:代码与手工提取

Python处理时,身份证号本质是字符串,直接切片即可,代码写法为id_card="110101199005121234",birth_ym=id_card[6:12],Python下标从0开始计数,所以第7位字符对应的索引是6,截取到索引12之前,正好取出6位出生年月字符,运行后birth_ym的值就是199005。如果你需要增加校验,可以在切片前先判断字符串长度是否等于18,长度不符合就跳过该行,避免异常报错。

手工提取适合单条号码核对。

手工提取时,你从左往右数,数到第7位开始,连续读取6位数字,前四位就是出生年份,紧接着两位就是出生月份,例如号码320102198811234567,第7位起6位是198811,对应的出生年月就是1988年11月。

该方法的适用边界是,仅能读取号码上印刷的编码,无法校验这个出生年月是否和本人真实户籍登记信息一致,如果身份证号码本身录入错误,提取出来的年月也会是错误值,同时公民身份号码属于个人敏感信息,批量提取处理时需要遵守个人信息保护相关要求,不得随意对外传播导出的出生年月数据。

如果遇到15位旧身份证,提取逻辑要单独调整,从第7位开始取6位,得到YYMMDD格式,年份只有两位,默认按照20世纪补成19YY,例如850612,补全后出生年月为1985年06月,这个补全规则存在局限,跨世纪的号码无法仅凭两位年份准确判断世纪,这类旧证建议优先更换为18位二代证后再做提取。