行政区划是各种业务的基础数据:用户地址、配送范围、本地推荐、统计分析。但行政区划本身不是静态的——撤县设市、合并区划、新设国家级新区每年都有。理解数据来源、编码逻辑、变更机制,才能维护好这套数据。
中国行政层级
中央
├─ 省级(34)
│ ├─ 省(23)
│ ├─ 自治区(5)
│ ├─ 直辖市(4)
│ └─ 特别行政区(2)
│
├─ 地级(约 333)
│ ├─ 地级市
│ ├─ 自治州
│ ├─ 地区
│ └─ 盟(仅内蒙古)
│
├─ 县级(约 2843)
│ ├─ 市辖区
│ ├─ 县级市
│ ├─ 县
│ ├─ 自治县
│ ├─ 旗(仅内蒙古)
│ └─ 林区(仅湖北神农架等)
│
├─ 乡级(约 38000+)
│ ├─ 镇
│ ├─ 乡
│ ├─ 街道
│ └─ 民族乡
│
└─ 村级(约 660000+)
├─ 村委会
└─ 居委会
数字会随调整变化,浮动几个到几十个/年。
6 位行政代码的结构
国家标准 GB/T 2260《中华人民共和国行政区划代码》:
PP CC DD
│ │ └─ 县/区(00 = 该市本级)
│ └─ 地级市(00 = 该省本级)
└─ 省级
例子:
| 代码 | 含义 |
|---|---|
| 110000 | 北京市(省级本级) |
| 110100 | 北京市辖区(地级合集) |
| 110108 | 北京市海淀区 |
| 130000 | 河北省 |
| 130100 | 河北省石家庄市 |
| 130102 | 河北省石家庄市长安区 |
| 110200 | (历史)北京市辖县 — 已废止 |
省级编码不连续:
| 代码 | 省级 |
|---|---|
| 11 | 北京 |
| 12 | 天津 |
| 13 | 河北 |
| 14 | 山西 |
| 15 | 内蒙古 |
| 21 | 辽宁 |
| 22 | 吉林 |
| 23 | 黑龙江 |
| 31 | 上海 |
| 32 | 江苏 |
| … | … |
| 65 | 新疆 |
| 71 | 台湾 |
| 81 | 香港 |
| 82 | 澳门 |
跳号的位置(16-20、24-30 等)是历史预留——预留给可能的省级行政区调整。
行政代码会变,老数据库要做映射
很多人以为行政代码不变——完全错误。区划调整时旧代码废弃,新代码启用:
| 调整 | 老代码 | 新代码 |
|---|---|---|
| 北京撤销宣武区并入西城区(2010) | 110104 宣武区 | 并入 110102 西城区 |
| 北京原崇文区并入东城区(2010) | 110103 崇文区 | 并入 110101 东城区 |
| 杭州临安撤市设区(2017) | 330185 临安市 | 改 330112 临安区 |
| 雄安新区设立(2017) | — | 130600 系列新设 |
| 重庆撤销万县市改万州区(多年前) | 多个老代码 | 500101 等 |
实务后果:
- 老订单 / 老用户档案存的是历史代码,匹配不上新数据
- 必须维护一份”老→新”映射表
- 民政部发布的调整公告里有迁移指南
本工具内置近年主要变更映射,老代码查询能正常返回当前对应区划。
邮编、行政代码、电话区号互不对应
三套编码各按各的逻辑:
| 编码 | 来源 | 设计目的 | 与行政区关系 |
|---|---|---|---|
| 行政区代码(6 位) | 民政部 | 行政管辖 | 严格对应 |
| 邮编(6 位) | 邮政总局 | 投递路线 | 松散——一个区可能多邮编、一个邮编可能跨区 |
| 电话区号(3-4 位) | 工信部 | 通信交换 | 不严格对应——历史上有跨地区共用区号 |
邮编结构:
PP RR PT
│ │ └─ 投递点
│ └─ 投递区域
└─ 省 / 直辖市
例子:
100080= 北京(10)海淀区(00)中关村片区(80)200001= 上海(20)市中心(00)外滩附近(01)
邮编的”100086”和”100089”可能在同一行政区(海淀区)但不同投递片区。所以:
- 用邮编判断行政区 → 不准
- 用邮编估算”是哪个城市” → 比较准(前 2 位)
- 邮编填错(甚至填 000000)大多能寄到——投递员主要看地址文字
电话区号:
区号长度 = 4 位(除了北京 010、上海 021、天津 022、广州 020、深圳 0755 等大城市用 3-4 位混合)
省会一般是省份代号 + 1,如 020 广州、023 重庆、025 南京、027 武汉。三位区号留给少数大城市。
港澳台数据的特殊性
港澳台行政区划在国务院发布的”行政区划调整公告”里通常不出现——这些地区有各自的行政体系:
- 香港:18 个区议会选区
- 澳门:7 个堂区 + 4 个分区
- 台湾:6 个直辖市 + 13 县 + 3 县级市,下分乡镇市区
中国大陆的行政区划编码体系把它们编为:
- 71 = 台湾
- 81 = 香港特别行政区
- 82 = 澳门特别行政区
但下级区划编码各家口径不一——民政部发的简册只有省级编码,统计局有地级编码,第三方数据则按各地实际行政划分填。
数据库设计建议:港澳台单独存表,不混入大陆行政区划,避免变更管理混乱。
数据怎么获取
| 来源 | 内容 | 更新频率 | 格式 |
|---|---|---|---|
| 民政部《行政区划简册》 | 县级以上 | 年度 | |
| 国家统计局”统计用区划代码” | 五级(含街道乡镇村) | 年度 | 网页 / Excel |
| 国务院公报”国函” | 具体调整批复 | 实时 | |
| 高德 / 百度地图 API | 区划 + 边界 | 实时但滞后 | JSON |
| 开源 GitHub 项目 | 整理后 JSON / SQL | 半年到一年 | 数据库可导入 |
自己维护的关键点:
- 保留时间维度:每条记录加
valid_from、valid_to,方便历史查询 - 维护 alias 表:旧代码 → 新代码的映射
- 支持模糊匹配:用户填”中关村”要能匹配到海淀区
- 拼音 / 简称索引:BJ、京、北京 都要能匹配北京
行政区划与法律意义
很多业务规则与行政区划绑定:
- 税收:增值税地区返还按行政区
- 社保 / 公积金:按缴存地行政区
- 车牌限号:按城市行政区(北京限”京 A-京 V”全市)
- 房产限购:按区甚至街道(深圳分核心区与非核心区)
- 学区房:按街道甚至学校片区
- 法律管辖:刑事 / 民事案件按户籍所在或居住地的法院管辖
行政区划调整意味着这些业务规则可能跟着变——比如撤县设区后,原”农村户籍”可能变”非农户籍”,土地征收政策、宅基地政策都会变。
一句话总结
行政区划是动态数据——民政部年度更新、6 位代码会废弃、邮编 ≠ 行政区、港澳台单独管,老数据库必须维护历史映射。