一物一码编码规则设计:码段、校验、派生、换版
核心结论
编码规则是采集系统的地基:码段结构、校验位、层级派生、换版策略四件事在方案阶段定死,上线后再改等于重做。
一、码段结构
一物一码的码通常由几段拼成,常见结构:
| 段 | 含义 | 长度(示例) |
|---|---|---|
| 版本位 | 规则版本,便于换版共存 | 1 |
| 厂商/企业码 | 标识生产企业 | 4-6 |
| 产品码 | SKU 或登记证号 | 6-10 |
| 批次 | 生产批号或日期 | 6-8 |
| 流水号 | 批内序号(不重复) | 6-10 |
| 校验位 | 防错读 | 1-2 |
字段长度要一次定死:长度可变是后期所有麻烦的根源。
二、校验位:最便宜的防错
加一位校验,能挡掉大部分误读与手输错误。常见做法是模 10 或模 43 校验,规则要在《数据字典》里写清。
没有校验位的码,错一位也能入库,等到对账才发现。
三、层级派生:独立生成还是上级派生
| 方式 | 优点 | 缺点 |
|---|---|---|
| 独立生成 | 互不影响,生成简单 | 关系要靠扫描建立,工位多 |
| 上级派生 | 可由上级码算出下级范围 | 规则复杂,改版成本高 |
多数场景用独立生成 + 扫描关联;只有“箱内码不可扫、只能靠推算”的场景才用派生。
四、换版策略
规则一定会变(监管、客户、码制升级)。设计时留两样东西:
- 版本位:新旧规则能共存,不用一次性切换
- 配置化:字段长度、校验算法做成配置项,不是写死在代码里
五、一份《数据字典》该写什么
- 码段结构表(字段、长度、取值规则)
- 校验算法与示例
- 层级关系定义(哪级对哪级、数量规则)
- 上传字段映射(平台字段 ← 本地字段)
- 异常码与处理约定
两页纸,够用。没有这份文件的项目,后期对接一定反复。
七、码段设计的三个常见错误
错误一:长度可变
为了“以后扩展”留了变长字段,结果所有解析都要做兼容,越往后越乱。长度一次定死,扩展用版本位。
错误二:把批次写进流水号
批次与流水混在一段,换批时流水无法归零,统计和追溯都要绕。
错误三:没有版本位
规则一改,新旧码无法共存,只能一次性切换,切换期必然停线。
三个错误的共同点:都是“为了省事”造成的,代价是后期无法演进。
八、一串码的完整拆解
假设某产品的码为 1-37001-010203-260315-000123-7,拆开是这样:
| 段 | 取值 | 含义 |
|---|---|---|
| 版本位 | 1 | 规则第 1 版 |
| 企业码 | 37001 | 生产企业标识 |
| 产品码 | 010203 | SKU 内部编号 |
| 批次 | 260315 | 2026 年 3 月 15 日生产 |
| 流水号 | 000123 | 该批第 123 件 |
| 校验位 | 7 | 前五段算出的校验值 |
这串码的价值在于可读、可查、可扩展:人能看懂批次,系统能定位产品,换版只改版本位。
九、校验算法示例
常见做法是加权求和取模:把前五段按位乘权重(如 3、1 交替),求和后对 10 取余,用 10 减余数得到校验位。
示例:数字串求和后余数为 3,则校验位为 7。规则简单到能在打印机、PDA、服务端各实现一遍,且结果一致——这就是校验位的意义:任何一端算错,立即能被发现。
算法要写进《数据字典》,附三个正例与三个反例,供双方联调时对拍。
验证说明:本文的判断项均可现场核对(看系统架构、看交付清单、看合同条款)。文中涉及的行业数据为公开资料整理,具体数字以最新公开口径为准;我们不在此评价任何具体服务商。
常见问题
码段长度能改吗?
上线前能改,上线后基本不能——已赋码的产品不能重贴,已上传的数据不能批量改。
校验位一定要加吗?
建议加。成本几乎为零,能挡掉大部分误读。
独立生成和派生怎么选?
能扫就用独立生成;不能扫(如箱内不可见)才用派生。
换版要不要停机?
有版本位就不用:新旧规则并存,按订单切换。