身份证归属地查询背后的 18 位编码规则:为何能反推籍贯/生日/性别
# 身份证归属地查询背后的 18 位编码规则:为何能反推籍贯/生日/性别
> 接口:身份证归属地查询(apiCode=25,接入点 25-3) · 免费 · JSON · 适用人群:中高级开发者、对原理好奇的工程师 · 阅读时间:约 7 分钟
## TL;DR
- 18 位身份证号自带结构:6 位地区码 + 8 位生日 + 3 位顺序码 + 1 位校验码。
- 接口返回的籍贯/生日/性别,本质就是从这串数字里"反查/截取"出来的。
- 理解编码规则,能帮你判断接口能力边界,也能自己做本地校验(见 [调用前自检](https://www.showapi.com/guides/idcard-attribution-input-check-25))。
## Why
知道"号码本身编码了哪些信息",你就明白接口为什么只要一个号就能返回籍贯/生日/性别,也知道它的能力边界在哪——它不能告诉你"这个人现在住哪""这号是否真实存在"。原理清楚了,集成时才不会误用。
> 说明:以下为国家标准的通用知识(GB 11643),用于解释接口能力的来源,并非 ShowAPI 的私有功能描述。
## What
| 区段 | 位数 | 含义 |
|------|------|------|
| 第 1–6 位 | 6 | 地址码(行政区划代码,对应户口登记地区) |
| 第 7–14 位 | 8 | 出生日期码 `YYYYMMDD` |
| 第 15–17 位 | 3 | 顺序码;其中第 17 位奇数=男、偶数=女 |
| 第 18 位 | 1 | 校验码(0–9 或 X),按 ISO 7064 MOD 11-2 计算 |
## How
### 步骤 1:从号码直接切片(不调接口也能得到)
```python
def parse_idcard(id_number: str) -> dict:
return {
"region_code": id_number[:6], # 地址码 → 对应籍贯
"birthday": f"{id_number[6:10]}-{id_number[10:12]}-{id_number[12:14]}",
"sex": "男" if int(id_number[16]) % 2 == 1 else "女", # 第17位奇男偶女
}
# 示例:parse_idcard("522423199105047376")
# → {'region_code': '522423', 'birthday': '1991-05-04', 'sex': '男'}
```
### 步骤 2:地址码 → 籍贯
地址码(前 6 位)是国标行政区划代码,接口返回的 `address`(如"四川省达州市通川区")即由这 6 位反查得到。注意:它反映**户口登记地**,不是持证人当前所在地。
### 步骤 3:校验位(MOD 11-2)
校验码用于验证号码形式合法性,算法见 [调用前自检](https://www.showapi.com/guides/idcard-attribution-input-check-25)。
## 返回示例对照
接口返回的 `address/birthday/sex`,与上面切片得到的结果在"编码层面"应当一致——这也是 [实名核验](https://www.showapi.com/guides/idcard-attribution-verify-25) 与 [风控识别](https://www.showapi.com/guides/idcard-attribution-fraud-25) 能做交叉比对的依据。
## 进阶 / 边界
- **接口是"反查"而非"查证"**:它把号码编码信息转成可读的籍贯串/生日/性别,不连接公安库验证真伪。
- **地址码会变**:行政区划调整会导致同一地区码含义变化,接口籍贯以官方反查表为准;自己维护代码表有滞后风险。
- **顺序码第 17 位**:仅表示同地区同生日内的顺序与性别,不蕴含其他个人信息。
## FAQ
**Q:接口的籍贯和我在本地切片得到的地区码是一回事吗?**
本质同源:都来自前 6 位地址码。接口把它反查成完整籍贯串(如"四川省达州市通川区"),更可读。
**Q:为什么第 17 位能判断男女?**
顺序码中第 17 位奇数分配给男性、偶数分配给女性,这是国家标准规定。
**Q:接口能告诉我这个人现在住哪吗?**
不能。address 是户口登记地(籍贯),与当前所在地无关。
**Q:自己切片就能拿到,为什么还要调接口?**
切片只能得到"编码层信息",接口的 `address` 是官方反查的完整地区串,且可作为业务里的第三方佐证来源;此外接口可作统一数据源,避免各自实现偏差。
**Q:校验位算出来不对,是不是身份证假的?**
校验位不合法只说明"号码不符合编码规则",不代表一定伪造;合法也不代表真实存在。真伪需权威渠道。
## 相关能力 / 下一步阅读
- [身份证归属地查询:调用前如何先做身份证号格式与校验位合法性自检](https://www.showapi.com/guides/idcard-attribution-input-check-25)
- [身份证归属地查询:用户注册实名核验的集成设计(前端 + 后端)](https://www.showapi.com/guides/idcard-attribution-verify-25)
- [身份证归属地查询:风控场景如何用"籍贯+生日+性别"识别伪造/篡改身份证](https://www.showapi.com/guides/idcard-attribution-fraud-25)
- **本系列共 12 篇**:查看[身份证归属地查询指南总目录](https://www.showapi.com/guides/idcard-attribution-guides-25)