Функциональные узоры QR-кода
Функциональные узоры — служебные элементы QR-кода без пользовательских данных: поисковые узоры, сепараторы, синхродорожки и узоры выравнивания. Не маскируются и не защищены коррекцией.
Что такое функциональные узоры
Функциональные узоры (Function Patterns) — элементы QR-кода, которые нужны сканеру для того, чтобы вообще найти код в кадре и построить сетку модулей. Пользовательских данных они не несут ни бита. ISO/IEC 18004 делит символ на три части: тихая зона по периметру, функциональные узоры и область кодирования, где лежат данные, кодовые слова коррекции и служебные поля формата и версии.
К функциональным узорам стандарт относит четыре типа элементов: поисковые узоры, сепараторы, временные дорожки и узоры выравнивания. Их рисунок и координаты определяются только версией кода: два символа одной версии с разными ссылками внутри имеют идентичные узоры и различаются лишь областью данных.
Четыре типа узоров
| Узор | Размер и место | Задача |
|---|---|---|
| Поисковый узор (Finder) | 7 × 7 модулей, три угла из четырёх | Найти код в кадре, определить поворот и наклон |
| Сепаратор | Полоса в 1 модуль вокруг каждого поискового узора | Отделить поисковый узор от данных |
| Временная дорожка (Timing) | 6-я строка и 6-й столбец | Откалибровать шаг сетки, уточнить размер модуля |
| Узор выравнивания (Alignment) | 5 × 5 модулей, с версии 2 | Скомпенсировать искривление поверхности |
Количество узоров выравнивания растёт вместе с версией: в версии 1 их нет вовсе, в версиях 2–6 ровно один, в версиях 7–13 их шесть, а в самых крупных версиях 35–40 — сорок шесть. Подробности по каждому типу разобраны в отдельных терминах: поисковый узор, временная дорожка, узор выравнивания.
Сколько площади уходит на служебное
В самом маленьком коде накладные расходы огромны. Версия 1 — это 21 × 21 = 441 модуль. Из них 147 занимают три поисковых узора, 45 — сепараторы, 10 — временные дорожки, 31 — поле формата вместе с фиксированным тёмным модулем. Итого 233 модуля, больше половины символа. Под данные и коррекцию остаётся 208 модулей — ровно 26 кодовых слов по 8 бит.
С ростом версии картина переворачивается. В версии 40 матрица содержит 31 329 модулей, а данные и коррекция занимают 3706 кодовых слов — 29 648 модулей. На всё служебное остаётся около 1681 модуля, примерно 5 процентов площади. Мелкие коды «неэффективны» именно поэтому: служебная обвязка у них та же, а полезной площади в разы меньше.
Почему их нельзя маскировать и занимать
Восемь стандартных масок применяются исключительно к области данных и кодовым словам коррекции. Функциональные узоры остаются нетронутыми — иначе сканер просто не нашёл бы код: алгоритм ищет в кадре характерную пропорцию 1:1:3:1:1, и если бы маска её перемешивала, искать было бы нечего. По той же причине из маскирования исключены поля формата и версии, хотя формально они относятся к области кодирования, а не к функциональным узорам.
Отсюда главное правило дизайна: логотип, рамка и любой декор кладутся только поверх области данных. Повреждение данных лечится коррекцией Рида — Соломона, повреждение функционального узора не лечится ничем — коррекция включается после того, как сетка построена, а строить её будет не по чему. Затёртый поисковый узор — это не «код читается хуже», это «код не читается вообще». Разбор безопасных зон — в материале о правилах размещения логотипа в QR-коде.
Тихая зона формально не входит в функциональные узоры — стандарт описывает её отдельно, — но работает по тем же правилам: минимум четыре модуля чистого поля по периметру.
Проще всего увидеть каркас вживую: соберите два кода разной длины в генераторе QR-кодов и сравните — область данных изменится, а узоры останутся на своих местах.
Связанные концепции
- Поисковый узор — самый заметный из функциональных узоров.
- Тихая зона — обязательное поле по периметру, за пределами узоров.
- Модуль QR — единица сетки, из которой собраны все узоры.
Частые вопросы
Какие элементы QR-кода относятся к функциональным узорам?
По ISO/IEC 18004 их четыре типа: поисковые узоры 7 × 7 в трёх углах, сепараторы шириной в один модуль вокруг них, временные дорожки по 6-й строке и 6-му столбцу и узоры выравнивания 5 × 5, которые появляются начиная с версии 2. Поля информации о формате и о версии служебные, но формально относятся к области кодирования — при этом они, как и функциональные узоры, не маскируются.
Можно ли положить логотип на функциональный узор?
Нет. Коррекция ошибок восстанавливает только повреждённые данные и кодовые слова коррекции, а функциональные узоры нужны сканеру раньше, чем начинается коррекция. Закрытый поисковый узор означает, что код не будет найден в кадре в принципе, а перекрытая временная дорожка сдвигает всю сетку модулей. Логотип размещают строго в центре области данных, на площади не более 20–25 процентов при уровне коррекции H.
Почему поисковых узоров три, а не четыре?
Именно потому, что четвёртый угол пустой, сканер и понимает ориентацию кода. Три метки задают прямой угол и две стороны квадрата, а отсутствие четвёртой однозначно указывает, где «низ справа». С четырьмя одинаковыми метками код был бы симметричен и читался бы в четырёх поворотах одинаково — расшифровать данные в правильном порядке стало бы невозможно.
Меняются ли функциональные узоры от содержимого кода?
Нет. Их рисунок и координаты зависят только от версии символа. Два QR-кода версии 5 со ссылками на разные сайты будут иметь абсолютно одинаковые поисковые узоры, сепараторы, дорожки и узоры выравнивания — различаться будет только область данных и служебное поле формата, где записан номер выбранной маски. Именно поэтому визуально коды одной версии похожи «по каркасу».
Сколько площади QR-кода занимает служебная часть?
Зависит от версии и меняется радикально. В версии 1 (21 × 21 = 441 модуль) на функциональные узоры и поле формата уходит 233 модуля — больше половины, а данным остаётся 208 модулей, то есть 26 кодовых слов. В версии 40 (31 329 модулей) служебная часть занимает около 1681 модуля, примерно 5 процентов. Крупные коды используют площадь заметно эффективнее мелких.