Содержание
GS1 DataMatrix: найдите границу поля переменной длины
Сканер читает код, но принимающая программа объединяет партию со следующим полем. Проверьте не только цифры и буквы, но и границу элементов данных. Этот разбор относится к GS1 element string syntax; его нельзя автоматически переносить на GS1 Digital Link URI или внутренний код поставщика.
Установите правило для каждого AI
AI, идентификатор применения GS1, задаёт смысл и формат следующего поля. В руководстве GS1 для 2D-кодов, разделы 4.5.1 и 4.6.1, выделены элементы с предопределённой длиной и без неё. Для последних требуется разделитель FNC1 перед следующим элементом; если такой элемент стоит последним в строке, разделитель после него не нужен.
Не подменяйте это правило предположением «любое поле фиксированной длины можно завершить без разделителя». Проверяйте именно классификацию AI в актуальных спецификациях GS1. Максимально допустимая длина поля также не означает, что каждый фактический экземпляр обязан её занимать.
Сохраните цепочку одного образца
Возьмите реальную этикетку и ожидаемый состав её данных у ответственного за формирование кода. Для каждого AI запишите назначение, формат, правило длины и следующее поле. Полный код и серийные данные храните в согласованном защищённом месте.
Сравнивать нужно три этапа: содержимое, которое должен был сформировать генератор этикетки, результат декодирования и данные на входе программы. Если видна только строка в обычном текстовом поле, этого недостаточно для вывода об отсутствии служебного символа.
В руководстве GS1 знак ^ используется как условное обозначение непечатаемого Group Separator, hex 1D, или символа FNC1 в соответствующем контексте. Это не инструкция печатать буквальный ^ в коде. Различайте символику внутри штрихкода и представление разделителя в переданных данных.
Найдите первое расхождение
| Наблюдение | Следующий шаг |
|---|---|
| Разделитель не предусмотрен между соответствующими полями в исходных данных | Проверить генератор и правила AI |
| В декодированных данных граница есть, на входе программы её нет | Проверить настройки вывода, драйвер и промежуточную обработку |
| Граница доходит, но программа объединяет поля | Проверить парсер и поддерживаемый синтаксис |
| Поле стоит последним и разделителя после него нет | Сначала проверить допустимость такого окончания по правилу AI |
Таблица задаёт порядок диагностики, а не настройку для любого устройства. Для Zebra отдельный материал показывает, как получить исходные байты через DataWedge. Он помогает собрать входные данные; правильность структуры GS1 проверяется отдельно.
Подтвердите разбор полей
После согласованного исправления повторите чтение того же образца. Сравните каждое разобранное поле с ожидаемым значением. Дополнительно проверьте доступный корректный образец с другим фактическим размером переменного поля: решение не должно зависеть от случайного числа символов одной партии.
Не вставляйте разделитель в общую строку по найденным цифрам предполагаемого следующего AI: такие цифры могут быть частью значения. Завершайте проверку, когда место потери или неверного разбора объяснено, а полученные поля воспроизводимы. Этот результат не подтверждает юридический статус маркировочного кода.
Комментарии 0