GS1 DataMatrix 生成器
用于小包装、医疗健康与零件直接标刻的二维符号。填入应用标识符,得到一个 FNC1 位置正确的符号,以及在你把它送去制版之前就该知道的毫米尺寸。
🔒 你的数据不会离开浏览器 —— 符号在本地编码。
是什么让一个 DataMatrix 成为 GS1 DataMatrix
只差一个码字:FNC1 置于首位。没有它,这个符号就只是一个承载着一串数字的普通 DataMatrix,扫描器没有任何理由把 0104006381333931 读成一个 GTIN。有了它,扫描器会输出 ]d2 码制标识符,解析系统据此知道要把数据拆成应用标识符。其余一切 —— 模块、纠错、尺寸 —— 完全相同。
静区:一个模块,而且很容易被裁掉
线性的 GS1-128 每侧需要十倍 X 尺寸的空白。DataMatrix 恰好只需要一个模块 —— 这就是它能塞进线性符号塞不下的地方的原因,也是标签模板那么经常把它裁掉的原因。这里下载的文件包含了那一个模块。
要决定的是印刷尺寸,不是模块数
一个 20×20 的符号,X 取 0.5 mm 时印出来是 11 mm 见方;同一个符号 X 取 0.396 mm 时不到 9 mm。你改动 X 尺寸时本工具会同时给出这两个数字,好让这个选择发生在订制标签之前,而不是之后。
这个编码器是怎么被验证的
它是在这里手写的,而不是从某个库里拿来的,因为本站的 core 不带任何运行时依赖。这一点只有拿证据才换得来信任,所以每次发版都跑两项独立校验:bwip-js(另一套实现)生成同样的数据,两个矩阵逐模块比对;zxing 把我们符号的栅格图解码回原始字符串。两者都跑在 pnpm test 里。
两条限制在这里明说而不是藏着:本编码器只输出 ASCII 编码方式,所以字母与数字混排的符号,可能比同时实现了 C40 的编码器大一档 —— 数据完全相同,任何扫描器都读得出。另外它只构建最大 52×52 的方形符号;数据超过这个量会被连同原因一起拒绝,而不是被截断。
本工具在画任何东西之前执行的全部检查(共 12 条规则)
单元数据串用的是与 GS1 单元数据串生成器相同的引擎 —— 以及相同的规则编号。只要其中任何一条不通过,就什么都不画:一个扫出来是错误 GTIN 的符号,比一张空白标签更糟。
LGL-001 没有可编码的内容
一张物流标签至少需要 SSCC。
LGL-002 未知的应用标识符
只有 GS1 AI 表里的 AI 才会被编码 —— 未知的 AI 会产出接收方解析不了的条码。
LGL-003 AI 重复
同一个应用标识符在一张物流标签上只能出现一次。
LGL-004 定长 AI 的长度不对
定长 AI(SSCC 为 18 位,GTIN 为 14 位)必须严格相符。
LGL-005 取值过长或为空
变长 AI 的取值不能为空,且不得超过它的上限。
LGL-006 YYMMDD 日期不合法
日期类 AI 是 YYMMDD。对最佳食用期与有效期,DD 可以是 “00” 表示月末。
LGL-007 校验位不通过
SSCC 与 GTIN 都带一位 GS1 模 10 校验位。校验位错了会在每一台接收扫描器上被拒;这里给出应有的那一位。
LGL-008 字符超出 GS1 字符集
取值必须使用 GS1 CSET 82 的字符(字母、数字,以及有限的一组标点)。
LGL-011 数据字符超过 48 个
一个 GS1-128 符号最多承载 48 个数据字符,计入 AI 与作分隔用的 FNC1(不计起始符、前导 FNC1、校验符与终止符)。
修复: 去掉一个字段 —— 通常是批次 —— 或者把数据分到两张标签上。
GS1B-001 编码出来的串解析不回原样
本工具构建的每一个串都会被原样喂回 GS1 解析器,再与输入逐元素比对。若两者不同,输出就不给出:本站自己读不回来的条码,不该让别人去读。
修复: 这属于工具自身的缺陷,请连同输入一起反馈。
来源: yaktool self-check, not a GS1 rule: it is the round-trip property that makes a generator provable rather than merely plausible.
GS1B-002 已在变长元素之后插入 FNC1 分隔符
变长元素必须以 FNC1 结束,除非它是串里最后一个。这条规则的两头在实践中都有人违反:漏掉分隔符的编码器会把两个字段黏在一起,而多加一个末尾分隔符的编码器产出的串不符合规范。
GS1B-003 已把定长 AI 移到前面
长度由前两位固定的 AI 不需要分隔符,所以把它们排在前面能去掉串中间的 FNC1 字符,让符号更短。数据本身没有变 —— 变的只是元素的顺序。
关于这些规则。 每一条都有编号、严重级别和通俗解释。每个来源链接都已登记在案,并对线上页面实际复验过,而不是凭印象写上去的. 规则如何编写、测试与保持更新 →