集装箱号验证器
粘一个集装箱号,核对它的 ISO 6346 校验位,并看清每一段的含义 —— 箱主、设备类别、流水号。
🔒 你的数据不会离开浏览器。
那张把所有实现都绊倒的字母取值表
ISO 6346 给每个字母分配一个数,从 A = 10 起算 —— 但它跳过每一个 11 的倍数。所以 B 是 12,不是 11。L 是 23,不是 22。V 是 34,不是 33。把这张表写成简单的字母顺序,做出来的校验器就会把好端端的箱号判为无效 —— 这是手写 ISO 6346 代码里最常见的一个 bug。
| 字母 | 取值 | |
|---|---|---|
A | 10 | |
B | 12 | 不是 11 —— 11 被跳过 |
K | 21 | |
L | 23 | 不是 22 —— 22 被跳过 |
U | 32 | |
V | 34 | 不是 33 —— 33 被跳过 |
Z | 38 |
权重是第二个坑:每一位要乘的是 2 的幂(1、2、4、8 … 512),而不是它的位序号。
第四个字母不属于箱主代码
| 类别 | 含义 |
|---|---|
U | 货运集装箱 |
J | 可拆卸的集装箱附属设备 |
Z | 挂车或底盘车 |
这一位上出现别的字母,就说明这串号不是一个合法的集装箱标识 —— 而一个打错的号码借此看着挺像回事,常见得出人意料。
标准自身的一处已知缺陷
这套校验算法可能算出余数 10,而标准把它记作 0。这意味着某些以 0 结尾的箱号天然是二义的:两个不同的流水号可以共用同一个校验位。这是 ISO 6346 的缺陷,不是哪一个箱子的问题;当你的号码正好落在这上面时,本工具会指出来,而不是假装这道校验是决定性的。
本工具执行的全部检查(共 6 条规则)
BOX-F01不是 11 位字符
集装箱箱号正好 11 位:3 位箱主代码、1 位设备类别代码、6 位序号,再加 1 位校验位。
修复: 从箱门或箱侧读。印刷形式里的空格(ABCU 123456 7)是排版,不属于号码本身。
来源: ISO 6346(集装箱的代码、识别与标记)。算法在我们的回归测试里用真实集装箱号验证过。
BOX-F02字符形状不对
前四位必须是字母,后七位必须是数字。不符合这个形状的号码不是 ISO 6346 集装箱箱号。
修复: 检查字母段与数字段里 0/O、1/I 的混淆。
来源: ISO 6346(集装箱的代码、识别与标记)。算法在我们的回归测试里用真实集装箱号验证过。
BOX-F03设备类别代码非法
第四个字母是设备类别代码,只能是 U、J 或 Z:U 表示货运集装箱,J 表示可拆卸的集装箱附属设备,Z 表示挂车或底盘车。
修复: 标准海运集装箱这一位是 U。
来源: ISO 6346(集装箱的代码、识别与标记)。算法在我们的回归测试里用真实集装箱号验证过。
BOX-C01校验位不匹配
第十一位是由前十位算出来的校验位,字母取值跳过 11 的倍数,权重是 2 的幂。对不上意味着号码读错了或者是编的。
修复: 对着集装箱本身重读一遍;校验位单独印在一个方框里。
来源: ISO 6346(集装箱的代码、识别与标记)。算法在我们的回归测试里用真实集装箱号验证过。
BOX-C02校验位正好落在标准的已知歧义点上
这套算法可能算出余数 10,而 ISO 6346 把它写成 0。于是有些校验位为 0 的箱号是有歧义的 —— 这是标准本身的已知弱点,不是这个箱号有什么问题。
来源: ISO 6346(集装箱的代码、识别与标记)。算法在我们的回归测试里用真实集装箱号验证过。
BOX-S01箱主代码
前三个字母是箱主前缀,在国际集装箱局(BIC)注册。把前缀解析成公司需要 BIC 注册库,本工具没有内置 —— 所以只报出代码,不猜箱主名称。
来源: ISO 6346(集装箱的代码、识别与标记)。算法在我们的回归测试里用真实集装箱号验证过。
关于这些规则。 每一条都有编号、严重级别和通俗解释。每个来源链接都已登记在案,并对线上页面实际复验过,而不是凭印象写上去的. 规则如何编写、测试与保持更新 →