技术博客
身份证归属地查询:返回字段全解(retData / address / birthday / sex 与系统级结构)

身份证归属地查询:返回字段全解(retData / address / birthday / sex 与系统级结构)

作者: 万维易源
2026-08-27
身份证归属地查询返回字段retDataaddressJSON解析
# 身份证归属地查询:返回字段全解(retData / address / birthday / sex 与系统级结构) > 接口:身份证归属地查询(apiCode=25,接入点 25-3) · 免费 · 返回格式 JSON · 适用人群:所有开发者 · 阅读时间:约 4 分钟 ## TL;DR - 返回分两层:系统级(`showapi_res_code` 等)包裹业务级(`showapi_res_body`)。 - 你要的数据在 `showapi_res_body.retData`:`address`(籍贯)、`birthday`(生日)、`sex`(性别)。 - 成功判断看 `showapi_res_code == 0` 且 `showapi_res_body.ret_code == 0`。 ## Why 读懂返回结构是正确解析、正确判错的前提。本接口返回采用 ShowAPI 通用封装:所有业务数据都包在 `showapi_res_body` 里,系统级字段在外层。分清这两层,才能写出稳健的解析代码。 ## What **请求要点**(回顾):仅需 `id` 参数、AppKey 鉴权、POST/GET、JSON 返回。详见 [5 分钟接入](https://www.showapi.com/guides/idcard-attribution-quickstart-25)。 ## How ### 系统级字段(外层) | 字段 | 类型 | 说明 | |------|------|------| | `showapi_res_code` | int | 系统级状态码,`0` 表示成功 | | `showapi_res_error` | String | 系统级错误信息,成功时为空 | | `showapi_res_id` | String | 本次请求会话 ID(文档示例字段名实际为 `showapi_res_id`,用于排查) | | `showapi_res_body` | Object | 业务数据容器,下文结构均在此对象内 | > 注:文档返回示例中会话字段写作 `showapi_res_id`(如 `ce135f6739294c63be0c021b76b6fbff`),解析时按文档示例键名取值。 ### 业务级字段(`showapi_res_body` 内) | 字段 | 类型 | 说明 | |------|------|------| | `errNum` | int | 业务错误号,`0` 表示正常 | | `ret_code` | int | 业务返回码,`0` 表示成功 | | `retMsg` | String | 业务消息,成功为 `success` | | `retData` | Object | 身份证数据结构,含以下三项 | ### 业务数据 `retData` | 字段 | 类型 | 示例 | 说明 | |------|------|------|------| | `address` | String | `四川省达州市通川区` | 籍贯(文档说明文亦称"签发地/归属地",即身份证前 6 位对应的户口登记地区) | | `birthday` | String | `1983-04-25` | 出生日期,格式 `YYYY-MM-DD` | | `sex` | String | `F` | 性别,`M`=男、`F`=女 | > **文档一致性提示**:字段表中 `retData` 标注为 `Object[]`(数组),但官方返回示例里 `retData` 是**单个 Object**(含 `address/birthday/sex`)。单号查询接入点实际返回单个对象,本文按示例(单对象)描述;若你后续见到数组形态,以实际返回为准。 ## 返回示例 ```json { "showapi_res_code": 0, "showapi_res_error": "", "showapi_res_id": "ce135f6739294c63be0c021b76b6fbff", "showapi_res_body": { "errNum": 0, "retData": { "address": "四川省达州市通川区", "birthday": "1983-04-25", "sex": "F" }, "retMsg": "success", "ret_code": 0 } } ``` **解析要点(Python)** ```python body = data["showapi_res_body"] if body["ret_code"] == 0: rd = body["retData"] print(rd["address"], rd["birthday"], rd["sex"]) ``` ## 进阶 / 边界 - **判成功要两层都看**:外层 `showapi_res_code == 0` 且内层 `ret_code == 0` 才算业务成功。 - **错误码枚举**:本接口文档**未列出专用错误码枚举**(仅给出成功态),常见错误处理见 [错误处理与排错](https://www.showapi.com/guides/idcard-attribution-errors-25)。 - **`address` 是"籍贯"而非实时定位**:它由号码前 6 位行政区码反查得到,与持证人当前所在地无关。 ## FAQ **Q:外层 showapi_res_code 和内层 ret_code 有什么区别?** 外层 `showapi_res_code` 是 ShowAPI 平台级状态(如鉴权、网关);内层 `ret_code` 是本接口业务逻辑状态。两者都为 0 才是完整成功。 **Q:retData 到底是对象还是数组?** 单号查询接入点返回单个对象。文档字段表误标为数组,请以返回示例(单对象)为准。 **Q:sex 只有 M/F 两种吗?** 文档示例与说明中 `sex` 取值为 `M`(男) / `F`(女)。 **Q:birthday 的格式固定吗?** 示例为 `YYYY-MM-DD`(如 `1983-04-25`),按字符串原样使用即可。 **Q:showapi_res_id 有什么用?** 它是本次请求的会话标识,排查问题或向官方反馈时可作为依据提供。 ## 相关能力 / 下一步阅读 - [身份证归属地查询:5 分钟接入,从注册到拿到第一条籍贯/生日/性别](https://www.showapi.com/guides/idcard-attribution-quickstart-25) - [身份证归属地查询:错误处理与排错(showapi_res_code / ret_code 通用处理)](https://www.showapi.com/guides/idcard-attribution-errors-25) - [身份证归属地查询:用户注册实名核验的集成设计(前端 + 后端)](https://www.showapi.com/guides/idcard-attribution-verify-25) - **本系列共 12 篇**:查看[身份证归属地查询指南总目录](https://www.showapi.com/guides/idcard-attribution-guides-25)