Почему QR-код читается, даже если он обрезан

QR-код можно прочитать, даже если часть его обрезана, стёрта, испачкана или закрыта логотипом. Причина — коррекция ошибок: кроме самих данных в код записывается дополнительная информация для их восстановления. Если часть точек потеряна, телефон пересчитывает их по оставшимся. Сколько можно потерять, зависит от уровня коррекции: от 7% до 30% кода.

Объяснение максимально просто

Представьте, что вы диктуете по телефону номер карты, а связь плохая. Чтобы собеседник ничего не перепутал, вы повторяете номер несколько раз и добавляете «сумма цифр — 47». Если одна цифра потерялась, её можно восстановить по повтору и по сумме.

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

Поэтому обрезанный или повреждённый QR-код читается, пока потеряно не больше, чем рассчитан уровень коррекции, и пока целы служебные части кода (о них ниже).

Один и тот же QR-код с оторванным углом на уровнях коррекции L и H
Одинаковый оторванный угол: на уровне L код не читается, на уровне H — читается. Проверено сканером

Уровни коррекции ошибок QR-кода

Международный стандарт QR-кодов ISO/IEC 18004 задаёт четыре уровня коррекции:

  • L (Low, низкий) — восстанавливает около 7% кода;
  • M (Medium, средний) — около 15%;
  • Q (Quartile, «четверть») — около 25%;
  • H (High, высокий) — около 30%.
Одна и та же ссылка в QR-кодах с уровнями коррекции L, M, Q и H
Одна ссылка на четырёх уровнях: чем выше уровень, тем больше точек

Чем выше уровень, тем больше места в коде уходит на запасные байты. При том же объёме данных код с уровнем H получается крупнее и с более мелкими точками, чем с уровнем L. Поэтому уровень выбирают под задачу:

  • L — для кодов на экране, где их ничто не повредит и важно, чтобы точки были крупнее.
  • M — обычный выбор для большинства кодов.
  • Q и H — для печати на улице, на упаковке, на вещах, которые трутся и пачкаются, и для кодов с логотипом в центре.

Что можно обрезать, а что нельзя

Коррекция восстанавливает данные, но не всё в коде — данные.

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

Почему работает QR-код с логотипом

Логотип в центре — это и есть «повреждение», только запланированное: он закрывает часть точек с данными. Если уровень коррекции высокий, телефон восстанавливает спрятанные под логотипом точки и читает код.

QR-код с логотипом в центре
Логотип закрывает часть точек, но код на уровне H читается

В генераторе QRBest уровень подбирается сам: если вы добавляете логотип, код строится с уровнем H, а размер логотипа ограничен, чтобы под ним не пропало больше, чем код может восстановить. Для коротких ссылок без логотипа генератор тоже берёт высокий уровень, для длинных — средний, чтобы точки не стали слишком мелкими.

Как проверить свой код

Перед печатью отсканируйте код с разных телефонов и с расстояния, с которого его будут читать. Если код с логотипом читается с трудом, уменьшите логотип или сделайте сам код крупнее. Проверить код можно и без телефона: скачайте картинку и загрузите её в онлайн-сканер.

Опубликовано 12 ноября 2026