2

我正在尝试读取GS1格式的 QRCode。(01)当我为具有该值的标识符构建 QR 码时0100145074001,我的 QRCode 生成器最后会添加一个校验位9。所以结果是:

01001450740019

现在,我尝试在我的 Java 程序中解析这个二维码。我找到了这个库gs1Utils并且当我执行以下命令时:

String brc = "0101001450740019";
ElementStrings.ParseResult result = ElementStrings.parse(brc); 
System.out.println("CONTAINED_GTIN= " + result.getString(ApplicationIdentifier.CONTAINED_GTIN));

我明白了CONTAINED_GTIN= 01001450740019。但是,我只想读取0100145074001而不是校验位。

我不知道这个库是不是运行不好,还是我误解了它的GS1工作原理。我的问题是:如何在Java没有校验位的情况下获取 GS1 QRcode 的值?

4

3 回答 3

3

我使用的库(gs1Utils)运行良好。

我最大的误解是,GS1条码原型最后在所有应用程序标识符 (AI) 中添加了校验位。但事实并非如此!

在我的例子中,GTIN 有 AI 01,校验位是根据这个简单的算法计算出来的:

在此处输入图像描述

所以代码0100145074001有校验位9和:

result.getString(ApplicationIdentifier.CONTAINED_GTIN)

返回01001450740019

我所有的代码都有固定长度(13)。所以,我的问题的答案是阅读前 13 个字符......

String myCode = result.getString(ApplicationIdentifier.CONTAINED_GTIN).substring(0, 13);
于 2019-11-18T12:20:57.250 回答
1

您可以直接读取第一个字符,因为特定格式来自您的 QRCode 生成器。

使用result.getString(ApplicationIdentifier.CONTAINED_GTIN).substring(0, 13); 应该做的伎俩

但是,校验位可用于验证检查。值得添加一个:

CheckDigit.validate(ApplicationIdentifier.CONTAINED_GTIN)

在某处排队,以避免将来出现输入问题;)

于 2019-11-20T17:14:27.733 回答
0

您可以使用String.substring方法从给定的字符串中获取所需的字符

System.out.println("CONTAINED_GTIN= " + result.getString(ApplicationIdentifier.CONTAINED_GTIN).substring(0, 13));
于 2019-11-18T12:39:12.040 回答