中国大陆身份证号码的出生日期采用固定位置编码。18位号码使用第7位到第14位,格式为YYYYMMDD;15位号码使用第7位到第12位,格式为YYMMDD,补上19后也可得到YYYYMMDD。需要拿到出生年月日时,按位数读取对应字段,再转换成日期格式即可。结果稳定、规则清晰,适合做表单填充、资料展示、统计归类等场景。
号码字段对应关系
| 号码位数 | 出生日期字段位置 | 原始格式 | 转换后格式 | 处理说明 |
|---|---|---|---|---|
| 18位 | 第7位至第14位 | YYYYMMDD | YYYY-MM-DD | 四位年份,直接读取对应8位 |
| 15位 | 第7位至第12位 | YYMMDD | YYYY-MM-DD | 两位年份前补19 |
提取流程
- 先看号码位数:看到18位时进入第7位至第14位读取区;看到15位时进入第7位至第12位读取区。
- 读取年份部分:18位取第7至10位;15位取第7至8位并补19。
- 读取月份部分:18位取第11至12位;15位取第9至10位。
- 读取日期部分:18位取第13至14位;15位取第11至12位。
- 拼接标准日期:把年份、月份、日期按YYYY-MM-DD顺序组合。
18位号码示例
| 字段位置 | 示例内容 | 含义 |
|---|---|---|
| 第7至10位 | 1985 | 出生年份 |
| 第11至12位 | 06 | 出生月份 |
| 第13至14位 | 10 | 出生日期 |
| 合并结果 | 19850610 | 原始日期串 |
| 标准格式 | 1985-06-10 | 可展示日期 |
15位号码示例
| 字段位置 | 示例内容 | 转换方式 | 标准格式 |
|---|---|---|---|
| 第7至8位 | 85 | 补19,得到1985 | 1985 |
| 第9至10位 | 06 | 直接作为月份 | 06 |
| 第11至12位 | 10 | 直接作为日期 | 10 |
| 合并结果 | 19850610 | 按YYYYMMDD读取 | 1985-06-10 |
编程处理思路
| 场景 | 推荐方式 | 关键逻辑 |
|---|---|---|
| 批量表单处理 | 按字符串位置截取 | 18位取第7至14位,15位取第7至12位并补19 |
| 数据清洗脚本 | 先判断位数再拼接 | 年份、月份、日期分段读取 |
| 页面展示 | 转成YYYY-MM-DD | 用短横线连接年月日 |
示例代码:
```python
def get_birth_date(id_no):
birth = ""
if len(id_no) == 18:
birth = id_no[6:14]
if len(id_no) == 15:
birth = "19" + id_no[6:12]
year = birth[0:4]
month = birth[4:6]
day = birth[6:8]
return f"{year}-{month}-{day}"
```
结果说明
按上述方式读取号码字段后,输出日期即可用于信息展示、资料核对、分类统计等合法合规场景。18位号码直接取第7至14位,15位号码取第7至12位并补19,这样能得到标准出生年月日。
【常见问题】
问题1:如何在身份证号中提取出生日期?
回答1:在18位身份证号中提取出生日期时,读取第7位至第14位;在15位身份证号中提取出生日期时,读取第7位至第12位并补19,随后按YYYY-MM-DD组合。
问题2:18位身份证号中提取出生日期取哪几位?
回答2:在18位身份证号中提取出生日期,直接读取第7位至第14位,这8位对应YYYYMMDD,例如第7至10位是年份,第11至12位是月份,第13至14位是日期。
问题3:15位身份证号中提取出生日期怎么补年份?
回答3:在15位身份证号中提取出生日期时,第7位至第12位对应YYMMDD,两位年份前补19,再和月份、日期组合成YYYYMMDD。
问题4:如何在身份证号中提取出生日期并转成标准格式?
回答4:在身份证号中提取出生日期后,把YYYYMMDD分成4位年份、2位月份、2位日期,再用短横线连接,转成YYYY-MM-DD格式。
免责声明:本内容用于说明身份证号码字段位置和出生日期提取方法,展示示例采用通用格式,实际业务请按规范与系统字段配置处理。


