Повреждённый QR-код чаще всего остаётся читаемым, потому что в каждый QR-код встроена коррекция ошибок: избыточные данные позволяют сканеру математически восстановить утраченные фрагменты. В зависимости от уровня коррекции, выбранного при создании кода, узор может потерять примерно от 7% до 30% поверхности — и всё равно расшифроваться без единой ошибки.
Стандарт QR определяет четыре уровня коррекции ошибок — L, M, Q и H — с запасом восстановления примерно 7%, 15%, 25% и 30% соответственно. В основе лежит код Рида — Соломона, который распределяет проверочные данные по всему символу. Именно этот механизм позволяет читать поцарапанные коды и безопасно размещать логотип в центре QR-кода.
Почему повреждённый QR-код всё равно сканируется?
Повреждённый QR-код сканируется потому, что данные в нём закодированы с избыточностью. При создании кода к полезной информации добавляются проверочные блоки, рассчитанные по алгоритму Рида — Соломона, и эти блоки распределяются по всей площади узора. Когда часть модулей поцарапана, испачкана, порвана или закрыта, сканер не пытается «прочитать» испорченные участки — он восстанавливает исходное сообщение по тем данным, которые уцелели.
Поэтому код с пятном от кофе, линией сгиба или наклейкой поверх середины часто срабатывает как ни в чём не бывало. Сканер не считывает каждый модуль по отдельности: он решает математическую задачу восстановления, и пока объём потерь не превышает заложенный запас, решение существует.
Какие уровни коррекции ошибок существуют?
Стандарт QR определяет четыре уровня коррекции ошибок, и каждый код создаётся ровно с одним из них:
- Уровень L (Low) — восстанавливает примерно 7% повреждений. Самый компактный и наименее плотный узор.
- Уровень M (Medium) — восстанавливает примерно 15%. Распространённый вариант по умолчанию.
- Уровень Q (Quartile) — восстанавливает примерно 25%.
- Уровень H (High) — восстанавливает примерно 30%. Самый устойчивый; стандартный выбор для кодов с логотипом.
У надёжности есть цена — плотность. Чем выше уровень коррекции, тем больше избыточных данных нужно уместить в код, поэтому при том же физическом размере узор становится мельче и «гуще». А мелкая сетка, в свою очередь, требует более качественной печати и более аккуратного сканирования. Устойчивость — это баланс, который выбирается под конкретный код, а не бесплатное улучшение.
Как работает код Рида — Соломона простыми словами?
Код Рида — Соломона можно представить как систему уравнений с запасом. Обычное сообщение — это набор неизвестных; проверочные блоки — дополнительные уравнения, составленные по строгим математическим правилам. Если часть «уравнений» потеряна вместе с повреждёнными модулями, оставшихся всё ещё достаточно, чтобы однозначно вычислить исходные данные — до тех пор, пока потери укладываются в запас выбранного уровня.
Важно, что проверочная информация не хранится в одном углу, а распределена по всему символу. Благодаря этому не так важно, где именно находится повреждение: пятно в центре, царапина сбоку или оторванный край расходуют один и тот же общий бюджет восстановления. Как только суммарные потери превышают порог уровня — например, больше примерно 30% даже на уровне H — у задачи просто не остаётся решения.
Как отсканировать повреждённый QR-код?
Чтобы отсканировать повреждённый QR-код, помогите коррекции ошибок, а не мешайте ей: дайте сканеру максимально чистое изображение того, что уцелело. Действуйте по шагам:
- Исправьте геометрию. Разгладьте складки и заломы — сгиб одновременно искривляет сетку и отбрасывает на неё тень.
- Исправьте свет. Блики от ламинации «ослепляют» камеру: наклоните код так, чтобы отражение ушло с узора. В темноте включите фонарик.
- Исправьте угол и расстояние. Держите телефон параллельно коду и приближайтесь, пока код не заполнит кадр; если камера не фокусируется — чуть отступите.
- Попробуйте более сильный декодер. Движки распознавания различаются: приложение-сканер нередко читает код, на котором штатная камера сдаётся. Например, QRBot использует запас коррекции ошибок по максимуму, работает офлайн и показывает содержимое кода до открытия ссылки — повреждённый код не отправит вас «вслепую» в неожиданное место: qrscanner.vidus6.com/ru.
- Сканируйте с фотографии. Если код за стеклом или в неудобном месте, сфотографируйте его и распознайте снимок — кадр можно переснимать, пока повреждённые участки не станут максимально различимыми.
Большинство «нечитаемых» кодов — это на самом деле читаемые коды, которые сканируют в плохих условиях.
Когда QR-код уже не спасти?
QR-код невозможно прочитать, когда повреждения превышают запас коррекции или разрушены служебные структуры, которые нужны сканеру ещё до начала декодирования. Три больших квадрата по углам — поисковые узоры — сообщают сканеру, где находится код и как он ориентирован; если один из них оторван или сильно закрыт, большинство сканеров вообще не «зацепится» за код, каким бы целым ни было остальное. То же касается тихой зоны — пустого поля вокруг кода: если текст, рамки или графика вплотную прижаты к узору, сканер не находит границы кода.
Признаки того, что дело безнадёжно:
- Утрачен угловой поисковый узор — оторван, закрашен или выцвел. Без него не работает ориентация.
- Нарушена тихая зона. Этот случай иногда обратим: закройте мешающую наклейку, рамку или текст листом белой бумаги и попробуйте снова.
- Пропал контраст — выгоревшая на солнце краска, тёмный узор на тёмном фоне, плотная грязь.
- Потери больше, чем позволяет уровень. Код уровня L (запас 7%) откажет там, где код уровня H даже «не заметит» повреждения, — а определить уровень на глаз нельзя.
Если код действительно мёртв, никакие приёмы сканирования его не оживят. Решение одно — восстановить исходное содержимое и сгенерировать новый код с теми же данными: узор чинится не на бумаге, а на уровне данных.
Какой уровень выбрать и при чём тут логотип?
Выбирайте уровень коррекции по тому, где код будет жить и что будет его закрывать. Для чистого показа на экране достаточно L или M — узор остаётся редким и легко читается. Для обычной печати — листовки, меню, упаковка, — которую будут трогать и пачкать, разумный минимум составляют M или Q. Для уличных вывесок, наклеек и всего, что открыто погоде, берите Q или H.
| Сценарий | Рекомендуемый уровень |
|---|---|
| Показ на экране, цифровые документы | L или M |
| Листовки, брошюры, меню, упаковка | M или Q |
| Уличные вывески, наклейки, транспорт | Q или H |
| Любой код с логотипом или графикой поверх | H |
С логотипом связь прямая: для сканера логотип в центре кода — это то же повреждение. Он расходует бюджет коррекции ещё до того, как своё возьмёт реальный мир — царапины, грязь, блики. Поэтому для кода с логотипом уровень H фактически обязателен: перекрытая логотипом область плюс бытовые повреждения должны вместе укладываться в запас восстановления. И помните: высокие уровни уплотняют узор, поэтому сочетайте Q и H с достаточным размером печати и свободной тихой зоной. Перед тиражом устройте пятиминутный стресс-тест: распечатайте один экземпляр в финальном размере и отсканируйте его с реального расстояния, под углом и при слабом свете.
Частые вопросы
Можно ли починить повреждённый QR-код физически?
Нет — дорисовать недостающие модули от руки нереально, их расположение математически точное. Но чинить обычно и не нужно: коррекция ошибок позволяет коду с потерями до 30% (на уровне H) сканироваться как новому. Если запас превышен или разрушен поисковый узор, единственный выход — сгенерировать новый код с тем же содержимым и заменить печать.
Сколько повреждений выдерживает QR-код?
Примерно от 7% до 30% поверхности в зависимости от уровня коррекции, выбранного при создании: L — около 7%, M — около 15%, Q — около 25%, H — около 30%. Уровень фиксируется в момент генерации, и внешне коды разных уровней различить нельзя.
Почему код с логотипом требует уровень H?
Потому что логотип закрывает часть модулей и с точки зрения сканера ничем не отличается от повреждения. Уровень H даёт максимальный запас — около 30%, — из которого логотип забирает свою долю, а остаток остаётся на реальные царапины, грязь и блики. На низких уровнях логотип может «съесть» весь бюджет ещё на этапе дизайна.



