看 electronic_product_code 这类字段时,最容易误以为它只是把商品条码转成另一串码。源码说明这远远不够。
主要参考:
enterprise/stock_barcode/models/stock_move_line.pyenterprise/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
评论区