2. 批次标识体系:全局唯一ID设计、批次号编码规范、条形码/二维码与RFID映射

批次标识体系是跨系统追溯链路的“数字指纹”。在分布式制造与供应链环境中,一个批次从原料入库、半成品加工、成品出库到终端销售,可能经过数十个异构系统。若标识体系不统一,谱系查询将退化为低效的模糊匹配甚至人工翻查。本章从全局唯一ID、编码规范、自动识别载体三个维度构建可落地的标识方案。

2.1 全局唯一ID设计:分布式环境下的无冲突标识

传统自增ID在跨数据库、跨数据中心场景下必然产生冲突。批次谱系要求ID在时间与空间上全局唯一,且具备一定的可排序性与可解码性。以下是三种主流方案对比:

方案 生成方式 ID长度 有序性 适用场景
UUID v4 随机128位 36字符(含连字符) 无序 离线生成、无中心节点
Snowflake 时间戳+机器ID+序列号 64位整数(19位十进制) 时间有序 高并发、分库分表
ULID 时间戳+随机数(Crockford Base32) 26字符 时间有序 兼顾可读性与排序
推荐:在批次谱系场景中,优先采用 Snowflake 或 ULID。UUID v4 虽简单但无序,会导致B+树索引频繁分裂,降低写入性能。Snowflake 的 41位毫秒时间戳可支撑69年,10位机器ID支持1024个节点,12位序列号支持每毫秒4096个ID,完全满足工厂级并发。
Snowflake 64位ID结构分解 时间戳(41位) 毫秒级,自定义纪元偏移 机器ID(10位) 数据中心+机器 序列号(12位) 自旋/随机 1位 符号 设计要点 • 时间戳:使用自定义纪元(如2020-01-01)可延长可用年限,避免使用Unix元年。 • 机器ID:通过注册中心(ZooKeeper/etcd)自动分配,确保全局唯一。 • 序列号:同一毫秒内并发请求超过4096时,可等待下一毫秒或使用备用序列池。 • 解码:从ID中可反向解析出生成时间与机器,便于故障定位与流量分析。

2.2 批次号编码规范:结构化、可解析、可扩展

批次号是业务人员与系统交互最频繁的标识。好的编码规范应满足:一眼可读(包含日期、产线、物料类别)、机器可解析(正则/子串提取)、未来可扩展(预留版本位)。

2.2.1 推荐编码结构

BATCH-{YYYYMMDD}-{工厂代码}-{产线号}-{物料类别}-{流水号}{校验码}

示例:BATCH-20250317-SH01-L03-RAW-00427X
字段 长度 说明 示例
前缀 6字符 固定“BATCH-”,区分其他单据 BATCH-
日期 8字符 生产日期,YYYYMMDD 20250317
工厂代码 4字符 字母+数字,全局唯一 SH01
产线号 3字符 字母+数字,L开头 L03
物料类别 3字符 RAW/半成品/成品 RAW
流水号 5字符 每日自增,补零 00427
校验码 1字符 Luhn或ISO 7064 X
避坑:避免在批次号中嵌入过多业务含义(如供应商名称、客户代码),业务关系应通过关联表维护。批次号一旦生成不可修改,过长的业务字段会降低扫描效率与人工录入准确率。

2.2.2 编码规范检查清单

  • 定长设计:固定总长度(如25字符),便于数据库字段设计与UI展示对齐。
  • 纯大写字母+数字:避免大小写混淆(如O与0、I与1)。
  • 校验位:最后一位使用Luhn算法或ISO 7064 Mod 37-2,防止人工录入错位。
  • 分隔符:使用连字符“-”分段,提升人工可读性;系统存储时可去除分隔符以节省空间。
  • 版本预留:在流水号后预留2位版本号,应对未来批次拆分/合并场景。

2.3 条形码/二维码与RFID映射:物理世界到数字世界的桥梁

批次标识最终需要附着在实物上。不同载体在读取距离、存储容量、抗污染能力上差异显著,需根据产线环境与追溯粒度选择。

2.3.1 载体选型对比

特性 一维条形码 二维码(QR/DataMatrix) RFID(无源UHF)
读取距离 0-0.5米 0-1米 0-10米
存储容量 20-30字符 2-3KB 128-8KB
读取方式 激光/摄像头 摄像头 射频波
抗污染能力 低(污损即失效) 中(纠错等级可调) 高(可穿透非金属)
批量读取 不支持 不支持 支持(每秒数百标签)
成本(单点) ¥0.01-0.05 ¥0.02-0.10 ¥0.5-2.0
典型场景 成品外箱、零售POS PCB板、小件、医药物流 托盘、周转箱、整车

2.3.2 映射关系设计

无论采用哪种载体,其存储内容都应指向同一个批次全局唯一ID,而非各自独立编码。映射关系如下:

物理载体(条形码/二维码/RFID) → 批次号(业务可读) → 全局唯一ID(Snowflake/ULID) → 谱系数据库
最佳实践:二维码内容建议采用 https://trace.example.com/batch/{全局唯一ID} 格式,既支持扫码直接访问追溯页面,又保留了ID的完整性。RFID标签的EPC(电子产品代码)区写入全局唯一ID的低64位,用户存储区写入完整批次号。
批次标识载体映射架构 物理载体层 条形码 / 二维码 / RFID 附着于实物或包装 存储:批次号+校验 映射解析层 扫码/RFID读取 → 解码 校验码验证 → 提取批次号 查映射表 → 获取全局ID 谱系存储层 全局唯一ID作为主键 关联批次事件、物料、质检 支持跨系统追溯查询 映射规则与注意事项 1. 一维码:直接存储批次号(25字符以内),配合Code 128编码集,密度最高。 2. 二维码:存储完整URL或JSON,包含批次号+全局ID+校验,纠错等级选M(15%)。 3. RFID:EPC区写入全局ID低64位,用户区写入批次号+生产日期+校验。 4. 映射表:维护 <批次号, 全局ID, 载体类型, 写入时间> 四元组,支持反向查询。 5. 冗余设计:二维码与RFID可同时附着,RFID用于批量出入库,二维码用于人工抽检。

2.4 标识生命周期管理

批次标识从生成到归档需经历完整生命周期,每个阶段都有对应的管理策略:

  1. 生成阶段:通过ID生成服务(Snowflake集群)预生成一批ID,缓存至本地,防止网络抖动导致断号。
  2. 绑定阶段:批次号与全局ID绑定,同时写入载体(打印条码/写入RFID),记录绑定日志。
  3. 使用阶段:各系统通过载体读取批次号,经映射服务转换为全局ID,用于谱系查询。
  4. 变更阶段:批次拆分或合并时,生成新的子批次号,通过映射表维护父子关系。
  5. 归档阶段:批次生命周期结束后,标识进入只读状态,保留映射关系用于历史追溯。
性能提示:映射表建议使用Redis Cluster缓存热点批次(最近30天活跃批次),查询延迟控制在1ms以内。历史数据存入HBase或Cassandra,按全局ID分区,支持范围扫描。