我有一个解析GS1条形码的程序(与斑马扫描仪),它工作得很好,至少我认为它是OK的…直到我看到一个盒子里有2个GS1条形码…一个"linear"一个数据矩阵(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规范。
编辑:the "correct"版本应该是:(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——比;附加产品标识
我试着扫描图像,但结果和你的一样。
所以问题是分隔符不在那里。这对您来说是一个问题,并且没有办法知道序列号在没有分隔符的情况下结束在哪里。
很抱歉我的英语不好这个问题的原因是组分隔符是不可读的字符,例如,如果你专注于文本框和按capslock按钮或shift按钮没有出现在文本框中相同的为了解决这个问题公共l为整数并将以下代码放入keyup event
中If textbox1.textlenght = l then
My.combuter.keybord.sendkeys({enter})
L= textbox1.textlenght
End if
此代码将在每个垃圾后面留出空间(因为每个垃圾与出租车锁按钮结合),并在生长空间中留出五个空间
将原始输入存储在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
}
}
}