🫀Внутрощі qr-кодів

Зміст

Недавно була задача, зв'язана з QR кодами. І про них трохи розкажу і про те, як їх можна використовувати.

Що таке QR-коди?

Що ж таке QR-код? Загуглити самі зможете. Просто якась інформація закодована у певному форматі. До речі, специфікація QR-коду не описує формат даних.

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

З чого складається QR-код?

QR-код складається з чорно-білої матриці квадратів, яка містить закодовану інформацію. Основні елементи QR-коду:

  • Три великих квадрати по кутах - ці елементи слугують якорями, які допомагають камері або сканеру визначити орієнтацію коду.

  • Менший квадрат у четвертому куті - він використовується для вирівнювання коду.

  • Дані - закодовані у вигляді чорних та білих блоків, які складаються у матрицю. Вони містять основну інформацію, наприклад, текст, URL, контактні дані тощо.

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

Щодо корекції помилок, QR-коди використовують алгоритм Ріда-Соломона для корекції помилок. Це означає, що навіть якщо частина коду буде пошкоджена, QR-код все одно може бути розшифрований. В залежності від рівня корекції помилок (L, M, Q, H), QR-код може витримувати пошкодження від 7% до 30% його площі.

Як камери розпізнають QR-коди?

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

Що може зберігати QR-код?

  • Текст. Найпростіший тип даних, який може містити будь-яку текстову інформацію, як-от повідомлення, інструкції або простий текст.

  • URL-адреса. Один із найпоширеніших типів даних у QR-кодах. Відсканувавши такий код, користувач може бути автоматично перенаправлений на веб-сайт.

  • Контактні дані (vCard або MeCard): QR-код може містити інформацію про контакт, наприклад, ім'я, номер телефону, електронну пошту та адресу. Відсканувавши код, користувач може зберегти ці дані як контакт у телефоні.

  • Телефонний номер. Код може містити телефонний номер, який автоматично відкриється в додатку для дзвінків після сканування.

  • Wi-Fi налаштування. QR-код може містити дані для підключення до Wi-Fi мережі (SSID, пароль, тип шифрування). Відсканувавши код, телефон може автоматично підключитися до мережі.

  • Місцезнаходження (геолокація). QR-код може містити координати геолокації (широту і довготу), які відкриваються в додатку для карт.

  • Платіжна інформація. QR-код може містити інформацію для проведення платежу, наприклад, посилання на платіжний шлюз або реквізити для переказу.

  • Інформація для аутентифікації (OTP, двофакторна аутентифікація). Використовується для сканування кодів, що генерують одноразові паролі або для аутентифікації в різних системах.

Максимальна кількість інформації, яку може зберігати QR-код

Версія QR-коду

  • Кількість модулів. Версія QR-коду визначає кількість модулів (чорних і білих квадратів) у матриці. Всього є 40 версій QR-кодів, де версія 1 має 21x21 модулів, а версія 40 – 177x177 модулів.

  • Вплив версії. Чим більша версія QR-коду, тим більше модулів він містить і тим більше інформації можна закодувати. Наприклад, QR-код версії 1 може вмістити максимум 152 байти даних, тоді як версія 40 – до 2,953 байтів у режимі байтових даних.

Рівень корекції помилок

  • Рівні корекції. QR-коди підтримують чотири рівні корекції помилок:

    • L (Low): Витримує пошкодження до 7% площі коду.

    • M (Medium): Витримує пошкодження до 15% площі.

    • Q (Quartile): Витримує пошкодження до 25% площі.

    • H (High): Витримує пошкодження до 30% площі.

  • Вплив корекції. Вищий рівень корекції помилок збільшує розмір службових даних (overhead), що зменшує кількість корисних даних, які можна закодувати. Наприклад, для QR-коду версії 40 з рівнем H можна зберігати менше інформації, ніж для того ж коду з рівнем L.

Декодування QR-коду

Для прикладу, зайдемо на Приват24 для входу через мобільний додаток.

Тут можемо бачити QR-код. Якщо використаємо https://zxing.org/w/decode.jspx ось цей сайт для декодування qr-коду, отримаємо наступну інформацію:

Це якийсь текст, код, який зрозумілий тільки додатку, якому він потрібен. Якщо я наведу камерою на код, я просто отримаю таке

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

Ходімо далі. Більшість з вас, пробували підключатися до мережі, використовуючи QR-код. Як це працює? А точніше, що там знаходиться?

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

Мобільна камера хендлить цей уніфікований протокол (як на iOS так і на Android) і пропонує нам підключитися до мережі.

Що робити, якщо ми хочемо всунути забагато інформації і зробити його “крос-платформеним“?

Уявіть, що ми робимо автентифікацію за допомогою QR-коду, повертаємо JSON і скануємо його нашим мобільним додатком. Ми вже знаємо, що вміст має відповідати якомусь протоколу, щоб нативна камера телефону його зрозуміла. В якийсь момент, цей JSON стає надто великим і QR код не може згенеруватися. Так, ми можемо стиснути дані, можемо постаратися щось забрати, але з часом це вже не працює. На допомогу приходять “динамічні qr-коди”.

PS » iQR-код може містити більший обсяг інформації, ніж традиційний QR-код. IQR-код такого ж розміру, як і існуючий QR-код, може містити на 80% більше інформації, ніж останній. Якщо зберігається така ж кількість, iQR-код можна зменшити на 30% (порівняно зі звичайним QR-кодом).

Динамічні QR-коди

Динамічні QR-коди дозволяють змінювати вміст після створення. Це досягається через те, що QR-код містить URL, який перенаправляє на сторінку з актуальним контентом. Змінюючи цей контент на сервері, можна змінити інформацію, яку надає QR-код, без його повторного створення. Тут ми вбиваємо декількох орлів однією стрілою. Один QR код, динамічна інформація, компактний розмір. І ще, окрім всього, ми можемо передавати в QR код динамічне посилання.

Dynamic link

Dynamic Links – це спеціальні URL, які дозволяють направляти користувачів на відповідний контент у вашому додатку незалежно від того, чи вже встановлений додаток на пристрої, чи ні. Вони можуть включати в себе різноманітні параметри, такі як реферальні дані, промокоди, інформацію про продукт і так далі, і мають певні характеристики, що дозволяють їм функціонувати в різних середовищах. Один і той самий Dynamic Link може працювати як в мобільному додатку, так і на веб-сайті.

Коли ви створюєте Dynamic Link, ви задаєте URL-адресу для веб-версії, а також глибокий посилання (deep link) для мобільного додатку.

Наприклад, можна створити власне динамічне посилання використовуючи Firebase, а саме, його сервіс Dynamic links.

https://firebase.google.com/docs/dynamic-links/create-manually

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Oleksandr Klymenko
Oleksandr Klymenko@overpathz

Java Software Engineer

4.4KПрочитань
1Автори
71Читачі
На Друкарні з 19 квітня

Більше від автора

  • Secure networking. Deep Dive

    Глибоке занурення в протоколи TLS/SSL та інфраструктуру відкритих ключів (PKI). Основні поняття, процес встановлення захищеного з'єднання, роль сертифікатів та ланцюжка довіри

    Теми цього довгочиту:

    Security
  • Поширені помилки у дизайні REST API

    У довгочиті розглядаються поширені помилки при проектуванні REST API та способи їх уникнення: версіонування, використання DTO, підхід CQRS, робота з мікросервісами, та інші практики для підвищення продуктивності, безпеки й зручності API

    Теми цього довгочиту:

    Java
  • Java. Короткий огляд еволюції багатопотоковості

    У перших версіях Java багатопоточність реалізовувалася за допомогою класу Thread, який дозволяв створювати нові потоки. Проте ця модель мала багато недоліків:

    Теми цього довгочиту:

    Java

Вам також сподобається

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Вам також сподобається