6–11Информатика

Как устроен 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-коды закончиться?

Нет. Код это просто запись данных, как текст. Разных комбинаций модулей больше, чем атомов во Вселенной, и любой текст или ссылку можно записать заново.