java - 使用Java扫描条形码后获取额外的字母

标签 java barcode barcode-scanner scanning

我已经创建了一个生成条形码的应用程序。

这是我创建条形码的代码:

Code39 code39 = new Code39();
String outputStr = code39.encode("B00009", 1);
//String humanTextStr=code39.getHumanText();
lblBarcode.setText(outputStr);
lblBarcode.setFont(new java.awt.Font("CCode39_S3_Trial",java.awt.Font.PLAIN,14));

使用此 java 库 ConnectCodeBarcodeFontLibrary.jar

为了扫描条形码,我使用了 QRbot为我提供此信息的应用程序 - 末尾的额外字母 B00009K 而不是此 B00009

生成的条形码截图如下:

enter image description here

这个场景的问题是什么?

最佳答案

Code 39 可以选择使用校验位,称为 Code 39 mod 43。
Code 39 mod 43 - Wikipedia

比如ZXing的Code39Reader有一个选项叫ASSUME_CODE_39_CHECK_DIGIT(条码数据没有校验位也生成校验位并通知的模式?)
Class Code39Reader

public Result decodeRow(int rowNumber,
                        BitArray row,
                        Map<DecodeHintType,?> hints)
                 throws NotFoundException,
                        ChecksumException,
                        FormatException

ASSUME_CODE_39_CHECK_DIGIT

public static final DecodeHintType ASSUME_CODE_39_CHECK_DIGIT
Assume Code 39 codes employ a check digit. Doesn't matter what it maps to; use Boolean.TRUE.

您的程序是否在生成条形码时添加了校验位(但没有以人类可读的字符打印),或者读取条形码的程序是否补充了校验位并生成/通知了它。可能有两种可能性之一。

顺便说一下,当霍尼韦尔 Xenon 1900 在默认无校验字符模式下读取所显示的条码时,会通知最后一个 K,因此在生成条码时可能会添加校验位在你的程序中。会很高。

关于java - 使用Java扫描条形码后获取额外的字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62825242/

相关文章:

java - 每个类都是 Java 对象的隐式子类

java - 按行 ID 降序获取结果的查询出错

java - 在背景不透明的 PDF 上创建条形码叠加层 (iText)

android - 不使用 ZXing 库的 Android 条码扫描器应用程序

android - 如何判断输入的是扫码器还是软键盘?

java - Liferay - 图片库

java - 冒泡排序比较计数始终相同

android - Zxing条码相机选项

android - 如何通过条形码获取信息?

ios - 使用未解析的标识符 'input'