Как работают QR-коды

Также называют: кодирование QR-кода, декодирование QR-кода

Определение

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

От данных к узору

Создание QR-кода начинается с выбора режима кодирования, подходящего для данных: цифровой, буквенно-цифровой, байтовый или кандзи. Кодировщик переводит данные в биты, делит их на 8-битные кодовые слова и добавляет кодовые слова коррекции ошибок Рида — Соломона выбранного уровня. Затем он подбирает наименьшую версию, в которую всё помещается.

Кодовые слова укладываются в сетку зигзагообразным путём в обход фиксированных узоров. В конце кодировщик накладывает одну из восьми масок, чтобы разбить крупные пустые области и запутывающие формы, а маску и уровень коррекции ошибок записывает в информацию о формате.

  • Выбрать режим кодирования
  • Закодировать данные и добавить кодовые слова коррекции ошибок
  • Подобрать версию (размер)
  • Разместить поисковые, синхронизирующие и выравнивающие узоры
  • Заполнить модули данных
  • Применить лучшую из восьми масок и записать информацию о формате

От изображения с камеры к данным

Декодирование выполняет те же шаги в обратном порядке. Сканер находит три поисковых узора, у которых соотношение тёмного и светлого 1:1:3:1:1 выделяется на фоне большинства изображений, и с их помощью, а также синхронизирующих и выравнивающих узоров строит карту сетки. Он читает информацию о формате, снимает маску и собирает кодовые слова.

Затем декодирование Рида — Соломона исправляет неверно прочитанные кодовые слова в пределах, которые допускает уровень коррекции ошибок. Если повреждено слишком много, код просто не читается, а не выдаёт неверные данные, поэтому QR-коды редко дают искажённый результат.

Почему важны размер и контраст

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

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

Как телефон понимает, где находится QR-код?

Он ищет три крупных квадратных поисковых узора в углах. Их особое соотношение 1:1:3:1:1 позволяет сканеру найти их под любым углом и определить ориентацию.

Зачем в QR-кодах нужна маска?

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

Можно ли прочитать QR-код вверх ногами?

Да. Поисковые узоры сообщают сканеру ориентацию, поэтому QR-код читается при любом повороте.

Источники и стандарты

Все термины