QRkoder

Структурированное присоединение (Structured Append)

Структурированное присоединение — режим QR и Data Matrix, позволяющий разбить длинные данные на несколько символов (до 16) и автоматически «склеить» их при чтении.

Определение структурированного присоединения

Структурированное присоединение (Structured Append) — специальный режим двумерных штрих-кодов, при котором один логический массив данных разбивается на несколько физических символов, а сканер собирает их обратно в единое сообщение. Режим описан в стандарте ISO/IEC 18004 для QR-кода и в ISO/IEC 16022 для Data Matrix. В QR он появился ещё в оригинальной спецификации Denso Wave 1994 года.

Смысл прост: чем больше данных, тем крупнее и плотнее становится QR-код, и в какой-то момент напечатать его на маленьком носителе (наклейке, детали, бирке) уже невозможно. Structured Append разрешает поделить сообщение на от 2 до 16 символов, каждый из которых печатается отдельно и читается меньшей камерой. Результат идентичен одному большому коду, но физически удобнее.

Как работает Structured Append

Каждый символ в последовательности несёт служебный заголовок из трёх параметров. Во-первых, индекс — порядковый номер кода в цепочке (например, 3-й из 5). Во-вторых, итого — общее количество символов в последовательности. Сканер по этим двум числам понимает, сколько кодов нужно прочитать и в каком порядке их соединить, даже если пользователь считывает их вразнобой.

Третий параметр — parity-байт (контрольная сумма). Он вычисляется как XOR всех байтов исходного, ещё не разбитого сообщения и записывается одинаковым во все символы цепочки. Это защита от смешивания: если пользователь случайно отсканирует код из чужой последовательности, parity не совпадёт, и декодер отвергнет ошибочный символ. В QR под индекс и «итого» отводится по 4 бита (отсюда лимит 16), а под parity — 8 бит.

Связанные концепции

  • Data Matrix — второй матричный формат с поддержкой Structured Append (до 16 символов).
  • Reed-Solomon — коррекция ошибок внутри каждого отдельного символа цепочки.
  • Aztec Code / PDF417 — родственные 2D-коды со своими механизмами склейки и большой ёмкостью.

На практике Structured Append нужен реже, чем кажется: обычно проще увеличить версию QR или снизить уровень коррекции. Но для маркировки миниатюрных деталей, гравировки на металле и промышленной трассировки режим незаменим. Сгенерировать одиночный код можно в конструкторе QR-кодов.

Частые вопросы

Сколько кодов можно объединить в одну последовательность?

Стандарт ISO/IEC 18004 разрешает Structured Append из 2–16 символов. Ограничение в 16 задано размером служебного поля: под индекс кода и общее количество отводится по 4 бита, а 4 бита кодируют значения от 0 до 15, то есть максимум 16 позиций. Тот же лимит действует и для Data Matrix по ISO/IEC 16022.

Зачем нужен parity-байт?

Parity-байт — это XOR всех байтов исходного сообщения до разбиения, записанный одинаковым во все символы цепочки. Он защищает от склейки чужих кодов: если отсканировать символ из другой последовательности, контрольная сумма не совпадёт, и декодер отвергнет ошибочный код. Так гарантируется, что собранное сообщение принадлежит одной цепочке.

Обязательно ли сканировать коды по порядку?

Нет. Каждый символ несёт свой индекс и общее количество, поэтому сканер сам расставляет фрагменты в правильном порядке независимо от того, в какой последовательности их считали. Однако декодер не выдаст итоговое сообщение, пока не соберёт все символы цепочки — пропущенный код заблокирует сборку.

Все ли сканеры поддерживают Structured Append?

Режим поддерживают промышленные считыватели и многие библиотеки декодирования (ZXing, libdmtx), но большинство встроенных камер смартфонов Structured Append не собирают — они читают каждый код как отдельный. Поэтому для потребительских сценариев (ссылка, визитка, Wi-Fi) режим не используют, оставляя его промышленной маркировке.

Чем Structured Append отличается от Reed-Solomon?

Это разные уровни. Reed-Solomon — коррекция ошибок внутри одного символа: восстанавливает повреждённые модули. Structured Append работает уровнем выше — делит логическое сообщение на несколько отдельных кодов и склеивает их. Оба механизма сочетаются: каждый символ цепочки внутри защищён своим блоком Reed-Solomon.

Создавайте QR-коды бесплатно

Динамические QR-коды с аналитикой, дизайном и без ограничений по сканированиям.

Начать бесплатно