使用 Java 扫描条形码后得到额外的字母
Getting extra letters after scanning the barcode using Java
我创建了一个生成条形码的应用程序。
这是我创建条形码的代码:
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
.
生成条形码的截图如下:
这个场景有什么问题?
Code 39 可以选择使用校验位,称为 Code 39 mod 43.
Code 39 mod 43 - Wikipedia
比如ZXing的Code39Reader有一个选项叫ASSUME_CODE_39_CHECK_DIGIT(一个mode,条码数据没有校验位也生成校验位并通知?)。
Class Code39Reader
public Result decodeRow(int rowNumber,
BitArray row,
Map<DecodeHintType,?> hints)
throws NotFoundException,
ChecksumException,
FormatException
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.
您的程序是否在生成条形码时添加了校验位(但没有以人类可读的字符打印),或者读取条形码的程序是否补充了校验位并generated/notified它。可能有两种可能性之一。
顺便说一句,最后一个 K
在默认无校验字符 mode 中使用 Honeywell Xenon 1900 读取所显示的条码时收到通知,因此可能已添加校验位在程序中生成条形码时。会很高
通过遵循 对 ASSUME_CODE_39_CHECK_DIGIT
代码的回答,该代码使用校验位。因此,我分析了我的代码,发现 code39.encode("B00009", 1);
传递了第二个参数 1,这就是它在条码编号末尾生成额外字母 K
的原因。
因此,我将 1 更改为 0,现在它可以正确扫描条形码了。
String outputStr = code39.encode("B00009", 0);
我创建了一个生成条形码的应用程序。
这是我创建条形码的代码:
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
.
生成条形码的截图如下:
这个场景有什么问题?
Code 39 可以选择使用校验位,称为 Code 39 mod 43.
Code 39 mod 43 - Wikipedia
比如ZXing的Code39Reader有一个选项叫ASSUME_CODE_39_CHECK_DIGIT(一个mode,条码数据没有校验位也生成校验位并通知?)。
Class Code39Reader
public Result decodeRow(int rowNumber, BitArray row, Map<DecodeHintType,?> hints) throws NotFoundException, ChecksumException, FormatException
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.
您的程序是否在生成条形码时添加了校验位(但没有以人类可读的字符打印),或者读取条形码的程序是否补充了校验位并generated/notified它。可能有两种可能性之一。
顺便说一句,最后一个 K
在默认无校验字符 mode 中使用 Honeywell Xenon 1900 读取所显示的条码时收到通知,因此可能已添加校验位在程序中生成条形码时。会很高
通过遵循 ASSUME_CODE_39_CHECK_DIGIT
代码的回答,该代码使用校验位。因此,我分析了我的代码,发现 code39.encode("B00009", 1);
传递了第二个参数 1,这就是它在条码编号末尾生成额外字母 K
的原因。
因此,我将 1 更改为 0,现在它可以正确扫描条形码了。
String outputStr = code39.encode("B00009", 0);