企业 条码开发

Odoo 企业版 EPC 生成为什么不是“把 GTIN 转成十六进制”:GS1、SGTIN 与 tracking 边界讲透

stock_barcode 里的 EPC 编码器处理的不是一个普通格式转换,而是 GS1 element string、company prefix、partition table 与 serial 规则的组合校验。

Odoo 开发 企业
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 6 阅读

electronic_product_code 这类字段时,最容易误以为它只是把商品条码转成另一串码。源码说明这远远不够。

主要参考:

  • enterprise/stock_barcode/models/stock_move_line.py
  • enterprise/stock_barcode/models/epc_encoder.py

一、EPC 不是单字段转换,而是 element string 驱动的编码过程

stock_move_line._compute_electronic_product_code() 并不会直接拿 GTIN 做十六进制转换,而是拼出类似 (01) GTIN (21) SERIAL 的 GS1 element string,再交给 EpcScheme.encode()

这意味着编码语义来自 AI 结构,而不是来自“看上去像数字的一段文本”。

二、company prefix 和 partition table 是真正的结构边界

EpcScheme.encode() 会按 company_prefix_length 去查 partition table,再把 AI 01 拆成 company prefix 与 item reference。若长度非法、AI 缺失或位数放不下,系统就直接报错。

所以 EPC 失败往往不是“编码函数坏了”,而是输入本身不满足 GS1 规则。

三、tracking 规则会改变 scheme 选择

源码里如果 tracking 值含非数字,会走 sgtin-198 + serial_string;否则更可能走 sgtin-96 + serial_integer。这说明 lot/serial 的字符集并不是附带细节,而是决定编码格式的核心输入。

四、结论

EPC 编码对开发者最有启发的一点是:它把商品、批次、GS1 AI、company prefix 和 bit-level scheme 严格绑定在一起。任何想“自己手搓一版更简单编码”的做法,最后都容易在边界上翻车。

DISCUSSION

评论区

想参与讨论?先 登录 再发表评论。
还没有评论,你可以成为第一个留言的人。