Считайте QR-код GS1 и получите данные без символа контрольной цифры
Я пытаюсь прочитать QR-код в GS1
формат. Когда я построил QR-код для идентификатора(01)
со значением 0100145074001
, мой генератор QRCode добавляет в конце контрольную цифру 9
. Итак, результат:
01001450740019
Теперь я пытаюсь разобрать этот QR-код в своей программе на 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
работает. Мой вопрос: как я могу получить значение QR-кода GS1 вJava
без контрольной цифры?
3 ответа
Вы можете просто прочитать первые символы, поскольку конкретное форматирование исходит от вашего генератора QRCode.
С помощью result.getString(ApplicationIdentifier.CONTAINED_GTIN).substring(0, 13);
Должен сделать трюк
Однако контрольную цифру можно использовать для проверки достоверности. Стоит добавить:
CheckDigit.validate(ApplicationIdentifier.CONTAINED_GTIN)
строка где-нибудь, чтобы избежать проблем с вводом в будущем;)
Библиотека, которую я использовал (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);
Вы можете использовать String.substring
метод для получения требуемого символа из данной строки
System.out.println("CONTAINED_GTIN= " + result.getString(ApplicationIdentifier.CONTAINED_GTIN).substring(0, 13));