Уровни коррекции ошибок QR-кода - это объём избыточных данных, которые несёт код, чтобы сканер мог восстановить то, что смазано, поцарапано или закрыто логотипом. Их четыре: L, M, Q и H, они восстанавливают примерно 7%, 15%, 25% и 30% кода. Выбирайте M для большинства экранов и коротких ссылок, а H - когда логотип или грубое обращение съедят часть кода. Цена каждого шага вверх - плотность: больше модулей, мельче квадраты при той же напечатанной ширине.
Именно этот компромисс лежит в основе большинства историй вида «мой QR-код не сканируется», и поэтому в этом руководстве мы разбираем реальные числа модулей, а не машем руками. Если вы ещё не создали код, начните со статьи как создать QR-код; эта же статья - о выборе уровня, когда код уже есть.
Что на самом деле делает коррекция ошибок в QR-коде
QR-код хранит ваши данные как байты, называемые кодовыми словами. Рядом с ними он хранит дополнительные кодовые слова, вычисленные с помощью коррекции ошибок Рида - Соломона - из того же семейства математики, что используется на компакт-дисках. Когда сканер читает повреждённый код, он использует эти дополнительные кодовые слова, чтобы определить, какие кодовые слова данных неверны и какими они должны были быть.
Выбранный уровень определяет, сколько дополнительных кодовых слов будет. Denso Wave, изобретатель формата, описывает функцию коррекции ошибок как четыре уровня и отмечает, что повышение уровня улучшает восстановление, но увеличивает объём данных, а значит и размер символа. Приведённые ниже цифры восстановления указаны в ISO/IEC 18004 и повторены в статье Википедии о QR-коде.
- Уровень L (низкий): восстанавливается около 7% кодовых слов.
- Уровень M (средний): около 15%.
- Уровень Q (квартиль): около 25%.
- Уровень H (высокий): около 30%.
Обратите внимание на слово «около». Процент считает кодовые слова, а не пятно краски. Думайте об этом как о бюджете на ремонт, а не как о гарантии устойчивости к повреждению.
Компромисс плотности: почему выше не всегда безопаснее
Избыточность должна где-то жить. Более высокий уровень загоняет ваши данные в больший символ. QR-коды бывают версий от 1 до 40, а длина стороны - 17 + 4 x версия модулей: версия 1 - это 21 x 21, а версия 40 - 177 x 177, согласно таблице версий и ёмкости Denso Wave. Кодировщик выбирает наименьшую версию, ёмкость которой на выбранном уровне вмещает ваши данные.
Для URL эти данные - текст в байтовом режиме. Версия 2 вмещает 32 байта на L, 26 на M, 20 на Q и 14 на H. Версия 8 вмещает 192, 152, 108 и 84. Версия 11 вмещает 321, 251, 177 и 137.
Цена заметна на версии 8: 192 байта на L, 84 на H. Та же сетка, меньше чем вдвое места для вашего URL, потому что остальное - чётность.
Почему более плотный код сканируется хуже
Телефон должен различить каждый модуль. Напечатайте код шириной 3 см, и сетка 33 модуля даёт модули примерно по 0,9 мм, а сетка 61 модуль - примерно по 0,5 мм. Та же камера, тот же свет, та же дрожащая рука. Вдвое меньше запаса. Правила размеров в статье каким должен быть размер QR-кода исходят из разумного размера модуля, а плотность - то, что тихо нарушает это допущение.
Разобранный пример: один URL на каждом уровне
Вот эксперимент, который я провожу всякий раз, когда мне говорят «просто поставь H». Я взял отслеживаемый URL кампании длиной 126 символов: домен, путь и параметры utm_source, utm_medium, utm_campaign и utm_content. Затем взял короткую ссылку из 25 символов, https://s.elido.me/qr7kP2, как иллюстративный пример. Оба - в байтовом режиме. Я закодировал каждый на всех четырёх уровнях стандартным кодировщиком, и таблица ёмкости выше предсказывает результат.
| Уровень | Восстановление | URL из 126 символов | Короткая ссылка из 25 символов |
|---|---|---|---|
| L | ~7% | V6, 41 x 41 | V2, 25 x 25 |
| M | ~15% | V8, 49 x 49 | V2, 25 x 25 |
| Q | ~25% | V9, 53 x 53 | V3, 29 x 29 |
| H | ~30% | V11, 61 x 61 | V4, 33 x 33 |
Бросаются в глаза две вещи. Во-первых, длинный URL растёт с 41 до 61 модуля по стороне при переходе от L к H, то есть с 1681 до 3721 модуля, примерно в 2,2 раза по площади. Во-вторых, и об этом никто не упоминает: короткая ссылка на сильнейшем уровне H (33 x 33) всё равно меньше длинного URL на слабейшем уровне L (41 x 41).
Полезная нагрузка важнее уровня. Вы можете купить максимальный бюджет на ремонт в 30% для короткой ссылки и получить более разреженный и крупный код, чем «эффективный» код уровня L для длинного URL.
Когда выбирать H, а когда лучше L или M
Подбирайте уровень под то, что на самом деле случится с кодом. Общая осторожность - не спецификация.
Выбирайте H (или Q), когда
- Логотип или фирменный знак расположен посередине. Он скрывает модули, которые сканер должен восстановить.
- Код напечатан на упаковке, листовке в кармане, наклейке, столе, который протирают, или на чём-либо на улице.
- Поверхность шершавая или изогнутая, и вы не можете контролировать отделку.
- Повторное сканирование невозможно, например код на уже отправленном товаре.
Справочная статья Elido о QR-кодах говорит то же самое: держите логотип меньше 20% площади кода и переходите на H, когда выходите за этот предел или печатаете с логотипом.
Выбирайте L или M, когда
- Код появляется на экране: слайд, веб-страница, подтверждение оплаты.
- URL короткий, и ничто не закроет и не поцарапает его.
- Места мало, а код должен остаться маленьким, поэтому важен каждый модуль.
M - практичное значение по умолчанию. Denso Wave говорит, что это самый часто выбираемый уровень, а наша статья QR-код не сканируется делает ту же мысль со стороны службы поддержки: H - неверное значение по умолчанию для обычного кода, потому что добавляемая им плотность вызывает больше неудачных сканирований, чем повреждений, от которых он защищает.
Оговорка о логотипах: коррекция ошибок восстанавливает недостающие модули, но не исправляет плохой контраст, размытие или обрезанные поля. Правила дизайна для траты бюджета на логотип описаны в статье дизайн брендированного QR-кода, включая объяснение, почему три угловых квадрата остаются нетронутыми.
Короткие ссылки сохраняют код разреженным (и динамические QR-коды их используют)
Разобранный пример даёт правило, которое можно применить уже сегодня: уменьшайте полезную нагрузку, прежде чем повышать уровень. Динамический QR-код делает именно это. Вместо кодирования полного места назначения он кодирует короткую ссылку, а короткая ссылка перенаправляет туда, куда вы её направите.
Кодирование короткой ссылки даёт три эффекта для надёжности:
- Сетка остаётся на низкой версии, поэтому модули остаются крупными при любом размере печати.
- Вы можете позволить себе уровень Q или H для логотипа или износа при печати, не раздувая код.
- Параметры отслеживания живут на месте назначения, а не в рисунке, так что изменение метки кампании никогда не заставит делать новый, более плотный код.
Есть и четвёртая польза, не связанная с плотностью: поскольку код указывает на короткую ссылку, вы можете перенаправить его позже без повторной печати и бесплатно получаете счётчики сканирований. В статическом коде место назначения вшито в рисунок, поэтому единственный способ исправить опечатку - напечатать заново.
Если хотите попробовать это на своих ссылках, генератор QR-кодов позволяет задавать уровень для каждого кода, начиная с M, а подробности планов есть на странице тарифов. Сделайте один код на M и один на H из одной и той же короткой ссылки, напечатайте их шириной 3 см и сравните. Готов поспорить, что вам трудно будет различить их на глаз, и в этом суть.
Короткий чек-лист перед печатью
Выполняйте по порядку.
- Сначала сократите URL; параметры отслеживания держите на месте назначения.
- Выберите уровень по таблице: M для экранов и обычной печати, Q или H для логотипов и износа.
- Проверьте версию, которую выбрал ваш генератор. Если для URL она выше примерно 10, спросите себя, почему нагрузка так длинна.
- Сохраняйте свободную зону: не менее четырёх модулей пустого поля с каждой стороны.
- Напечатайте в окончательном размере и отсканируйте двумя разными телефонами при обычном освещении.
Шаг 5 ловит то, что не предскажет никакая таблица. Логотип, казавшийся маленьким на экране, может закрыть больше модулей, чем вы думаете.
Читайте серию опорных статей
Эта статья входит в кластер руководств, а её опорная статья - как создать QR-код. О правилах размера и расстояния, определяющих, достаточно ли велик ваш модуль, читайте в статье каким должен быть размер QR-кода.
Читайте также в блоге
Частые вопросы
Какой уровень коррекции ошибок лучше всего подходит для QR-кода?
Разумное значение по умолчанию - уровень M: он восстанавливает около 15% кода и сохраняет небольшую сетку. Denso Wave, изобретатель формата, говорит, что M - уровень, выбираемый чаще всего. Переходите на Q или H, когда в коде есть логотип или он будет напечатан на том, что потрётся, согнётся или останется на улице.
Что значит 30% коррекции ошибок в QR-коде?
Это значит, что код уровня H всё ещё можно расшифровать, когда до примерно 30% его кодовых слов данных нечитаемы или скрыты. Код хранит дополнительные данные чётности Рида - Соломона, и сканер использует их, чтобы восстановить недостающее. Это потолок восстановимого повреждения, а не обещание, что можно потерять любые 30% поверхности.
Усложняет ли более высокий уровень коррекции ошибок сканирование QR-кода?
Косвенно - да. Более высокие уровни добавляют данные чётности, поэтому тому же URL нужна более высокая версия с большим числом более мелких модулей. При той же напечатанной ширине более мелкие модули камере телефона труднее различить. Решение - более короткая полезная нагрузка, а не более низкий уровень на коде, которому нужна защита.
Нужен ли уровень H, чтобы поместить логотип на QR-код?
Используйте H или хотя бы Q для любого кода с логотипом посередине. Логотип скрывает модули, и сканер считает их повреждением, которое нужно восстановить. Держите логотип заметно меньше четверти площади кода и вдали от трёх угловых квадратов, чтобы износ при печати всё ещё имел запас.
Можно ли отсканировать повреждённый QR-код?
Часто да, в пределах лимита уровня. Поцарапанный, смазанный или частично закрытый код расшифровывается, если потерянная площадь остаётся в пределах того, что может восстановить его уровень, а угловые квадраты целы. Код уровня L переносит около 7% повреждений, код уровня H - около 30%.
Какой уровень коррекции ошибок QR-кода используется по умолчанию?
В стандарте единого значения по умолчанию нет; каждый генератор выбирает своё, а M - самый распространённый выбор. Площадка QR в Elido начинает с M, а L, Q и H доступны в том же элементе управления.
Попробуйте Elido
Вставьте URL - получите короткую ссылку
Без регистрации. Ссылка живёт 30 дней. Зарегистрируйтесь, чтобы оставить её навсегда.
Бесплатно, без регистрации · 2 в день