# 地址录入与校验方案:用行政区划查询规范用户填地址
> 接口 / 接入点:行政区划查询(apiCode 1149)· 区域查询 1149-1 / 子区域查询 1149-2 · 免费服务
> 请求方式:POST / GET · 返回格式:JSON · 适用人群:电商 / 物流 / 政务表单系统开发者 · 阅读时间:约 7 分钟
## 核心要点
- 用「省市区三级联动 + 区号 / 邮编自动带出」,把用户自由填地址变成「选 + 补全」,大幅减少脏数据。
- 行政区划查询返回 `areaCode`(区号)、`zipCode`(邮编),选中区域即可自动回填。
- 免费、数据跟随民政部,比维护静态字典更省心。
## Why:地址脏数据有多贵
电商 / 物流最怕「省写错、区号邮编对不上、乡镇名五花八门」。自由输入框里用户手抖一个字,后端分拣就可能失败、快递就可能送错。用行政区划查询做联动选择,用户只管点,区号邮编系统自动带,地址结构天然规范。
## What:方案构成
| 能力 | 来自字段 | 作用 |
|------|---------|------|
| 三级联动选择 | 1149-1 + 1149-2(见[三级联动篇](https://www.showapi.com/guides/region-query-cascade-1149)) | 规范省 / 市 / 区 |
| 区号自动带出 | `areaCode` | 校验电话区号、展示 |
| 邮编自动带出 | `zipCode` | 物流 / 邮政场景直接填 |
| 全称展示 | `wholeName` | 如「中国,广东省,深圳市」 |
## How:选中后自动带出区号邮编
### Python
```python
import requests
def pick_district(parent_city_id):
r = requests.get("https://route.showapi.com/1149-2",
params={"appKey": "YOUR_APPKEY", "parentId": parent_city_id, "page": "1"},
timeout=10)
return r.json()["showapi_res_body"]["data"]
# 用户选了「深圳市」后,拉下属区并带出区号/邮编
for d in pick_district("440300000000"):
print(d["areaName"], "区号", d["areaCode"], "邮编", d["zipCode"], "全称", d["wholeName"])
```
### 前端(选中即回填)
```javascript
sel.onchange = async () => {
const body = await fetch(`https://route.showapi.com/1149-2?appKey=YOUR_APPKEY&parentId=${sel.value}`)
.then(r => r.json()).then(d => d.showapi_res_body);
const o = body.data.find(x => x.id === subSel.value) || body.data[0];
document.getElementById("areaCode").value = o.areaCode;
document.getElementById("zipCode").value = o.zipCode;
};
```
### cURL
```bash
curl -X POST "https://route.showapi.com/1149-2?appKey=YOUR_APPKEY" \
-H "content-type: application/x-www-form-urlencoded" \
-d "parentId=440300000000&page=1"
```
## 返回示例(区带区号邮编)
```json
{ "showapi_res_body": { "ret_code": "0", "data": [
{"areaName": "福田区", "areaCode": "0755", "zipCode": "518000", "wholeName": "中国,广东省,深圳市,福田区", "id": "440304000000"}
] } }
```
## 进阶 / 边界
- **联动选择优先于自由输入**:把区号 / 邮编设为「选中自动带出、只读」,避免用户手填错配。
- **乡镇 / 村一级**:需要更细时回到区域查询设 `level=4/5` 或用子区域查询继续下钻。
- **数据更新**:每月同步民政部,逢区划调整(撤县设区等)自动跟上,无需你手动改字典。
## FAQ
**Q:区号和邮编能直接信接口的吗?**
接口跟随民政部数据返回,可作为权威来源;展示 / 回填时直接采用即可。
**Q:用户手填的地址怎么校验?**
建议交互改为「三级联动 + 自动带出」,从源头规范;若必须校验自由文本,可用区域查询按名称反查比对。
**Q:乡镇一级也有区号邮编吗?**
子区域查询返回 `areaCode` / `zipCode`,乡镇级数据视区域而定,缺失时做空值兜底。
**Q:免费接口能做生产地址校验吗?**
可以。免费不影响使用;生产建议走后端代理调用(见三级联动篇),AppKey 不暴露在前端。
## 相关能力 / 下一步阅读
- [行政区划查询实战:省市区三级联动选择器前端实现](https://www.showapi.com/guides/region-query-cascade-1149)
- [免费接口也要缓存:行政区划查询低频更新下的缓存设计](https://www.showapi.com/guides/region-query-cache-1149)
- **本系列共 11 篇**:查看[行政区划查询指南总目录](https://www.showapi.com/guides/region-query-guides-1149)