На днях нашел интересный выпуск программы "Удивительные люди" тут мальчик без использования каких-либо вспомогательных средств безошибочно определяет содержимое QR-кодов. Сегодня постараемся разобраться в возможности такого трюка...
Для тех кто не видел этот выпуск:
Немного истории
Впервые QR код был представлен японской компанией Denso-Wave в 1994 году в ответ на нехватку места для хранения информации в простых штрих-кодов. Серьезным преимуществом новой технологии была возможность быстрого и точного распознавания информации. Это позволило QR коду почти полностью вытеснить ранее известные технологии.
Максимальное количество символов, которые помещаются в один QR-код:
- цифры десятичной системы счисления — 7089;
- цифры десятичной системы счисления и буквы (латиница) — 4296;
- байты — 2953 (следовательно, около 2953 букв кириллицы в кодировке windows-1251 или около 1450 букв кириллицы в utf-8);
Развитие технологии
Данная технология развивается до сих пор. С момента её возникновения появилось несколько версий QR кодов. Последние версии позволяют хранить до 1264 символов ASCII текста (Википедия)
Пример такого кода:
Расшифровка QR-кода своими руками
Абсолютно на каждом QR коде присутствуют 3 области по которым происходит определение положения, т.е определяются стороны кода.
Помимо разделов отвечающих за определение положения, существуют специальные "Служебные" области, в них содержится информация о формате QR кода, и применяемой маске. (Что такое маска расскажу далее)
Для уменьшения количества ошибок на каждый QR код содержащий закодированную информацию накладывается так называемая "маска"
Как я думаю уже многие догадались информация в QR коде представляется в виде закрашенных - черных областей и не закрашенных - белых областей. Эта информация нам пригодится на следующих шагах.
Определяем какую маску нам необходимо использовать:
Вот так выглядит пустая маска без всего:
А это наш QR код с уже нанесенной на него маской. Для его ручного декодирования нам необходимо переменить ту маску которая на него накладывалась
Наносим маску:
Маска работает по следующему принципу: если в месте где наносится маска находилась закрашенная область она превращается в не закрашенную:
А если область где наноситься маска была не закрашена, то эта область подвергается закрашиванию:
После того как мы получили "незамаскированный" код, обратим внимание на выделенные области:
Нижняя область сообщает нам о кодировке которая используется в нашем QR коде, а вторая о количестве символов. (В нашем случае нижнее значение - 4, а верхнее 10, т.е. мы имеем дело с кодировкой ASCII содержащей 10 Символов)
Как происходит перемещение по QR коду при большем количестве символов:
Так происходит подсчет закодированной информации:
Соотносим значение каждого символа с таблицей ASCII:
В результате получаем слово Robomatics
Несмотря на то, что ручной метод расшифровки достаточно трудоёмкий, я надеюсь это вам как-либо поможет.
Надеюсь вам понравилось, делитесь этой информацией с друзьями, ставьте пальцы вверх и подписывайтесь, впереди еще много интересного!