Недавно була задача, зв'язана з 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