Читаємо QR код tutorial

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

У статті розглянуті базові особливості QR кодів і методика дешифрування інформації без використання обчислювальних машин.

Ілюстрацій: 14, символів: 8510.

Для тих, хто не в курсі, що таке QR код. є непогана стаття в англійській Wikipedia. Також можна почитати тематичний блог на Хабре і кілька хороших статей з суміжної тематики, які можна знайти, скориставшись пошуком.

Рішення завдання безпосереднього читання інформації з QR-картинки розглянемо на прикладі двох кодів. Інформація була закодована в online генераторі QR Coder.ru.

Щоб зрозуміти, як витягти дані з коду, потрібно розібратися в алгоритмі. Існує кілька стандартів в сімействі QR кодів, з їх базовими принципами можна ознайомитися в специфікаціях. Коротко поясню: дані, які необхідно закодувати, розбиваються на блоки залежно від режиму кодування. До розбитим по блокам даними додається заголовок, який вказує режим і кількість блоків. Існують і такі режими, в яких використовується більш складна структура розміщення інформації. Дані режими розглядати не будемо, з причини того, що витягати вручну з них інформацію недоцільно. Однак, грунтуючись на тих принципах, що описані нижче, можна адаптуватися і до цих режимів.

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

За стандартом, дані з RS-кодами перед записом в картинку «премешіваются». Для цих цілей використовують спеціальні маски. Існує 8 алгоритмів, серед яких вибирається найкращий. Критерії вибору засновані на системі штрафів, про які можна також почитати в специфікації.

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

Тут зеленим фломастером підкреслені пункти, які потрібно буде реалізувати при безпосередньому читанні коду. Інші пункти можна опустити на увазі того, що зчитування справляє людина.

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

По них можна зорієнтуватися і зрозуміти яка версія QR перед вами. Коди високих версій зазвичай також недоцільно зчитувати вручну.

Розміщення системної інформації показано на малюнку:

Системна інформація дублюється, що дозволяє значно знизити ймовірність виникнення помилок при детектуванні коду і зчитуванні. Системна інформація — це 15 біт даних, серед яких перші 5 — це корисна інформація, а решта 10 — це BCH (15,5) код, який дозволяє виправляти помилки в системних даних. До класу BCH кодів відносять і RS коди. Зверніть увагу, що на малюнку дві смужки по 15 біт не перетинаються.

Як вже говорилося, інтерес представляють тільки перші 5 біт. З яких 2 біта показують рівень корекції помилок, а інші 3 біта показують яка маска з доступних 8 застосовується до даних. У розглянутих QR кодах системна інформація містить:

Прочитати повністю: Джерело


Статтi по темi:

Share →