Получение лишних букв после сканирования штрих-кода с помощью 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.

Вот скриншот сгенерированного штрих-кода:

введите здесь описание изображения

В чем проблема в этом сценарии, кто-нибудь сталкивался с этой проблемой? Пожалуйста, помогите мне!


person 5377037    schedule 09.07.2020    source источник


Ответы (2)


Code 39 имеет возможность использования контрольной цифры и называется Code 39 mod 43.
Code 39 мод 43 — Википедия

Например, у 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
Предположим, что коды Code 39 используют контрольную цифру. Неважно, на что он сопоставляется; используйте логическое значение.ИСТИНА.

Добавляла ли ваша программа контрольную цифру при создании штрих-кода (но не печатала его удобочитаемыми символами), или программа, которая считывала штрих-код, дополняла контрольную цифру и генерировала/уведомляла об этом. Может быть одна из двух возможностей.

Кстати, последний K был уведомлен, когда представленный штрих-код был прочитан с помощью Honeywell Xenon 1900 в режиме без контрольных символов по умолчанию, поэтому при создании штрих-кода в вашей программе могла быть добавлена ​​контрольная цифра. Будет высоким.

person kunif    schedule 12.07.2020
comment
Вы помогли мне...! - person 5377037; 13.07.2020

Следуя @kunif' ответ ASSUME_CODE_39_CHECK_DIGIT кода, в котором говорится, что он использует контрольную цифру. Итак, я проанализировал свой код и обнаружил, что code39.encode("B00009", 1); передает второй параметр 1, поэтому он генерирует дополнительную букву K в конце номера штрих-кода.

Итак, я изменил 1 на 0, и теперь он правильно сканирует штрих-код.

String outputStr = code39.encode("B00009", 0);
person 5377037    schedule 12.07.2020