Как устроен QR-код
QR-коды повсюду: в меню кафе, на билетах, чеках и упаковках. Телефон считывает их за долю секунды. Внутри этих чёрно-белых квадратиков прячется информатика: двоичный код, схемы расположения и хитрая математика, которая позволяет прочитать код, даже если его часть стёрта. Разбираем, как это устроено.
Для 6–11 классов.
Кто придумал QR-код
QR-код изобрёл в 1994 году японский инженер Масахиро Хара в компании Denso Wave, которая делала детали для автомобилей Toyota. На заводе нужно было быстро отслеживать тысячи деталей, а обычные штрихкоды вмещали мало информации и читались только в одном направлении.
QR расшифровывается как Quick Response, «быстрый отклик». Новый код вмещал в сотни раз больше данных и читался под любым углом. Компания не стала брать деньги за использование формата, и это помогло ему распространиться по миру. Массовым он стал, когда камеры появились в каждом телефоне.
Из чего состоит QR-код
- Три больших квадрата в углах. Это поисковые узоры: по ним камера находит код и понимает, как он повёрнут. Четвёртого угла нет специально, чтобы определить ориентацию.
- Маленький квадрат ближе к нижнему правому углу у больших кодов. Помогает выровнять изображение, если код снят под углом или на изогнутой поверхности.
- Пунктирные линии между большими квадратами. Задают сетку: по ним камера понимает размер одного «пикселя» кода.
- Служебная информация рядом с квадратами: какой уровень защиты от ошибок и какая маска используется.
- Данные и коды коррекции заполняют остальное пространство.
Каждый маленький квадратик называется модулем. Чёрный модуль обозначает единицу, белый ноль. Так QR-код хранит информацию в двоичном виде, как любой компьютер.
Размеры и вместимость
Существует 40 версий QR-кода. Самая маленькая, версия 1, размером 21 × 21 модуль. Каждая следующая на 4 модуля больше по стороне. Самая большая, версия 40, имеет 177 × 177 модулей и вмещает до 7 089 цифр или около 4 296 букв и символов латиницы.
Задача
Какой размер у QR-кода версии 10? Сколько в нём модулей?
Сторона версии v: 21 + 4(v − 1).
Для v = 10: 21 + 36 = 57.
Модулей 57 · 57 = 3 249.
Ответ: 57 × 57, 3 249 модулей.
Обычная ссылка на сайт занимает код версии 2–5. Чем длиннее ссылка, тем мельче квадратики, и тем труднее телефону прочитать код издалека. Поэтому для кодов используют короткие ссылки.
Почему код читается испачканным
Самое умное в QR-коде коррекция ошибок. К данным добавляется дополнительная информация, вычисленная по особому алгоритму, кодам Рида–Соломона. Если часть кода повреждена, по оставшимся данным и дополнительной информации можно восстановить потерянное.
- Уровень L: восстанавливает до 7 % повреждений.
- Уровень M: до 15 %.
- Уровень Q: до 25 %.
- Уровень H: до 30 %.
Поэтому в центр кода можно вставить логотип: при высоком уровне коррекции часть модулей можно закрыть, и код всё равно прочитается. Тот же принцип защищает компакт-диски с царапинами и сигналы от далёких космических аппаратов.
Простейший пример коррекции можно понять на чётности: если к семи битам добавить восьмой так, чтобы единиц всегда было чётное число, то по изменившейся чётности видно, что один бит испорчен. Коды Рида–Соломона устроены гораздо сложнее, но идея та же: лишние данные помогают найти и исправить ошибку.
Зачем маска
Если данные случайно образуют большие сплошные чёрные пятна или узоры, похожие на поисковые квадраты, камере трудно читать код. Поэтому поверх данных накладывают маску: по определённому правилу часть модулей меняют на противоположные. Существует восемь масок, и программа выбирает ту, после которой код выглядит наиболее «пёстрым». Номер маски записывается в служебной области, и телефон снимает её при чтении.
Что можно записать в QR-код
Чаще всего в коде лежит ссылка на сайт. Но формат позволяет хранить и другие данные, и телефон понимает их тип по началу записи.
- Пароль от Wi-Fi. Наводишь камеру и сразу подключаешься к сети, не вводя длинный пароль. Удобно для гостей и в кафе.
- Контакт. Визитка с именем, телефоном и почтой, которую можно сохранить одним нажатием.
- Платёж. Реквизиты для оплаты: сумма и получатель подставятся в банковское приложение сами.
- Билет. На кодах в электронных билетах записан номер, по которому контролёр проверяет билет в базе.
- Просто текст. Можно зашифровать записку или загадку для квеста.
Хорошая идея для урока или дня рождения: квест, где каждая подсказка спрятана в QR-коде с текстом. Дети ищут коды по квартире, сканируют их и получают следующее задание. Генераторы кодов бесплатны, а распечатать десяток кодов можно на одном листе. Перед игрой стоит проверить каждый код своим телефоном.
QR-коды и мошенники
Код невозможно прочитать глазами, поэтому мошенники иногда наклеивают свои QR-коды поверх настоящих: на парковочных автоматах, в объявлениях. Такой код ведёт на фальшивый сайт, где просят ввести данные карты.
- Перед переходом смотрите адрес ссылки, который показывает телефон.
- Не вводите пароли и данные карты на сайтах, открытых по коду с наклейки.
- Проверяйте, не наклеен ли код поверх другого.
Больше о схемах обмана в статье о мошенниках и школьниках.
Разберём на занятии
Занимаемся по всем школьным предметам с 4 по 11 класс: живые занятия, общая доска и домашка, которую проверяет тот же преподаватель.
Первое занятие бесплатное: можно посмотреть формат вместе с ребёнком и решить, подходит ли он.
Частые вопросы
Как сделать свой QR-код?
Есть много бесплатных генераторов: вводите ссылку или текст и получаете картинку. В Python есть модуль qrcode, который делает код в две строки. Это хороший мини-проект по информатике.
Могут ли QR-коды закончиться?
Нет. Код это просто запись данных, как текст. Разных комбинаций модулей больше, чем атомов во Вселенной, и любой текст или ссылку можно записать заново.