7 хв читанняТуторіали

Рівні корекції помилок QR-коду: L, M, Q, H - пояснення

Рівні корекції помилок QR-коду L, M, Q і H відновлюють 7, 15, 25 і 30% пошкодженого коду. Кількість модулів на кожному рівні та коли кожен з них виправдовує себе.

Marius Voß
DevRel · edge infra
Рівні корекції помилок QR-коду L, M, Q і H у вигляді смуг відновлення 7, 15, 25 і 30 відсотків поруч зі справжнім QR-кодом

Рівні корекції помилок QR-коду - це обсяг надлишкових даних, які несе код, щоб сканер міг відновити те, що розмазане, подряпане чи закрите логотипом. Їх чотири: L, M, Q і H, що відновлюють приблизно 7%, 15%, 25% і 30% коду. Обирайте M для більшості екранів і коротких посилань, а H - коли логотип або грубе поводження з'їдатимуть частину коду. Ціна кожного кроку вгору - щільність: більше модулів, дрібніші квадрати за тієї самої надрукованої ширини.

Саме з цього компромісу починається більшість історій "мій QR-код не скануватиметься", і тому цей туторіал розбирає реальні кількості модулів, а не обмежується загальними словами. Якщо ви ще не створили код, як створити QR-код - місце, з якого варто почати; ця стаття - про вибір рівня, коли код уже є.

Що насправді робить корекція помилок у QR-коді

QR-код зберігає ваші дані як байти, що називаються кодовими словами. Поруч із ними він зберігає додаткові кодові слова, обчислені за допомогою корекції помилок Ріда-Соломона, тієї самої родини математики, що використовується на компакт-дисках. Коли сканер читає пошкоджений код, він використовує ці додаткові кодові слова, щоб з'ясувати, які кодові слова з даними хибні та якими вони мали бути.

Обраний вами рівень визначає, скільки є додаткових кодових слів. Denso Wave, що винайшла формат, описує функцію корекції помилок як чотири рівні й зазначає, що підвищення рівня покращує відновлення, але збільшує обсяг даних, а отже й розмір символу. Наведені нижче показники відновлення - ті, що вказані в ISO/IEC 18004 і повторені в статті Вікіпедії про QR-код.

  • Рівень L (Low, низький): близько 7% кодових слів можна відновити.
  • Рівень M (Medium, середній): близько 15%.
  • Рівень Q (Quartile, квартильний): близько 25%.
  • Рівень H (High, високий): близько 30%.

Зверніть увагу на слово "близько". Відсоток рахує кодові слова, а не пляму фарби. Сприймайте це як бюджет на ремонт, а не гарантію пошкоджень.

Чотири рівні корекції помилок QR-коду L, M, Q і H з приблизним відновленням 7, 15, 25 і 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 41V2, 25 x 25
M~15%V8, 49 x 49V2, 25 x 25
Q~25%V9, 53 x 53V3, 29 x 29
H~30%V11, 61 x 61V4, 33 x 33

Впадають в око дві речі. По-перше, довгий URL зростає з 41 до 61 модуля на сторону при переході від L до H, тобто з 1681 до 3721 модуля, приблизно в 2,2 раза за площею. По-друге, і про це ніхто не згадує: коротке посилання на найсильнішому рівні H (33 x 33) усе ще менше за довгий URL на найслабшому рівні L (41 x 41).

Два справжні QR-коди рівня H поруч: відстежуваний URL з 126 символів на 61 на 61 модуль і коротке посилання з 25 символів на 33 на 33 модулі, з таблицею кількості модулів для всіх чотирьох рівнів

Корисне навантаження важливіше за рівень. Ви можете купити максимальний бюджет відновлення 30% для короткого посилання й отримати розрідженіший, грубіший код, ніж "ефективний" код рівня L для довгого URL.

Коли обирати H, а коли краще L або M

Підбирайте рівень під те, що справді трапиться з кодом. Загальна обережність - це не специфікація.

Обирайте H (або Q), коли

  • Посередині стоїть логотип або знак бренду. Він ховає модулі, які сканер має відновити.
  • Код надруковано на упаковці, флаєрі в кишені, наліпці, столі, який витирають, або на чомусь просто неба.
  • Поверхня груба чи вигнута, а фінішну обробку ви контролювати не можете.
  • Повторне сканування неможливе, наприклад код на продукті, що вже відправлений.

Довідкова стаття Elido про QR-коди каже те саме: тримайте логотип менш ніж 20% площі коду й перемикайтеся на H, коли виходите за цю межу або друкуєте з логотипом.

Обирайте L або M, коли

  • Код з'являється на екрані: слайд, вебсторінка, підтвердження оформлення замовлення.
  • URL короткий, і ніщо його не закриє й не подряпає.
  • Місця мало, і код має лишатися малим, тож кожен модуль на рахунку.

M - практичний вибір за замовчуванням. Denso Wave каже, що це найчастіше обираний рівень, а наш власний допис QR-код не скануватиметься наголошує на тому самому з боку служби підтримки: H - хибний вибір за замовчуванням для звичайного коду, бо щільність, яку він додає, спричиняє більше невдалих сканувань, ніж пошкоджень, від яких він захищає.

Застереження щодо логотипів: корекція помилок відновлює відсутні модулі, але не виправляє поганий контраст, розмитість чи обрізане поле. Правила дизайну для витрачання бюджету на логотип наведено в матеріалі дизайн брендованого QR-коду, зокрема чому три кутові квадрати лишаються недоторканими.

Короткі посилання тримають код розрідженим (і динамічні QR-коди їх використовують)

Робочий приклад дає правило, яке можна застосувати вже сьогодні: зменшуйте корисне навантаження, перш ніж піднімати рівень. Динамічний QR-код робить саме це. Замість кодування повної цілі він кодує коротке посилання, а коротке посилання переадресовує куди завгодно, куди ви його спрямуєте.

Кодування короткого посилання має три наслідки для надійності:

  1. Сітка лишається на низькій версії, тож модулі лишаються великими за будь-якого розміру друку.
  2. Ви можете дозволити собі рівень Q або H для логотипа чи зношування в друці, не роздуваючи код.
  3. Параметри відстеження живуть у цілі, а не в візерунку, тож зміна мітки кампанії ніколи не змушує створювати новий, щільніший код.

Є й четверта перевага, що не має стосунку до щільності: оскільки код вказує на коротке посилання, ви можете змінити його ціль пізніше без повторного друку й безкоштовно отримуєте кількість сканувань. У статичного коду ціль вшита у візерунок, тож єдиний спосіб виправити помилку - надрукувати знову.

Якщо хочете спробувати це на власних посиланнях, генератор QR-кодів дає змогу задати рівень для кожного коду, з M як відправною точкою, а подробиці планів є на сторінці цін. Зробіть один код на M і один на H із того самого короткого посилання, надрукуйте їх шириною 3 см і порівняйте. Закладаюся, що вам буде важко відрізнити їх на око, і в цьому суть.

Короткий контрольний список перед друком

Виконуйте їх по порядку.

  1. Спершу скоротіть URL; тримайте параметри відстеження в цілі.
  2. Оберіть рівень за таблицею: M для екранів і звичайного друку, Q або H для логотипів і зношування.
  3. Перевірте версію, яку обрав ваш генератор. Якщо для URL вона перевищує приблизно 10, запитайте себе, чому навантаження таке довге.
  4. Збережіть тиху зону: щонайменше чотири модулі порожнього поля з кожного боку.
  5. Надрукуйте в кінцевому розмірі й відскануйте двома різними телефонами за звичайного освітлення.

Крок 5 ловить те, чого не передбачить жодна таблиця. Логотип, що виглядав малим на екрані, може закрити більше модулів, ніж ви гадаєте.

Читайте серію Cornerstone

Ця публікація входить до кластера туторіалів, а її Cornerstone - як створити 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 на день

Спробуйте Elido

URL-скорочувач із хостингом у ЄС: власні домени, глибока аналітика, відкритий API. Безкоштовний тариф - без кредитної картки.

Теги
qr code error correction levels
qr code error correction
qr code level h
qr code version
reed-solomon qr code
qr code density

Читати далі