我有一个解析 GS1 条形码的程序(使用 Zebra 扫描仪),效果很好,至少我认为它没问题...... 直到我遇到一个盒子,里面有 2 个 GS1 条形码……一个“线性”条形码和一个数据矩阵 (UDI)。对于线性来说,它工作得很好,我成功地得到了GTIN和序列号。但数据矩阵不同。由于某种原因,它的内容比线性代码长一点,它有一些生产日期和最后的其他内容。
这是线性代码:(01)00380652555852(17)260221(21)25146965079(30)1 这是数据矩阵:(01)00380652555852(17)260221(21)2514696507911210222240SA60AT225
我在解析序列号时遇到问题 - 25146965079。 GS1 中的序列号长度为 1-20 个字符。这个有11个,但是我怎样才能让它在9个字符之后停止呢?我怎么知道连续剧到此结束? 我尝试将每个字符转换为 UDI,但似乎没有特殊的分隔字符或任何东西..所以我真的不知道该怎么做。有人有什么想法吗?
这是代码,如果有人想尝试任何东西https://prnt.sc/1x2sw8l
这些代码/产品直接来自制造商,所以我想代码应该不会有任何问题......
如果您使用设计用于解释 GS1结构的扫描仪验证条形码,您会发现生成的条形码实际上是不正确的。
序列号后面缺少 GS ,如果不是最后一个,这些代码必须结束可变长度字段。这是在GS1通用规范第7.8.5.2节
中指定的如果没有这个分隔符,你就无法知道序列在哪里结束 - 或者,解释代码的机器也无法知道。
告诉制造商他们需要研究GS1规格。
编辑:“正确”版本是:
(01)00380652555852(17)260221(21)25146965079<GS>(11)210222(240)SA60AT225
括号和组分隔符
<GS>
并未按字面意思包含在代码中。
由于您有两个可变长度标识符(21)和(240),所以无论您做什么,都需要一个 GS。唯一的选择是为序列号添加一些填充,然后就可以不用分隔符了。
根据GS1文档(第156页及以后)
所有字段均正确
(01)00380652555852 --> GTIN
(17)260221 --> 有效期
(21)25146965079 --> 序列号
(11)210222 --> 生产日期
(240)SA60AT225 --> 附加产品标识
我尝试扫描图像,但结果与你的相同。
所以问题是分隔符不存在。这对你来说是个问题,没有分隔符就无法知道序列号在哪里结束。
抱歉我的英语不好 此问题的原因是组分隔符是不可读的字符,例如,如果您专注于文本框并按大写锁定按钮或 Shift 按钮,则文本框中不会出现与 gs 中相同的内容 为了解决这个问题 公共 l 作为整数 并将以下代码放入 keyup 事件中
If textbox1.textlenght = l then
My.combuter.keybord.sendkeys({enter})
L= textbox1.textlenght
End if
此代码将在每个垃圾之后提供空间(因为每个垃圾与 cabslock 按钮相结合),并在群组空间中提供五个空间
将原始输入存储在 KeyPress 事件中,然后读取字母或数字的字符。
if (e.KeyChar != 13)
{
int asci = Convert.ToInt32(e.KeyChar);
if (asci > 31 && asci < 128) // numeric and chars only
rawbcode += Convert.ToChar((int)(e.KeyChar & 0xffff));
else
{
if (asci == 29)
{
rawbcode += "<GS>"; // GS1 Seperator
}
}
}