QRkoder

Информация о версии QR-кода

Информация о версии — служебный блок из 18 бит, который есть только в QR-кодах версий 7–40: шесть бит номера версии и двенадцать бит защиты BCH, продублированные в двух углах матрицы.

Что такое информация о версии

Информация о версии (Version Information) — служебный блок из 18 бит, в котором записан номер версии QR-кода, то есть размер его сетки. Блок появляется не во всех кодах: он есть только в версиях с 7-й по 40-ю, а в версиях 1–6 его физически нет — ни одного модуля.

Логика такая. Размер матрицы считается по формуле 17 + 4 × номер версии: версия 1 — это 21 × 21 модуль, версия 7 — 45 × 45, версия 40 — 177 × 177. Маленький код сканер измеряет напрямую: считает чередующиеся модули временной дорожки между поисковыми узорами. Но чем крупнее матрица, тем выше шанс ошибиться на модуль-другой при перспективном искажении или размытии, а такой промах ломает всю раскладку. С версии 7 стандарт ISO/IEC 18004 подстраховывается и пишет номер версии явным числом.

Структура 18 бит

БитыЧто кодируютДиапазон
1–6Номер версии в двоичном виде000111 (7) … 101000 (40)
7–18Код коррекции BCH(18,6)вычисляется из первых шести бит

Шести бит хватило бы на числа до 63, но стандарт использует только 7–40 — всего 34 значения. Двенадцать проверочных бит по коду BCH(18,6) исправляют до трёх ошибочных бит. Пример: версия 7 записывается как 000111 110010010100, где первые шесть бит — двоичная семёрка, а остальные двенадцать — остаток от деления на порождающий полином 1111100100101.

Одно важное отличие от поля формата: к информации о версии не применяется постоянная XOR-маска. Поле формата дополнительно XOR-ится с константой 101010000010010, чтобы никогда не оказаться нулевым, а версия обходится без этого — комбинация «шесть бит номера + BCH» и так гарантированно содержит и чёрные, и белые модули, потому что нулевого номера версии не бывает.

Две копии в углах матрицы

Как и информация о формате, блок версии дублируется — и по той же причине: угол этикетки может стереться.

  • Копия 1 — прямоугольник 6 × 3 модуля слева от правого верхнего поискового узора, вплотную к сепаратору.
  • Копия 2 — прямоугольник 3 × 6 модулей над левым нижним поисковым узором.

Второй блок — транспонированный первый: тот же порядок бит, строки и столбцы поменяны местами. Обе копии читаются по одинаковому правилу относительно ближайшего поискового узора. Всего на поле версии уходит 36 модулей.

Как сканер использует поле версии

Порядок работы декодера: найти три поисковых узора, оценить размер сетки по временным дорожкам, и если оценка даёт версию 7 или выше — прочитать 18 бит и уточнить номер. Если прочитанное число расходится с оценкой, доверяют полю версии, потому что оно защищено BCH. Дальше номер версии определяет буквально всё: сколько всего кодовых слов в символе, где стоят узоры выравнивания, сколько остаточных бит в конце потока и как данные делятся на блоки.

Отсюда практическое следствие для дизайна. В крупных кодах два прямоугольника у верхнего правого и нижнего левого углов — такие же неприкосновенные зоны, как сами поисковые узоры. Художественная рамка, обрезающая пару модулей «пустого поля» рядом с углом, может задеть именно их. В версиях 1–6 этой проблемы нет просто потому, что блока нет.

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

  • Версия QR-кода — то самое число от 1 до 40, которое записано в блоке.
  • Информация о формате — второе служебное поле, есть в любом коде.
  • Временная дорожка — альтернативный способ определить размер сетки.

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

Почему в версиях 1–6 нет блока информации о версии?

Потому что он не нужен. Сетка версий 1–6 — от 21 × 21 до 41 × 41 модуля, и сканер надёжно определяет её размер, просто пересчитав чередующиеся модули временной дорожки между поисковыми узорами. Ошибиться на таких размерах трудно. Начиная с версии 7 матрица растёт до 45 × 45 и дальше, риск сбиться на модуль-другой становится реальным — и стандарт добавляет явное 18-битное число.

Сколько модулей занимает информация о версии?

36 модулей: два блока по 18 бит. Первый — прямоугольник 6 × 3 слева от правого верхнего поискового узора, второй — 3 × 6 над левым нижним. Второй блок представляет собой транспонированную копию первого: те же биты, строки и столбцы поменяны местами. Оба блока относятся к служебной области и не маскируются ни одной из восьми масок данных.

Чем защищены 18 бит версии?

Кодом BCH(18,6): шесть бит несут номер версии, двенадцать — проверочную часть, вычисленную по порождающему полиному 1111100100101. Такая связка исправляет до трёх ошибочных бит в блоке. Плюс сам блок продублирован, так что суммарно поле версии переживает довольно заметные повреждения — заметно больше, чем область данных при уровне коррекции L.

Что произойдёт, если оба блока версии повреждены?

Сканер вернётся к оценке размера по временным дорожкам и попробует декодировать с угаданной версией. Иногда это срабатывает, иногда декодирование разваливается: неверная версия означает неверную раскладку узоров выравнивания и неверное деление потока на блоки, а значит поток кодовых слов не сойдётся по Reed-Solomon. Поэтому углы крупных кодов при печати лучше не обрезать и не закрывать рамкой.

Можно ли по картинке понять, есть ли в коде блок версии?

Да, визуально. Посмотрите на узкую полосу шириной три модуля слева от правого верхнего поискового узора: если там нерегулярный чёрно-белый рисунок вместо продолжения области данных, перед вами версия 7 или выше. Проще проверить иначе — сосчитать модули по стороне: 45 и больше означает версию 7 и наличие блока. Сгенерировать код нужной версии для сравнения можно в конструкторе QR-кодов.

Самойлов Андрей Иванович — Эксперт по QR-кодам и SaaS-маркетингу

Автор материала

Андрей Самойлов

Эксперт по QR-кодам и SaaS-маркетингу. 10 лет в SaaS, маркетинге и ИТ.

Об авторе и все материалы

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

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

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