命名系统(6):交通与地理——从机场三字码到车架号
交通和地理的编码有个共同要求: 终身唯一 。船可以改名换旗,车可以过户转籍,人可以在城市间迁徙,但底层的号不能变。变一次,海关、保险、事故记录就全断了。
命名系统(6):交通与地理——从机场三字码到车架号
交通和地理的编码有个共同要求:终身唯一。船可以改名换旗,车可以过户转籍,人可以在城市间迁徙,但底层的号不能变。变一次,海关、保险、事故记录就全断了。
一、航空:两套机场码,各管一段
同一个机场,有两个名字:
| 类型 | 例子 | 位数 | 用途 |
|---|---|---|---|
| IATA 代码 | PEK | 3 | 售票、行李牌、旅客界面 |
| ICAO 代码 | ZBAA | 4 | 飞行计划、航管、气象 |
ICAO 的结构
ZBAA 拆开:Z 是中国所在区域,B 是华北,AA 是机场序号。这套编码有明确的地理逻辑,管制员看一眼就知道大概方位。
IATA 的混乱
IATA 三字码来自城市名、机场名或历史习惯:
PEK来自 Peking(北京的旧拼法)PVG来自浦东CAN来自 Canton(广州旧称)
问题是:三字码只有 26³ = 17576 个组合,已经接近耗尽。新机场只能拿到不直观的码,或者用数字(如 SJJ 之类)。而且机场改名、城市更名后,码通常不改——改码的成本太高,全球订座系统、行李分拣、登机牌模板全要动。
机型和航班
- 机型:
A320neo(厂商名)、B737-8(波音命名)、B38M(ICAO 机型代码) - 航班号:
CA1234,两字码 + 1-4 位数字 - 航司代码:IATA 两字
CA,ICAO 三字CCA,呼号AIR CHINA
同一架飞机,在机票上、雷达屏上、维修记录里,用的是三套不同的标识。
二、航运:船号是终身的
IMO 号
格式 IMO + 7 位数字,例如 IMO 9074729。船舶报废前终身不变,换船名、换船旗、换船东都不改。
校验算法:前 6 位从右往左乘 2、3、4、5、6、7,求和取个位。
def imo_check(first6: str) -> int:
total = sum(int(c) * (i + 2) for i, c in enumerate(reversed(first6)))
return total % 10
print(imo_check("907472")) # 9
2×2 + 7×3 + 4×4 + 7×5 + 0×6 + 9×7 = 139,139 % 10 = 9。
MMSI 与呼号
- MMSI:9 位,AIS 系统用的身份码。首位表示类别:
2渔船、3岸台、4/5救生设备、7便携 VHF、8小艇、9导航设备 - 呼号:国籍前缀 + 字母,如
B开头是中国 - 船名:可以改,没有全球唯一性,只能作为辅助识别
集装箱号
ISO 6346 规定:4 个字母 + 6 位数字 + 1 位校验。
MSCU 123456 7
│││└─ 类别标识(U 集装箱、J 可拆卸设备、Z 拖车底盘)
│└─── 所有者代码
└──── 所有者代码
校验稍复杂:字母先映射成数字(A=10、B=12……跳过 11 的倍数),每位乘 2 的幂次,求和后对 11 取模,余数 10 记作 0。
港口
UN/LOCODE 五位:CN SHA = 中国上海。前两位国别,后三位地点。全球港口、机场、内陆口岸共用这套码。
三、汽车:17 位 VIN
VIN 是消费领域最常见的唯一编码,17 位分三段:
LSV AM4 1 8 5 E 2 100001
│││ │││ │ │ │ │ │ └────── 生产序号
│││ │││ │ │ │ │ └──────── 工厂代码
│││ │││ │ │ │ └────────── 年份码(E = 2014)
│││ │││ │ │ └──────────── 校验位(北美强制)
│││ │││ │ └────────────── 车型/车身/发动机
│││ └┴┴─────────────────── 车辆特征
└┴┴─────────────────────── WMI:国别 + 厂商
规则要点:
- 字母
I、O、Q禁用,避免与数字 1、0 混淆 - 第 10 位年份码 30 年一循环:
2020=L、2021=M、2022=N、2023=P、2024=R、2025=S、2026=T - 中国生产的车 WMI 以
L开头 - 第 9 位校验位只在北美强制,其他地区可能填
Z或任意字符
VIN 的价值在于:它把「哪国、哪厂、什么车型、哪年、第几台」全部编进了 17 个字符,且全球不重复。二手车、保险、召回的整个链条都靠它串联。
四、铁路与公路:字母即等级
车次
G 高铁、D 动车、Z 直达、T 特快、K 快速、纯数字普快。字母本身就是等级声明,旅客不用查表。
公路编号
| 前缀 | 含义 | 编号规则 |
|---|---|---|
| G | 国道 | 放射线 1 位(G1 京哈、G2 京沪);纵线 2 位奇数(G15 沈海);横线 2 位偶数(G10 绥满) |
| S | 省道 | 各省自定 |
| X | 县道 | 四位 |
| Y | 乡道 | 四位 |
| C | 村道 | 四位 |
方向也编进了数字:奇数是纵向,偶数是横向。看编号就知道这条路大体是南北走向还是东西走向。
五、地理:所有实名系统的底座
国家码
ISO 3166-1 给了三套:
| 类型 | 例子 | 用途 |
|---|---|---|
| alpha-2 | CN | 域名、国籍、最常用 |
| alpha-3 | CHN | 体育赛事、货币、避免歧义 |
| numeric | 156 | 机器处理,与语言无关 |
ISO 3166-2 再往下到省级:CN-BJ、US-CA。
中国行政区划代码
6 位,身份证前 6 位就是它:
44 01 06
│ │ └─ 县级(天河区)
│ └──── 市级(广州市)
└─────── 省级(广东省)
- 11 北京、31 上海、44 广东、51 四川
- 省直辖县级行政区用
90占位 - 乡镇级已扩展到 9 位
这套码是统计、税务、邮政、社保、公安共用的底座。改一次区划,全国系统都要跟着改——所以撤县设区这类调整,IT 成本远比想象中高。
邮政编码与地名
- 中国邮编 6 位,前两位对应省份和邮区
- 地名有 GEOnet(美国 NGA 维护)、海底地形有 SCUFN(IHO 命名委员会)
- 地址体系是最难标准化的:中国是「省市区 + 道路 + 门牌 + 楼栋 + 房号」,欧美是「门牌 + 街道 + 城市 + 邮编」,日本是「都道府县 + 市区町村 + 町名 + 番地 + 号」
跨国地址库永远做不完美,因为地址本身不是为机器设计的。
六、这一行的启示
- 终身唯一是硬要求:IMO、VIN、行政区划码,都设计成「对象在,号就在」。
- 码位会耗尽:IATA 三字码就是前车之鉴,设计时要预留扩展位。
- 地理编码是所有实名系统的地基:身份证、税务登记、统计普查,全都建在行政区划码上。
- 可读性和唯一性通常只能选一个:船名可读但不唯一,IMO 号唯一但不可读,所以两者并存。
最后一篇进书房:书号、作品号、色号,那些管着「文化产品」的命名体系。