Я попытался прочитать штрих-код (см. Изображение ниже) с помощью мобильного сканера штрих-кода и онлайн-инструментов и получил его: данные - 30925018, алгоритм визуализации - Код128C
Затем я попытался сгенерировать штрих-код из заданных данных и получил следующие изображения:
Оригинальный штрих-код
Сгенерированный штрих-код
Как видите, изображения разные. Итак, я решил расшифровать его сам. Вот результат:
Исходный расшифрованный штрих-код
Сгенерированный расшифрованный штрих-код
Как говорит Википедия (https://en.wikipedia.org/wiki/Code_128):
The check digit is a weighted modulo-103 checksum. It is calculated by summing the start code 'value' to the products of each symbol's 'value' multiplied by its position in the barcode string.
Я попытался сгенерировать штрих-код из предоставленных данных с помощью библиотек Java в моем приложении и онлайн-инструментов. Оба дали мне одинаковый результат.





Исходное изображение - это GS1-128 (ранее EAN-128), представляющее следующие данные в формате идентификатора приложения GS1:
(30)925018
Значение Кол-во элементов: 925018.
- I think GS1-128 specification can be cause of FNC1 at the beginning of the barcode
Верный. По определению Code 128, начинающийся с символа FNC1 в первой позиции, является GS1-128 и, следовательно, должен содержать данные, закодированные в соответствии со спецификацией GS1.
Предыстория, представленная в следующем ответе, описывает принципы, лежащие в основе этого кодирования: https://stackoverflow.com/a/31760872/2568535
- FNC1 at the end can be just a checksum.
Контрольная сумма является обязательной в спецификации Code 128 (и любых производных стандартах приложений) и обычно не отображается в любом удобочитаемом тексте. В сгенерированном вами символе (не GS1-128, поскольку нет «FNC1 в первом») было бы просто совпадением, если бы символ контрольной суммы совпал с FNC1, хотя, как заметил Брайан Андерсон, это не так.
Исходный штрих-код имел в начале FNC1. Ни один из штрих-кодов не имеет FNC1 на конце. Как заявляет Терри Бертон, FNC1 в начале указывает, что штрих-код используется для GS1, и данные для этого кода обычно обозначаются (30) 925018. Контрольная сумма, вычисляемая для первого штрих-кода, представляет собой число 09 или символ Code 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 или символ Code 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 точек). Ширина каждой точки масштабируется вместе с графикой. Лучше не игнорировать "нули" каждого символа в конце. Они значительны.