В современном мире информация может представляться в самых причудливых формах. Причины для этого разные и не всегда имеют стеганографическую подоплеку. У «человека разумного» буквально появился «третий глаз»: мобильный телефон стал неотъемлемым атрибутом каждого из нас. А что именно с его помощью мы попытаемся разглядеть, ты узнаешь из этой статьи.

Повсеместно распространенным штрих-кодом сейчас уже никого не удивишь. В реальной жизни представление информации в виде последовательности черно-белых полос стало привычным настолько же, насколько привычной стала покупка какого-либо товара в супермаркете. Кодирование информации о продукте (страна-изготовитель, непосредственно сам изготовитель товара, тип товара и т. п.) производится с целью упрощения дальнейшего ее извлечения автоматизированными средствами. Именно для этого хорошо подходит штриховой код, который в силу своей линейной структуры хорошо читается в горизонтальном направлении.
Однако прогресс не стоит на месте, и в скором времени того объема информации, который способны перенести в себе линейные кодировки (до 30 цифровых символов), стало не хватать производителям бесконечно растущих объемов продукции. Инженеры стали задумываться о способах расширения объемов кодируемых данных и результатом их деятельности стало появление на свет двумерных штрих-кодов, но вот сфера их применения, в силу специфики, перестала ограничиваться исключительно «пометкой» различной продукции. Нынче представители семейства «матричных» активно используются в среде потребительской, и теперь им находят все более интересные способы применения. И чтобы при случайной встрече с ними ты не смотрел на них, как на картинку с ребусом, мы научимся распознавать их не только по внешним признакам, но и напишем программный инструмент, который позволит тебе определить содержание контейнера с данными, а также поговорим о нестандартных способах использования матричного кодирования. Пришел. Увидел. Распознал.
Чтобы не получить в конечном счете «кашу» из определений, предлагаю придерживаться общей классификации способов кодирования информации. Как уже было упомянуто в начале, разделяют два принципиально разных типа кодирования:
Многоуровневые коды нам неинтересны, так как они представляют собой попросту «многослойный» линейный код. В свою очередь, матричные кодировки «упаковывают» информацию как по горизонтали, так и по вертикали, что позволяет радикально увеличить объем хранимых данных и, соответственно, снять ограничения на их тип — теперь становится возможным кодирование текстовых данных.

Из всего многообразия матричных кодов нам интересен QR-код. Его повсеместная распространенность (одна только Япония использует эти кодировки с такой завидной популярностью, как, например, мы используем таблички с указанием названия улицы и номера дома) обусловлена прежде всего высокой степенью его распознаваемости и, как следствие, простотой распознающего оборудования. Кстати, аббревиатура QR образована от англ. «quick response», что в переводе на великий и могучий означает «быстрый отклик».
Быстро «откликнуться» конкретный экземпляр QR-кодов может на самое непривередливое оборудование. Так, например, имея в наличии мобильный телефон или любой другой девайс с камерой практически любого разрешения, можно считать себя уже достаточно укомплектованным для охоты за QR-кодами. Если сфотографировать QR-картинку, прилагающуюся к статье (или открыть ее с диска и сделать банальный PrintScreen, но это выглядит менее эффектно), пропустить фотографию через одну из программ распознавания, то мы получим следующую строку:
Xakep Online: https://xakep. ru
Что делать с полученной информацией (перейти по ссылке на веб-ресурс, сохранить ссылочку в заметках или в контактах и т. п.), ты решишь самостоятельно.
Программы для распознавания QR-кодов доступны практически под любые платформы, однако большинство из них рассчитано на мобильную аудиторию. Неудивительно, ведь в подавляющем большинстве случаев, когда мы можем встретить «белый квадрат с черными точками», у нас под рукой не окажется ничего, кроме мобильного телефона.
Большинство программ находятся в свободном доступе и являются бесплатными, однако мало кто из разработчиков делится исходными кодами своего ПО. Может быть, этот факт обусловлен отсутствием интереса конечного пользователя, а может быть, производитель не хочет раскрывать деталей алгоритма распознавания. Так или иначе, мы самостоятельно разберемся с деталями распознавания QR-кода программным способом, написав полноценное приложение, которое, в прямом смысле, позволит нам получать из картинки содержащуюся в ней текстовую информацию.
Готовим инструменты

Разбираем матрицу
Рассмотрим общую структуру приложения, которое, как предполагается, будет декодировать QR-код. Первую и, пожалуй, самую большую часть исходного кода занимает описание основного программного класса: определение констант, структурные секции, секции описания функций, предоставляемых сторонней библиотекой. Представление исходных данных в виде картинки описывает структура PTIMAGE.
Структура, описывающая параметры изображения
unsafe public struct PTIMAGE
<
public int dwWidth;// ширина изображения в пикселях
public int dwHeight;//высота изображения в пикселях
public byte* pBits;//указатель на данные исходного изображения
public byte* pPalette;// указатель на данные о палитре изображения (1,4,8 бит)
public short wBitsPerPixel; //число бит на пиксель
>
SDK поддерживает большинство форматов файлов изображений. Учитывая тот факт, что большинство камер экспортируют снимки в наиболее распространенные форматы, проблем с несовместимостью быть не должно. Далее идет раздел описания функций, которые экспортируют библиотеки, входящие в состав SDK. Заострять внимание на их подключении мы не будем.
Следующим этапом будет описание параметров библиотеки декодирования баркодов в структуре PTDECODEPARA:
Структура PTDECODEPARA используется для определения параметров при декодировании баркода на изображении
public unsafe struct PTDECODEPARA
<
public int dwStartX;// начало координаты X в пикселях
в окне поиска изображений для декодирования
public int dwStartY;
public int dwEndX;
public int dwEndY;
public int dwMaxCount;//максимальное количество символов для поиска; если значение равно 0, то ищем все символы
>;
Манипулируя со значением переменной dwMaxCount, мы получаем возможность управлять производительностью приложения, фокусируя наш «декодировщик» на конкретных областях исходного изображения и избегая функционирования «в холостую». Следующая структура заполняется непосредственно после определения области изображения, в которой находится баркод:
После декодирования структура PTBARCODEINFO содержит баркод с информацией
public unsafe struct PTBARCODEINFO
<
/координаты четырех углов баркода в пикселях/
public int dwX1, dwY1;
public int dwX2, dwY2;
public int dwX3, dwY3;
public int dwX4, dwY4;
public byte* pData; //указатель на буфер, который содержит данные баркода
public int dwDataLen; //длина данных (в байтах) баркода
>;
Если ты внимательно посмотришь на картинку с QR-кодом, то сразу заметишь три выделяющихся квадратных области — это ориентиры для средств распознавания, своего рода «указатель» программе на то, что среди прочего набора пикселей на картинке присутствует QR-код.
Главная функция нашего приложения проста до безобразия, поэтому в полном объеме приводить ее не будем, а сосредоточим внимание на следующих инструкциях:
Как ты уже понял, непосредственно процесс распознавания скрывается в инструкциях функции DecodeQR(), которая после определения области QR-кода передает инструкции обработчику баркода, а он, в свою очередь, демонстрирует пользователю информацию, содержащуюся в картинке:
Вроде бы результат достигнут. Однако легкий «краш-тест» полученного приложения позволил выявить его сильные и слабые стороны.
Однако с распознаванием кодов в 3D все несколько хуже: искажение в соотношении сторон QR-кода может негативно сказаться на качестве определения его содержимого.
В общем, можно сказать, что эта библиотека предоставляет разработчику широкие возможности для работы с матричными кодами. В ней имеются встроенные средства коррекции ошибок и восстановления поврежденных областей исходных изображений, а возможности изменения параметров точности распознавания позволяют программисту найти золотую середину в тандеме параметров «производительность/эффективность».
Рамки применения QR-кода ограничиваются исключительно фантазией своего интегратора. Банальный обмен контактными данными (адреса сайтов на картинке в каком-либо общественном месте, эффектная демонстрация данных визитки на черно-белой карточке, реклама и объявления, приглашения и др.) на фоне массы других способов уже кажется, как минимум, неоригинальным.

Идея расширения видимой реальности с помощью подручных средств, коими являются мобильные телефоны, кажется уже не настолько далекой и требующей технического прогресса.
А практичность данного вида представления информации для конечного потребителя заметна уже сейчас. Обладатель телефона, интересующийся, например, меню какого-либо ресторана (бара, кафе, памятником архитектуры или любым другим зданием, содержащим QR-код, который несет полезную информацию), при наведении камерой на QR-область может ознакомиться в реальном времени с меню, не посещая заведение.
Или ознакомиться с расписанием маршрута проезжающего мимо общественного транспорта, содержащего «полезную картинку». Альтернативное кодирование информации может оказаться полезным в вещах, имеющих стеганографическую подоплеку. Например, QR-код может быть спрятан в каком-нибудь изображении и вылезать наружу при его обесцвечивании. Ну а информация, которая появится при его распознавании, конечно же, будет зашифрованной. Поскольку стеганография — хорошо, сочетание ее с криптографией — всяко лучше.
Links
-
— официальный веб-ресурс разработчиков описанного в статье SDK. — сервис генерации QR-кодов. — статья «Жуки в полоску» о структуре штрих-кода. — мой ресурс, где ты можешь задать вопросы и поделиться идеями.
Денис Макрушин
Специализируется на исследовании угроз и разработке технологий защиты от целевых атак. #InspiredByInsecure
Чем на самом деле является QR код и стоит ли им пользоваться
В наше время, кажется, уже все знают, что такое QR-код, но мало кто знает, как он появился, где применяется и какие особенности имеет. В то же время этот незамысловатый квадратик с узором не просто является актуальным носителем информации, но и имеет все шансы стать очень перспективным средством донесения информации до человека будущего. Если вы думаете, что он проще, чем кажется — эта статья для вас. Тем более что сейчас, когда москвичей обязали проходить идентификацию по QR при выходе из дома в условиях карантина.

QR код очень удобен. Отсканировал и нужная информация у тебя.
Кто придумал QR-код
История этого на первый взгляд простого узора началась ровно четверть века назад в Японии. Разработкой занималась компания Denso-Wave. Сейчас обозначение ”QR code” является зарегистрированным товарным знаком DENSO Corporation, однако, его использование не облагается какими-либо лицензионными отчислениями. Кроме этого, сами QR коды описаны и опубликованы в качестве стандартов ISO.
Расшифровка QR очень проста. Две столь привычные буквы означают “Quick Response”. То есть QR код можно назвать кодом быстрого реагирования (или моментального отклика). Сейчас это как никогда отражает суть, так как для сканирования не нужно никаких специальных приборов. Достаточно поднести к коду смартфон и можно получить всю необходимую информацию.

В сканировании QR кода нет ничего сложного и в этом его плюс.
Изначально код разрабатывался для автомобильной промышленности, но постепенно начал выходить за ее пределы. Настоящий прорыв в умах потребителей произошел с появлением в широком доступе смартфонов с хорошей камерой. Именно тогда начали появляться информационные и рекламные коды, сделанные по технологии QR.
Технические особенности QR кода
QR коды бывают разных версий и в зависимости от них имеют разный размер. От 21 на 21 пикселя без учета полей в первой версии до 177 на 177 пикселей в сороковой версии.
Существует 4 основных типа кодировок. Среди них цифровая (для шифровки цифр), алфавитно-цифровая (цифры и символы), байтовая (данные) и кандзи, предназначенная для работы с иероглифами.
Для исправления ошибок в QR-коде, в случае его повреждения или нанесения дополнительных рисунков, используется код Рида-Соломона с 8-битным кодовым словом. Существует четыре уровня избыточности (7%, 15%, 25% и 30%). Есть и другие сложные степени защиты от ошибок считывания. Особую важность они обретают в случае работы с платежными и идентификационными системами. Одной из таких степеней является перебор всех возможных вариантов считывания с подсчетом штрафных баллов по особым правилам для каждой из них. В итоге выбирается самый удачный вариант, который и принимается за истинный.
Как работает QR код
Главным преимуществом QR кода является его “вместительность”. Этот тип кода является двухмерным в отличии от одномерного штрих-кода. В свое время переход от “полосочек” к “квадратикам” был обусловлен именно необходимостью шифровать в кодах больше информации.
Подписывайтесь на наш новостной Telegram-канал и всегда будете в курсе всего самого нового и интересного из мира Android и не только.
Стандартный QR код может нести в себе до 4000 символов. Это позволяет зашифровать не только пару десятков символов инвентарного номера товара в магазине, но даже целые тексты, длинные реферальные ссылки и многое другое. Есть даже возможность шифрования JPEG, GIF и PNG. Правда, для этого они должны быть размером не больше 4 КБ, а это очень мало. Для передачи изображений куда проще зашифровать ссылку и разместить на специальной странице любое изображение.

В QR код можно даже зашифровать книгу.
Основным преимуществом QR кодов является их перспективность. С каждым днем они появляются вокруг нас все чаще и чаще. Многие рекламные компании переведены на этот код. Уже сейчас вполне нормально идти по улице и встретить QR код на столбе или стене. В этом случае, правда, стоит быть осторожным, так как никто не знает, куда он ведет. Но, если вы видите код на большом плакате в магазине, на ТВ или на упаковке товара, его можно смело сканировать.

Пример использования QR кода в общественных местах.
Использование QR кода даже позволяет сэкономить на стоимости товара. Например, вы покупаете наушники и производителю не нужно класть в коробку толстые стопки инструкций на всех языках. Достаточно разместить внутри QR-код со ссылкой на страничку, где можно будет выбрать язык и получить нужную информацию. Экономия идет за счет уменьшения веса упаковки, уменьшения ее объема и, конечно, экономии на бумаге.
Возвращаясь к перспективам, можно представить варианты нашего будущего, когда дополненная реальность станет обычным делом и мы будем ходить в специальных очках. При считывании такого кода очки заменят его на нужное изображение и рядом с человеком “повиснет” экран с информацией. Звучит немного криповато, но реклама коварна — она не спрашивает, когда ей появиться.

Отсканировал QR и не нужно много места для печатного текста.
Пока в рекламе коды применяются только как дополнение. Есть основной посыл и завлекающий элемент в виде QR кода, по которому предлагается перейти для получения большей информации. Опять же, так производители могут более точно оценить эффективность рекламы и количество людей, заинтересованных в ней.
Что такое Micro QR code
Кроме основного типа QR кода, в последнее время начал набирать популярность Micro QR. Основным преимуществом является бОльшая эффективность. В самом коде используется только одна метка позиционирования, в отличии от трех в большом варианте (большие квадраты по углам). Это позволяет высвободить дополнительное пространство, не переживая за ошибки считывания.

Пример Micro QR кода
Кроме этого, в Micro QR уменьшен размер свободной области. В обычном варианте должно использоваться 4 модуля свободного пространства, а в Micro QR только два. Свободным полем является чистая область за пределами изображения кода, а модулями — один элемент (квадратик) внутри самого кода. То есть уменьшение свободной области позволяет разместить код более красиво и опять же сэкономить место.
Зачем нужны QR-коды
Креативщики из Guinness решили внести современные нотки в такое старое дело, как пивоварение. Так, на бокалы пива наносится QR код, который видно только при наполнении емкости темным пивом Guinness. Когда стакан пустой или наполнен обычным светлым пивом, код считать не получится. Если покупатель все же считал код, он получает доступ на специальную страницу с промокодами и другой интересной информацией.

Видно код — не видно код.

Та самая пицца для молодых специалистов.

Аппетитно и информативно.
Некоторые кулинары наносят QR на продукты. В итоге, покупатель может ознакомиться с историей пирожного, узнать больше о заведении или получить информацию о предстоящих акциях. Но некоторые идут дальше. В рамках кампании одного из рекрутинговых агентств, молодым специалистам, которым хотели предложить работу, отправляли пиццу с нанесенным на нее QR кодом с предложением. Это было очень креативно и кроме получателя никто не видел послание, так как пицца была очень вкусной и сразу съедалась.
Встречаются QR коды и в архитектуре. Так, например, на крыше офиса Facebook красуется большой QR код, который можно легко прочитать на снимках с воздуха. Применен QR и в проекте бизнес-центра в Дубае. Весь фасад здания должен быть покрыт “информативными квадратиками”.

Офис Facebook с QR кодом на крыше.

Проект здания в виде QR кода
Еще одним примером креатива могут служить футболисты клуба “Бромли”, которые во время матча кубка Англии вышли на поле с выбритыми на голове QR-кодами. Сканирование кодов вело на сайт букмекерской конторы. Что скажешь? Необычный ход.

Оригинальное решение по размещению QR кода. Главное, не ошибиться.
В Корее есть один очень необычный супермаркет, в котором на полках не стоят товары. Вместо этого на столбы и стены нанесены фотографии реальных полок, на которых стоят такие же ненастоящие товары. Человек ходит между этих полок, выбирает то, что ему нужно, сканирует QR код и все. На выходе он сканирует QR код для оплаты и передачи своего адреса для доставки товаров домой. Это лишнее доказательство того, что QR коды нужны для того, чтобы мы могли общаться с компьютером на одном языке.
Как использовать QR-коды
Помимо приведенных выше способов использования QR кодов есть и более приземленные, привычные многим людям.
Среди основных можно назвать оплату товаров и услуг населением азиатских стран. В Китае почти все оплачивают покупки при помощи встроенных возможностей многофункционального приложения WeChat. С его помощью оплачиваются товары на кассе, преподносятся денежные подарки путем перевода (у китайцев очень распространены так называемые ”красные конверты”) и даже подается милостыня городским попрошайкам.

Традиционные китайские красные конверты дарятся на праздники. Благодаря WeChat они стали электронными.
Согласно данным iResearch, объем мобильных платежей в Китае в 2018 году составил 72,1 триллиона юаней или примерно 10 триллионов долларов. Львиную долю из этого составили именно платежи при помощи QR-кодов.
Широкому распространению такого вида оплаты поспособствовала китайская компания Inspiry, которая в 2003 году изобрела быстрый способ считывания кодов. Правда, в начале нулевых оплата все равно проходила только в течение 15-20 секунд. Впоследствии трудности преодолели и ускорили процесс, а рост объема платежей пошел вверх по экспоненте. Для сравнения, с 2011 года он вырос почти в 1000 раз и каждый год рос не меньше, чем на четверть.
В это же время в Европе и США люди существенно реже сталкиваются с QR кодами. Например, по данным опросов в США, только 20 процентов продавцов знает как ими пользоваться и примерно такое же количество человек хоть раз в жизни сканировало QR код. Определенные попытки продвижения есть, но они очень слабые и заключаются только в размещении специальных меток на памятниках архитектуры, в общественных местах и на рекламных материалах.
Исключениями являются единичные случаи, вроде австралийского бренда UGG и американской компании Sennheiser, которые реализовали проверку подлинности на основе QR кода. После вскрытия упаковки покупателю предлагается просканировать код. Если его нет или система выдала ошибку, покупатель может вернуть товар в магазин, так как он является контрафактным.
Россия в этом вопросе продвинулась чуть дальше. Например, у нас уже несколько лет действует стандарт на использование QR кодов в документах. Он позволяет наладить документооборот на предприятиях и обеспечить боле удобную оплату коммунальных платежей. Проблема в том, что мало кто этим пользуется.
Как создать QR-код
В наше время нет, наверное, ничего проще создания QR кода. Для этого существует масса сервисов и сайтов, которые быстро и без регистрации позволяют сгенерировать нужный код и скачать его для печати или отправки кому-то. Приводить примеры в большом количестве нет смысла, достаточно просто вбить в поиске “генератор QR кода” и получить нужный результат в виде сайта или приложения.
Как видите, в этом нет ничего сложного и, если вы не пользовались такими кодами, советую попробовать. Это иногда может быть очень удобным способом поделиться информацией. Не стоит их недооценивать. И не надо называть их штрих-кодами.
https://xakep. ru/2011/05/11/55235/
https://androidinsider. ru/polezno-znat/chem-na-samom-dele-yavlyaetsya-qr-kod-i-stoit-li-im-polzovatsya. html