Как работают 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-код, сканер:
- Находит три поисковых узора и вычисляет положение, размер и поворот кода.
- Исправляет перспективу с помощью выравнивающих узоров, превращая наклонённый код в ровную сетку.
- Считывает каждый модуль как тёмный или светлый, используя синхронизирующие линии как линейку.
- Читает информацию о формате, снимает маску и собирает кодовые слова.
- Исправляет ошибки с помощью декодирования Рида — Соломона.
- Интерпретирует данные — ссылку, параметры 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-код со своим логотипом и цветами за считаные секунды — бесплатно и без регистрации.
Открыть генератор