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

Вступление

Шаг 1

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

Шаг 2

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

Требуется ли контрольная сумма в спецификации штрих-кода Code128?Оригинальный штрих-код

Требуется ли контрольная сумма в спецификации штрих-кода Code128?Сгенерированный штрих-код

Шаг 3

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

Требуется ли контрольная сумма в спецификации штрих-кода Code128?Исходный расшифрованный штрих-код

Требуется ли контрольная сумма в спецификации штрих-кода Code128?Сгенерированный расшифрованный штрих-код

Уточнения

  1. Как говорит Википедия (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.

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

Вопросов

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

Мои мысли

  • Я думаю, что спецификация GS1-128 может быть причиной FNC1 в начале штрих-кода
  • FNC1 в конце может быть просто контрольной суммой. Это просто совпадение.
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
3 267
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Исходное изображение - это 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 точек). Ширина каждой точки масштабируется вместе с графикой. Лучше не игнорировать "нули" каждого символа в конце. Они значительны.

Другие вопросы по теме