Почему порванный QR-код всё равно читается телефоном
QR-код можно надорвать, испачкать и закрыть логотипом, а телефон всё равно откроет ссылку. Разбираем, за счёт чего это работает и как напечатать код, который сканируется с первого раза.

В нашем ролике мы оторвали у QR-кода кусок и навели на него камеру. Код открылся. Фокуса тут нет, так задумано с самого начала.
QR придумали в 1994 году в японской Denso Wave. Инженер Масахиро Хара искал замену обычному штрихкоду для учёта автомобильных деталей. Устойчивость к грязи и повреждениям Denso Wave до сих пор держит в списке главных свойств формата: код умеет восстановить исходные данные, даже если часть картинки испачкана или испорчена. Сегодня формат описан стандартом ISO/IEC 18004, и запас прочности в нём никуда не делся.
Внутри кода лежит не только ссылка
Генератор записывает в чёрно-белые квадратики вашу ссылку, а рядом добавляет вторую порцию данных, проверочную. Считают её по формуле, которую в 1960 году опубликовали Ирвинг Рид и Густав Соломон, тогда сотрудники лаборатории Линкольна при MIT. Статья заняла пять страниц.
Идея такая. Данные превращают в коэффициенты многочлена и записывают его значения в нескольких точках, причём точек берут больше, чем нужно для однозначного ответа. Если часть значений потеряется, оставшихся всё ещё хватит, чтобы восстановить исходный многочлен, а вместе с ним и данные.
Телефону при этом не нужно знать, где именно порвана бумага. Он читает все блоки, видит, что часть из них не сходится, и пересчитывает недостающее.
Та же математика много лет спасала музыку. В компакт-дисках схема CIRC на кодах Рида — Соломона вытягивает данные из-под царапины длиной около 2,5 миллиметра, и слушатель не замечает пропажи.
L, M, Q, H: сколько запаса прочности вы заказываете
У QR-кода четыре уровня коррекции ошибок. Denso Wave приводит для них такие доли восстановления:
- L: около 7 процентов
- M: около 15 процентов
- Q: около 25 процентов
- H: около 30 процентов
Здесь есть деталь, которую почти всегда перевирают в пересказах. Проценты считают не от площади картинки, а от кодовых слов. Кодовое слово в QR это восемь бит, то есть один байт, и в счёт идут все кодовые слова кода, вместе с проверочными.
Поэтому фраза «код переживёт потерю трети площади» неточная. Правильно говорить так: на уровне H сканер вытянет данные, если испорчено около 30 процентов кодовых слов.
Запас не берётся из воздуха. Чем он выше, тем больше квадратиков нужно на ту же ссылку и тем плотнее становится рисунок. Для чистых условий обычно хватает уровня M, его же Denso Wave называет самым частым выбором. Уровни Q и H в Denso Wave советуют для грязных производственных условий, то есть там, где код будут тереть, пачкать или закрывать логотипом.
Три «глаза», разметка и белое поле
Три больших квадрата по углам не украшение. Камера сначала находит именно их и по ним понимает, где код и как он повёрнут. Поэтому неважно, держите вы телефон ровно или вверх ногами.
Между квадратами идут тонкие пунктирные линии. По ним сканер размечает сетку и понимает, где проходят границы квадратиков. В кодах покрупнее добавляются ещё мелкие квадратики-выравниватели: они помогают прочитать код, снятый под углом или наклеенный на что-то круглое.
И вот о чём пишут редко. Все эти служебные элементы коррекцией не защищены. Рид и Соломон отвечают только за данные. Если дизайнер «красиво» перекроил угловой квадрат или стёр пунктирную линию, код не спасёт никакой уровень H.
Ещё формату нужна пустая рамка. Denso Wave требует поле шириной в четыре модуля со всех сторон, где модуль это один маленький квадратик кода. Рамка нужна, чтобы камера отделила код от фона. Самая частая типографская ошибка как раз здесь: код прижимают вплотную к краю листовки или сажают на фотографию.
Логотип в центре: почему работает и где предел
Логотип в середине работает ровно потому, что он закрывает данные, а не служебные элементы. Центр кода это данные, их коррекция восстановит.
Дальше начинается арифметика. На уровне H запас около 30 процентов, но тратить его целиком на логотип нельзя, иначе на реальную жизнь не останется ничего. А жизнь это смазанная печать, блик от ламината, царапина на наклейке и дешёвая камера гостя. Разумно держать логотип примерно в пятой части площади кода и обязательно ставить уровень H.
И всё равно результат нужно проверять не глазами, а сканером. Наш бесплатный генератор QR-кода делает это прямо на странице: рисует код, ставит логотип и тут же пробует его считать, чтобы вы увидели проблему до типографии, а не после.
Как напечатать код, который сканируется с первого раза
Первые два пункта это сводное правило из руководств по печати кодов, остальные проверяются глазами и сканером.
- Размер от 2 сантиметров. Меньше ненадёжно даже вблизи.
- Правило один к десяти. Сторона кода примерно в десять раз меньше расстояния, с которого его будут сканировать. До витрины 2 метра, значит нужен код со стороной около 20 сантиметров.
- Тёмное на светлом. Инверсию, то есть светлый код на тёмном фоне, понимают не все сканеры.
- Настоящий контраст, а не оттенки. Серый на бежевом выглядит стильно и не читается.
- Однотонный фон. Фотография под кодом почти гарантированно всё ломает.
- Вектор для типографии. SVG или PDF, чтобы при увеличении квадратики остались квадратиками, а не превратились в кашу.
Статический код и динамический: чем рискует тираж
Статический код хранит адрес прямо в квадратиках. Посредника нет, поменять ссылку после печати нельзя, но и ломаться нечему: код живёт ровно столько, сколько живёт сама страница.
Динамический код хранит короткую ссылку на сервис-посредник, а тот уже перенаправляет человека куда нужно. Плюс понятный: адрес можно сменить после тиража, а заодно посчитать сканирования. Минус ровно оттуда же. Код теперь зависит от чужого сервера и от того, оплачена ли подписка.
Отсюда риск, о котором вспоминают уже после типографии. Компания печатает меню или упаковку с «бесплатным» динамическим кодом. Бесплатный тариф заканчивается, редирект отключают, тираж едет в мусор. Квадратики целы, математика работает, а человек с телефоном попадает на заглушку сервиса.
Что с этим делать бизнесу
- Соберите свои коды: меню, ценники, визитки, упаковка, наклейка на двери. Отсканируйте каждый и посмотрите, куда он ведёт сегодня.
- Поймите, статический он или динамический. Если в адресе мелькает короткая ссылка чужого сервиса, вы от этого сервиса зависите.
- Для долгих носителей вроде упаковки, вывески или гравировки делайте статический код на свой домен. Менять потом можно не код, а содержимое страницы.
- Ставьте уровень H там, где код будут трогать руками, мочить и заклеивать.
- Оставляйте белое поле вокруг кода и не сажайте его на фото.
- Считайте размер под реальное расстояние, а не под макет на мониторе.
- Перед тиражом отсканируйте распечатанный образец с двух-трёх разных телефонов, включая старый и дешёвый.
И последнее, о чём забывают чаще всего. Код это только дверь. Если страница за ней грузится десять секунд или не адаптирована под телефон, безупречный QR не поможет. Скорость, мобильную вёрстку и мелочи вроде заголовков удобно прогнать через нашу бесплатную проверку сайта.
Мы в BLUEPRINT studio делаем сайты, сервисы и ботов, к которым такие коды ведут. Сам код можно собрать прямо сейчас в нашем генераторе, а если нужна нормальная страница или бот на той стороне, напишите на info@blueprint-studio.ru или в Telegram @blueprint_info.


