Когда мы забираем посылку по QR-коду, сканируем товар или дисконтную карту, протягиваем кому-то свою инстаграм-визитку, происходит маленькая математическая магия. В свое время QR-коды решили важную производственную проблему: дали пространство для того, чтобы компактно записывать всю нужную информацию о товаре. У этого хаотичного квадрата, больше похожего на принт, на самом деле, интересная конструкция и история создания — расскажем ее вам.
QR-код — это не изобретение последних 10 или 15 лет, он ровесник 30-летних. Его главным предшественником был штрихкод, который также позволяет закодировать некоторый объем информации. Но нужды производства и торговли росли. В то время в разных компаниях разрабатывали двухмерные коды, которые кодируют информацию в вертикальном и горизонтальном направлениях — они могли бы шифровать больше информации и стать ответом на запросы отраслей.
В японской компании Denso, которая выпускает автомобильные запчасти, такой запрос был особенно острым: на каждой коробке с запчастями приходилось размещать чуть ли не десяток разных штрихкодов. Людям, которые работали с этими деталями, приходилось по очереди сканировать каждый. Это было медленно и утомительно.
Задачу разработать двухмерный код, который заменит штрихкоды, поставили перед командой инженеров, среди которых был Масахиро Хара.
Как сделать так, чтобы код считывался максимально быстро? Это был главный вопрос, над которым думали инженеры. Вдохновением для рабочего решения стала японская игра го, в которую Масахиро играл в перерывах. Он заметил, что расположение черных и белых камней складывается в матрицу, и так можно шифровать одновременно много информации. А ответом на вопрос скорости стало добавление позиционных меток — это квадраты по краям QR-кода. С ними сканер распознает код под любым углом — не нужно тратить время на то, чтобы правильно поднести его.
Вся разработка заняла полтора года. Это был путь множества проб и ошибок. В итоге в 1994 году компания Denso Wave анонсировала изобретение: в QR-код не просто можно было заложить много информации, но и считывался он в 10 раз быстрее, чем альтернативы. Отсюда, кстати, и название: QR расшифровывается как Quick Response — дословно «быстрый ответ», то есть быстрое считывание.
Принципы шифрования информации объяснял научпоп-блог Veritasium. В матрице есть два цвета: черный и белый. Если провести аналогию с двоичным кодом, белый — это 0, а черный — 1. Допустим, нам нужно заложить в QR-код ссылку. Сперва ее нужно представить в виде единиц и нулей. Каждый символ переводится в формулу двоичного кода — получается длинная последовательность из нулей и единиц. Теперь нужно расположить ее в квадрате.
Вокруг QR-кода сохраняется рамка одного цвета, отделяющая его в пространстве от других символов и рисунков. В классическом QR-коде (позже появились и другие его конфигурации, например микро-QR-код или QR-код в виде рамки) по углам есть три квадрата — они нужны для того, чтобы сканер понимал ориентацию кода в пространстве. От всей остальной информации внутри они отделяются белыми полосами по периметру. В QR-кодах есть и четвертый квадратик размером поменьше, который не так бросается в глаза, — он нужен для выравнивания: если сканер направляется на код под углом, он понимает ровный вид кода по расстоянию между этим квадратиком и тремя большими. Квадраты по углам соединены между собой полосами синхронизации — они подсказывают сканеру, какая версия кода перед ним. Рядом с угловыми квадратами есть полосы с информацией о том, как считывать код.
А дальше внутренняя часть заполняется нужными данными. Информация всегда начинается с нижнего правого угла. Сначала прописывается тип кодирования — так сканер понимает, что будет дальше: цифры, буквы или иероглифы. Потом дается указание, сколько символов будет в кодируемом сообщении — тоже через двоичный код, черными и белыми «точками».
Дальше блоками в рисунке QR-кода прописываются сами данные — они идут справа налево и снизу вверх. Квадраты при этом остаются на своих местах, информация размещается вокруг них.
В него «встроена» система восстановления части информации — успешно отсканировать можно даже те коды, где оторвана или чем-то залита почти треть всего черно-белого рисунка. У QR-кодов бывает четыре уровня коррекции ошибок: самый меньший может восстановить до 7% «оторванной» информации, самый большой — до 30%. В каждом конкретном коде прописывается, какой уровень коррекции ошибок использован — для этого есть специальное место возле двух разных больших квадратов. В этом и есть задумка: если один уголок оторвется, сканер возьмет информацию из «дубля».
Тот же принцип, по сути, применяется и ко всем данным внутри QR-кода. Когда основное сообщение записано, следом за ним прописываются сведения о всем содержимом в коде, только чуть иначе — это и «страхует» информацию. Получается, если вы неаккуратно разорвали пакет, на который наклеен QR-код, то разрыв не помешает работе метки: сканер математически поймет, что там было.
После того как в код записана основная и страхующая информация, он выглядит довольно стройно — с ровными и понятными блоками. Но если вспомнить реальные QR-коды, они выглядят скорее как принты, на вид довольно хаотичные. Все дело в маскировании. Это следующий этап: в почти готовом коде «пиксели» перемешиваются одним из восьми способов. Это нужно, чтобы сканер точно понимал: о, это QR, а не плитка на стене дома.
То, какой способ маскировки взяли для конкретного кода, тоже прописывается возле больших позиционных квадратов. И маскировка — это причина того, почему разные генераторы могут выдать не похожие друг на друга QR-коды с одинаковой информацией.
Серьезной проблемой, после которой у пищевой промышленности появилась необходимость отслеживать компоненты продуктов и помечать партию информацией о ее происхождении, стала вспышка коровьего бешенства. На научном медицинском языке болезнь называется «губчатая энцефалопатия крупного рогатого скота». Впервые ее зафиксировали в Великобритании в 1986 году. Вплоть до середины 1990-х вспышка заболевания у коров нанесла сокрушительный удар по британской индустрии говядины и была связана с 232 смертями людей, пишет портал History.com.
Это заболевание разрушает мозг, а вызывают его прионы — дефектные белки. В составе кормов были мясо и костная мука — так происходило заражение. Протестировать живое животное на это заболевание нельзя. Вспышка болезни и паника привели к профилактическому убийству более 4,5 млн голов крупного рогатого скота, и британская экономика потеряла примерно $4,6 млрд.
Тогда у пищевой промышленности возникла острая необходимость прослеживать продукцию на всех этапах начиная от партии сырья. Позже для этих целей стали применять QR-коды, которые изначально появились в автопроме.
В Беларуси для маркировки прослеживаемости товаров используются не QR-коды, а Data Matrix. Они похожи, тоже матричные.
Отличие, которое первым бросается в глаза визуально, — это что у Data Matrix нет таких позиционных квадратов по периметру, как у QR-кода. Кстати, к матричным относится еще один код, которые многие видели, но едва ли знали его название, — PDF417. Его можно встретить на посадочных талонах в самолет.
Можно воспользоваться специальным сервисом — например, одним из этих вариантов:
Думать о том, какую кодировку выбирать, не нужно: программа сама автоматически определяет это исходя из типа данных, которые вы хотите зашифровать. Переводить в такую форму можно ссылку на сайт, PDF-файл, свою электронную почту, ссылку на аккаунт в соцсети, текст.
Вероятность того, что QR-коды когда-либо закончатся, крайне мала. Например, для небольшого кода с низким уровнем коррекции ошибок, по прикидкам ChatGPT, число возможных комбинаций может исчисляться квадриллионами (10 в пятнадцатой степени) или квинтиллионами (10 в восемнадцатой степени). Поэтому если нарисовать рандомный QR-код и попробовать считать его сканером, то шансов «попасть» в какой-то из существующих практически нет.
Читайте также:
Есть о чем рассказать? Пишите в наш телеграм-бот. Это анонимно и быстро
Перепечатка текста и фотографий Onlíner без разрешения редакции запрещена. ga@onliner.by