读取GS1二维码,获取不带校验位字符的数据

Read GS1 QRcode and get the data without the check digit character

我正在尝试读取 GS1 格式的二维码。当我用值 0100145074001 为标识符 (01) 构建 QR 码时,我的 QRCode 生成器在末尾添加了一个校验位 9。所以结果是:

01001450740019

现在,我尝试在我的 Java 程序中解析此 QRCode。我找到了这个库 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 的值?

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

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

在我的例子中,GTIN 有 AI 01 并且校验位是根据这个 simple algorithm:

计算的

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

result.getString(ApplicationIdentifier.CONTAINED_GTIN)

returns 01001450740019.

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

String myCode = result.getString(ApplicationIdentifier.CONTAINED_GTIN).substring(0, 13);

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

System.out.println("CONTAINED_GTIN= " + result.getString(ApplicationIdentifier.CONTAINED_GTIN).substring(0, 13));

您可以只读第一个字符,因为特定格式源自您的 QRCode 生成器。

使用result.getString(ApplicationIdentifier.CONTAINED_GTIN).substring(0, 13); 应该可以解决问题

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

CheckDigit.validate(ApplicationIdentifier.CONTAINED_GTIN)

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