Внешнего сходства недостаточно
Обычный Code 128 может кодировать данные в пределах возможностей своей символики. GS1-128 использует эту основу в системе GS1, добавляя специальный признак и правила организации данных. Поэтому произвольная строка, нарисованная генератором Code 128, не становится GS1-128 только после добавления соответствующей подписи. Для обмена с логистической системой важно, что декодер получает и как программа понимает поля, а не насколько похожи полосы на соседней этикетке.
GS1 описывает использование FNC1 после стартового символа для отличия GS1-128. Кроме того, данные организуются с помощью прикладных идентификаторов, или AI. Эти обозначения сообщают, какое значение следует дальше и как его читать. Синтаксис нельзя собирать на глаз, особенно когда встречаются поля переменной длины и разделители. Если система назначения требует GS1, используйте соответствующий энкодер и проверенную структуру данных.
Обычный внутренний номер
Для внутреннего штампа склада или этикетки с инвентарным обозначением иногда нужен обычный Code 128. Например, учебная строка BOX-00427 содержит буквенную часть, дефис и цифры. Она может быть полезным идентификатором внутри согласованной базы, но сама не описывает тип товара, срок годности или логистическую единицу по правилам GS1. Значение определяется внешней системой учёта, которая связывает строку с записью.
Такой номер следует сохранять без незаметной транслитерации и изменения регистра. Если библиотека не поддерживает введённые символы, генератор должен честно сообщить об ограничении. Заменить кириллицу похожей латиницей и показать «готово» означает изменить данные. Визуально буквы могут быть почти одинаковы, а для базы это разные строки. Поэтому полезно выводить рядом точный закодированный текст и проверять его после декодирования изображения.
Контрольный символ и контрольная цифра
Code 128 имеет собственный механизм контроля символа, который обрабатывает энкодер. Это не та же операция, что вычисление последней цифры GTIN. Если внутри Code 128 передаётся номер, содержащий свою контрольную цифру, существуют два уровня: корректность данных и корректность их штрихового представления. Нельзя удалить последнюю цифру исходного номера на том основании, что «генератор уже добавляет проверку». Он решает другую задачу.
Размер символа зависит от содержимого и выбора наборов кодирования. Последовательности цифр могут кодироваться компактнее при подходящем наборе, чем произвольный текст. Поэтому сравнивать длину полос только по количеству видимых знаков некорректно. Пусть библиотека выполняет штатное кодирование; дизайнер контролирует итоговые размеры, свободные поля и читаемость. Принудительное сжатие картинки для размещения в узкую рамку может ухудшить результат.
Что проверять при интеграции
Сначала согласуйте ожидаемую строку со стороны принимающего программного обеспечения. Затем сгенерируйте код и считайте его подходящим сканером. Сравните полученные байты и разделители, а не только видимую надпись. Для GS1 важно проверить, что система распознаёт структуру и корректно раскладывает значения по полям. Успешный звуковой сигнал сканера подтверждает лишь факт чтения, но не правильность последующей интерпретации.
- Явно разделяйте обычный Code 128 и GS1-128 в интерфейсе.
- Используйте штатную библиотеку кодирования и проверяйте её результат.
- Не меняйте введённые символы незаметно.
- Согласуйте AI и разделители для GS1-режима.
- Проверяйте данные в конечной системе учёта, а не только картинку на экране.
Источники и проверка
Учебные примеры объясняют принцип. Материал, технологические значения и критерии приёмки согласуйте с исполнителем для своего заказа.

