Перейти к содержимому
РуководствоОсновы

Как работают QR-коды: устройство, коррекция ошибок и ёмкость

Что на самом деле происходит, когда телефон считывает QR-код? Понятное руководство о поисковых узорах, модулях, версиях, уровнях коррекции ошибок и о том, сколько данных вмещает QR-код.

Опубликовано 5 мин чтения

QR-коды повсюду — на столиках в ресторанах, посылках, билетах на поезд, визитках и платёжных терминалах. Но мало кто знает, что скрыто внутри этих чёрно-белых квадратиков и почему код продолжает работать, даже если часть его закрыта логотипом. В этом руководстве мы простым языком объясним, как устроены QR-коды.

Немного истории

QR-код (сокращение от Quick Response code — «код быстрого отклика») изобрёл в 1994 году Масахиро Хара из японской компании Denso Wave, входящей в группу Toyota. Автомобильным заводам нужно было отслеживать детали быстрее, чем позволяли одномерные штрихкоды. Классический штрихкод хранит данные только в одном направлении и вмещает около 20 символов, а QR-код хранит их и по горизонтали, и по вертикали и может вместить несколько тысяч.

Denso Wave запатентовала технологию, но решила не ограничивать её использование, и формат стал международным стандартом (ISO/IEC 18004). Именно благодаря такой открытости QR-коды может бесплатно создавать и считывать кто угодно на любом устройстве.

Из чего состоит QR-код

Любой QR-код — это квадратная сетка из маленьких ячеек, которые называются модулями. Каждый модуль либо тёмный, либо светлый и соответствует одному биту. У некоторых участков сетки есть постоянные функции:

  • Поисковые узоры — три больших квадрата в углах. Они позволяют сканеру мгновенно найти код и определить его ориентацию, даже если код перевёрнут или сфотографирован под углом.
  • Выравнивающие узоры — квадраты поменьше (начиная с версии 2), которые помогают компенсировать искажения, когда код напечатан на изогнутой поверхности или виден в перспективе.
  • Синхронизирующие линии — чередующиеся тёмные и светлые модули между поисковыми узорами. По ним сканер определяет размер каждого модуля.
  • Информация о формате — полосы рядом с поисковыми узорами, в которых хранятся уровень коррекции ошибок и номер использованной маски.
  • Свободная зона — пустое поле вокруг кода. Она входит в спецификацию: без неё сканер не может понять, где заканчивается код и начинается фон.

Всё остальное — это кодовые слова данных и коррекции ошибок, перемешанные по всей сетке.

Версии: почему одни коды плотнее других

QR-коды бывают 40 размеров, которые называются версиями. Версия 1 — это 21 × 21 модуль; каждая следующая версия добавляет по 4 модуля на сторону, вплоть до версии 40 размером 177 × 177 модулей. Чем больше данных вы кодируете, тем выше версия и тем мельче каждый модуль при одном и том же размере печати.

Вот почему короткий URL даёт чистый, «просторный» узор, а длинный текст — плотный, который приходится печатать крупнее. Когда вы создаёте код в нашем генераторе QR-кодов, в превью отображаются версия и количество модулей, чтобы вы могли следить за плотностью.

Режимы кодирования и ёмкость

QR-код выбирает наиболее эффективный режим кодирования для вашего содержимого:

Режим Символы Макс. ёмкость (версия 40, уровень L)
Цифровой 0–9 7089 цифр
Буквенно-цифровой 0–9, A–Z, пробел и $%*+-./: 4296 символов
Байтовый Любые данные, обычно текст в UTF-8 2953 байта
Кандзи Японские иероглифы 1817 символов

Это теоретические максимумы. На практике коды надёжно сканируются, пока в них не больше нескольких сотен символов. Учтите, что в UTF-8 каждая буква кириллицы занимает 2 байта, поэтому русский текст расходует ёмкость кода вдвое быстрее латиницы. Если нужно передать больше, закодируйте короткую ссылку на веб-страницу.

Коррекция ошибок: секрет кодов с логотипом

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

  • L (Low, низкий) — восстанавливает около 7% повреждённых кодовых слов
  • M (Medium, средний) — около 15%
  • Q (Quartile, повышенный) — около 25%
  • H (High, высокий) — около 30%

Более высокие уровни делают код надёжнее, но и крупнее, потому что больше места уходит на избыточные данные. Именно это и делает возможными QR-коды с логотипом: логотип в центре намеренно «повреждает» часть кода, а коррекция ошибок восполняет пробел. Для кода с логотипом выбирайте уровень Q или H и следите, чтобы логотип занимал не больше четверти площади кода.

Совет: коррекция ошибок не заменяет хороший контраст. Слишком светлый или слишком маленький код, а также код без свободной зоны может не считаться даже на уровне H.

Маскирование: чтобы узор оставался читаемым

Исходные данные могут случайно образовать большие одноцветные области или фигуры, похожие на поисковые узоры, — это сбивает сканеры с толку. Чтобы этого избежать, кодировщик применяет одну из восьми масок — математических формул, которые инвертируют определённые модули, — и оставляет ту, у которой самый низкий «штрафной балл». Сканер считывает номер маски из информации о формате и снимает её. Вам никогда не придётся думать о масках, но именно из-за них два кода с почти одинаковым содержимым могут выглядеть совершенно по-разному.

Что происходит при сканировании

Когда вы наводите камеру на QR-код, сканер:

  1. Находит три поисковых узора и вычисляет положение, размер и поворот кода.
  2. Исправляет перспективу с помощью выравнивающих узоров, превращая наклонённый код в ровную сетку.
  3. Считывает каждый модуль как тёмный или светлый, используя синхронизирующие линии как линейку.
  4. Читает информацию о формате, снимает маску и собирает кодовые слова.
  5. Исправляет ошибки с помощью декодирования Рида — Соломона.
  6. Интерпретирует данные — ссылку, параметры Wi-Fi, карточку контакта — и предлагает подходящее действие.

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

Статические и динамические QR-коды

Статический QR-код содержит конечные данные напрямую: URL, пароль от Wi-Fi или сам текст. Он работает бессрочно, не требует сервера, и его сканирования невозможно отследить. Динамический QR-код содержит короткую ссылку-переадресацию, принадлежащую сервису-провайдеру: она позволяет позже изменить адрес назначения и подсчитывать сканирования, но перестаёт работать, когда заканчивается подписка.

Все коды, созданные на QR.tools, статические: бесплатные, конфиденциальные и бессрочные. Если вам понадобится позже изменить адрес назначения, направьте код на страницу, которой вы управляете, и обновляйте уже её.

Что может содержать QR-код?

Поскольку QR-код просто хранит текст, именно формат этого текста определяет, что с ним сделает телефон. Среди стандартных форматов:

  • URL — открыть сайт (https://…)
  • Wi-Fi — подключиться к сети (WIFI:T:WPA;S:…;P:…;;) — см. генератор QR-кодов для Wi-Fi
  • vCard — сохранить контакт — см. генератор QR-кодов vCard
  • Email, SMS и телефон — начать письмо, переписку или звонок с помощью mailto:, SMSTO: и tel:
  • События календаря — добавить событие через запись iCalendar VEVENT
  • Геолокация — открыть карту по координатам geo:

Главное

  • QR-код — это сетка модулей с фиксированными поисковыми, синхронизирующими и выравнивающими узорами вокруг ваших данных.
  • Больше содержимого — выше версия, плотнее узор и больше минимальный размер печати.
  • Коррекция ошибок (L, M, Q, H) позволяет кодам выдерживать повреждения — и делает возможными логотипы.
  • Статические коды бессрочны и конфиденциальны; динамические можно редактировать, но они зависят от провайдера.

Готовы создать свой? Откройте генератор QR-кодов и за несколько секунд сделайте код со своими цветами и логотипом.

Готовы создать свой QR-код?

Создайте QR-код со своим логотипом и цветами за считаные секунды — бесплатно и без регистрации.

Открыть генератор

Читайте также