Требуется ли контрольная сумма в спецификации штрих-кода Code128? - PullRequest
0 голосов
/ 01 ноября 2018

Введение

Шаг 1

Я попытался прочитать штрих-код (см. Изображение ниже) с помощью мобильного считывателя штрих-кода и онлайн-инструментов, и получил его: данные - 30925018 , алгоритм визуализации - Code128C

Шаг 2

Затем я попытался сгенерировать штрих-код из заданных данных и получил следующие изображения:

Original barcode Оригинальный штрих-код

Generated barcode Сгенерированный штрих-код

Шаг 3

Как видите, изображения разные. Итак, я решил расшифровать его самостоятельно. Вот результат:

Original decrypted barcode Оригинальный расшифрованный штрих-код

Generated decrypted barcode Сгенерированный расшифрованный штрих-код

Сlarifications

  1. Как говорит Википедия (https://en.wikipedia.org/wiki/Code_128):

    Контрольная цифра - это взвешенная контрольная сумма по модулю 103. Он рассчитывается путем суммирования начального кода «значение» с произведениями каждого «значения» символа, умноженного на его позицию в строке штрих-кода.

  2. Я пытался сгенерировать штрих-код из данных с помощью библиотек Java в моем приложении и онлайн-инструментов. Оба дали мне один и тот же результат.

Вопросы

  1. Почему онлайн-инструменты генерируют штрих-коды без контрольной суммы, но с FNC1 в конце?
  2. Почему в начале штрих-кода есть FNC1?
  3. Требуется ли контрольная сумма согласно спецификации Code128?

Мои мысли

  • Я думаю, что GS1-128 спецификация может быть причиной FNC1 в начале штрих-кода
  • FNC1 в конце может быть просто контрольной суммой. Это просто совпадение.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Оригинальный штрих-код имел FNC1 в начале. Ни один штрих-код не имеет FNC1 в конце. Как заявляет Терри Бертон, FNC1 в начале указывает, что штрих-код используется для GS1, и данные для этого кода обычно обозначаются (30) 925018. Контрольной суммой, рассчитанной для первого штрих-кода, является число 09 или код 128 символа ')' для правой пары.

105
102
30*2 = 60
92*3 = 276
50*4 = 200
18*5 = 90
(105 + 102 + 60 + 276 + 200 + 90) = 833
833 % 103 = 09 (')')

Второй контрольной суммой для штрих-кода без FNC1 является число 26 или код 128 символов ':' для двоеточия.

105
30
92*2 = 184
50*3 = 150
18*4 = 72
105 + 30 + 184 + 150 + 72 = 541
541 % 103 = 26 (':')

Возможно ли иметь контрольную сумму, равную символу FNC1? Да. Контрольная сумма является результатом оператора по модулю взвешенной суммы элементов в штрих-коде и числа 103, поэтому любое число до 102 (FNC1) может быть результатом контрольной суммы. Поскольку стандарт Code 128 не придает особого значения символу в позиции контрольной суммы (последний символ перед STOP), это не имеет значения.

Когда вы пытаетесь расшифровать штрих-код Code 128, имейте в виду, что не существует такого понятия, как межсимвольный интервал. Символ будет точно такой же ширины (11 "точек"), если это не символ остановки (в этом случае 13 "точек"). Ширина каждой точки масштабируется с графикой. Вам лучше не игнорировать конечные "нули" каждого персонажа. Они значимы.

enter image description here

0 голосов
/ 01 ноября 2018

Исходное изображение - GS1-128 (ранее EAN-128), представляющее следующие данные в формате идентификатора приложения GS1:

(30)925018

Значение: Количество предметов: 925018 .

  • Я думаю, что спецификация GS1-128 может быть причиной FNC1 в начале штрих-кода

Правильно. По определению Код 128, начинающийся с символа FNC1 в первой позиции, является GS1-128 и поэтому должен содержать данные, закодированные в соответствии со спецификацией GS1.

Фон, приведенный в следующем ответе, описывает принципы, лежащие в основе этой кодировки: https://stackoverflow.com/a/31760872/2568535

  • FNC1 в конце может быть просто контрольной суммой.

Контрольная сумма является обязательной в спецификации Code 128 (и любых производных стандартов приложений) и обычно не отображается в любом читаемом человеком тексте. В вашем сгенерированном символе (не GS1-128, поскольку вначале нет «FNC1») было бы просто совпадением, если бы символ контрольной суммы совпадал с FNC1, хотя, как отметил Брайан Андерсон, это не так.

...