Перейти к содержимому

Информация о формате QR (Format Information)

Информация о формате — 15-битное поле QR-кода вдоль позиционных маркеров, хранящее уровень коррекции ошибок и номер маски; защищено кодом БЧХ и читается сканером первым.

Что хранит поле формата

Информация о формате — это 15-битное служебное поле QR-кода, в котором зашиты два параметра: уровень коррекции ошибок (L, M, Q или H — два бита) и номер применённой маски (0–7 — три бита). Итого пять значащих бит; остальные десять добавляет код БЧХ. Без этих пяти бит сканер не знает ни насколько избыточен код, ни какой шаблон маскирования нужно снять, чтобы добраться до данных.

Как размещено и защищено

Поле продублировано дважды и разложено вокруг трёх позиционных маркеров. Первая копия идёт узкой полосой рядом с верхним левым маркером, вторая — вдоль верхнего правого и нижнего левого. Дублирование не декоративное: если угол кода затёрт или закрыт логотипом, декодер прочитает вторую копию. Сами 15 бит защищены кодом БЧХ (15,5) — он исправляет до трёх ошибочных бит из пятнадцати. Поверх ещё накладывается фиксированная маска 101010000010010, чтобы поле не выродилось в сплошные нули при уровне и маске, дающих все нули.

Зачем читается первым

Логика декодирования жёсткая: сначала формат, потом данные. Пока сканер не узнал номер маски, он видит не биты данных, а их XOR с шаблоном — мусор. И пока не узнал уровень коррекции, не может правильно разделить поток на кодовые слова данных и коррекции. Поэтому 15 бит формата — первое, что вычитывается после того, как найдены позиционные маркеры и определена сетка модулей. Проверить, как это собирается на практике, можно в генераторе QR.

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

Где именно в QR-коде находится информация о формате?

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

Что хранится в 15 битах формата?

Пять значащих бит: два кодируют уровень коррекции ошибок (L, M, Q или H), три — номер маски от 0 до 7. Остальные десять бит — проверочные, их добавляет код БЧХ (15,5) для исправления ошибок при чтении. Итого пятнадцать бит на всё поле.

Почему сканер читает формат раньше данных?

Без номера маски биты данных выглядят как случайный мусор — их сначала надо расмаскировать. А без уровня коррекции нельзя правильно поделить поток на кодовые слова данных и коррекции. Поэтому формат вычитывается первым, сразу после того, как найдены позиционные маркеры.

Что будет, если поле формата повреждено?

Код БЧХ (15,5) исправляет до трёх ошибочных бит из пятнадцати. Если ошибок больше, декодер берёт вторую копию поля с другого угла. Одновременное разрушение обеих копий сверх исправляемого предела делает код нечитаемым, даже когда сама область данных цела.