Qr code уровень коррекции ошибок

d6d437981aeafc7a63b1918abab4e127

d6d437981aeafc7a63b1918abab4e127

«Код должен легко считываться» — это стало главной целью для японской компании «Denso-Wave» при создании двумерного матричного кода в 1994г.

Действительно, QR-код распознается даже в перевернутом состоянии. Три угловых квадрата привязки, ставшие отличительной особенностью кода, позволяют правильно развернуть его в памяти программы сканера.

Версии QR-кода
По спецификации коды делятся на версии. Номера версий варьируются от 1 до 40. Каждая версия имеет особенности в конфигурации и количестве точек(модулей) составляющих QR-код. Версия 1 содержит 21×21 модулей, версия 40 — 177×177. От версии к версии размер кода увеличивается на 4 модуля на сторону.

При создании матричного кода следует учесть, что лучшие QR-ридеры способны прочитать версию 40, стандартные мобильные устройства — вплоть до версии 4 (33x33 модулей)

Каждой версии соответствует определенная емкость с учетом уровня коррекции ошибок. Чем больше информации необходимо закодировать и чем больший уровень избыточности используется, тем большая версия кода нам потребуется. Современные QR-генераторы автоматически подбирают версию QR-кода с учетом этих моментов.

В следующей таблице показаны характеристики различных версий QR-кодов:

Версия Количество модулей Уровень коррекции
ошибок
Максимальное количество символов с учетом уровня коррекции ошибок и типа символов
Числа: 0 — 9 Числа и символы латинского алфавита*,
пробел, $ % * + — . / :
Двоичные данные Символы японского алфавита
Kanji
1 21×21 L 41 25 17 10
M 34 20 14 8
Q 27 16 11 7
H 17 10 7 4
2 25×25 L 77 47 32 20
M 63 38 26 16
Q 48 29 20 12
H 34 20 14 8
3 29×29 L 127 77 53 32
M 101 61 42 26
Q 77 47 32 20
H 58 35 24 15
4 33×33 L 187 114 78 48
M 149 90 62 38
Q 111 67 46 28
H 82 50 34 21
10 57×57 L 652 395 271 167
M 513 311 213 131
Q 364 221 151 93
H 288 174 119 74
40 177×177 L 7,089 4,296 2,953 1,817
M 5,596 3,391 2,331 1,435
Q 3,993 2,420 1,663 1,024
H 3,057 1,852 1,273 784

* При использовании кириллицы один символ считается за 2 латинских символа (кодировка UTF-8)

Уровни коррекции ошибок в QR-кодах

QR-код имеет специальный механизм увеличения надежности хранения зашифрованной информации. Для кодов созданных с самым высоким уровнем надежности могут быть испорчены или затерты до 30% поверхности, но они сохранят информацию и будут корректно прочитаны. Для исправления ошибок используется алгоритм Рида-Соломона (Reed-Solomon). При создании QR-кода можно использовать один из 4 уровней коррекции ошибок. Увеличение уровня способствует увеличению надежности хранения информации, но приводит к увеличению размера матричного кода.

Допустимый процент нарушений
L около 7%
M около 15%
Q около 25%
H около 30%

Полезные ссылки:

Стандарт ISO 18004 (Automatic identification and data capture techniques — QR Code 2005 bar code symbology specification)

Время на прочтение
5 мин

Количество просмотров 1.1M

Иногда возникают такие ситуации, когда нужно прочитать QR код, а смартфона под рукой нет. Что же делать? В голову приходит лишь попробовать прочитать вручную. Если кто-нибудь сталкивался с такими ситуациями или кому просто интересно как же читается QR код машинами, то данная статья поможет вам разобраться в этой проблеме.

В статье рассмотрены базовые особенности QR кодов и методика дешифрирования информации без использования вычислительных машин.

Иллюстраций: 14, символов: 8 510.

Для тех, кто не в курсе что такое QR код, есть неплохая статья в английской Wikipedia. Также можно почитать тематический блог на Хабре и несколько хороших статей по смежной тематике, которые можно найти поиском.

Решение задачи непосредственного чтения информации с QR-картинки рассмотрим на примере двух кодов. Информация была закодирована в online-генераторе QR Coder.ru.

Чтобы понять, как извлечь данные из кода, нужно разобраться в алгоритме. Существует несколько стандартов в семействе QR кодов, с их базовыми принципами можно ознакомиться в спецификациях. Кратко поясню: данные, которые необходимо закодировать, разбиваются на блоки в зависимости от режима кодирования. К разбитым по блокам данным прибавляется заголовок, указывающий на режим и количество блоков. Существуют и такие режимы, в которых используется более сложная структура размещения информации. Данные режимы рассматривать не будем ввиду того, что извлекать вручную из них информацию нецелесообразно. Однако, основываясь на тех принципах, которые описаны ниже, можно адаптироваться и к этим режимам.

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

По стандарту, данные с RS-кодами перед записью в картинку «перемешиваются». Для этих целей используют специальные маски. Существует 8 алгоритмов, среди которых выбирается наилучший. Критерии выбора основаны на системе штрафов, о которых можно также почитать в спецификации.

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

Здесь зелёным фломастером подчёркнуты пункты, которые нужно будет выполнить при непосредственном чтении кода. Остальные пункты можно опустить ввиду того, что считывание производит человек.

Шаг 0. QR код

Взглянув на картинки, можно заметить несколько отчётливых областей. Эти области используются для детектирования QR кода. Эти данные не представляют интереса с точки зрения записанной информации, но их нужно вычеркнуть или просто запомнить их расположение, чтобы они не мешали. Всё остальное поле кода несёт уже полезную информацию. Её можно разбить на две части: системная информация и данные. Также существует информация о версии кода. От версии кода зависит максимальный объём данных, которые могут быть записаны в код. При повышении версии – добавляются специальные блоки, например как здесь:

По ним можно сориентироваться и понять какая версия QR перед вами. Коды высоких версий обычно также нецелесообразно считывать вручную.

Размещение системной информации показано на рисунке:

Системная информация дублируется, что позволяет значительно понизить вероятность возникновения ошибок при детектировании кода и считывании. Системная информация – это 15 бит данных, среди которых первые 5 — это полезная информация, а остальные 10 — это BCH(15,5) код, который позволяет исправлять ошибки в системных данных. К классу BCH кодов относят и RS коды. Обратите внимание, что на рисунке две полоски по 15 бит не пересекаются.

Шаг 1. Чтение 5 бит системной информации

Как уже говорилось, интерес представляют только первые 5 бит. Из которых 2 бита показывают уровень коррекции ошибок, а остальные 3 бита показывают какая маска из доступных 8 применяется к данным. В рассматриваемых QR кодах системная информация содержит:

Шаг 2. Маска для системной информации

Кроме уже озвученных схем защиты системной информации, вдобавок, используется статическая маска, которая применяется к любой системной информации. Она имеет вид: 101010000010010. Так как имеет интерес только первые 5 бит, то маску можно сократить и легко запомнить: 10101 (десять — сто один). После применения операции «исключающего или» (xor) получаем информацию.

Возможные уровни коррекции ошибок:

Возможные маски:

Шаг 3. Чтение заголовка данных

Чтобы понять с какими данными предстоит иметь дело, необходимо изначально прочитать 4-х битный заголовок, который содержит в себе информацию о режиме. Специфика чтения данных изображена на картинке:

Список возможных режимов:

Шаг 4. Применение маски к заголовку

После извлечения 4-х бит, описывающих режим, необходимо к ним применить маску.
В нашем случае для двух кодов используются разные маски. Маска определяется выражением, приведённым в таблице выше. Если данное выражение сводится к TRUE (верное) для бита с координатами (i,j), то бит инвертируется, иначе всё остаётся без изменений. Начало координат в левом верхнем углу (0,0). Взглянув на выражения, можно заметить в них закономерности. Для рассматриваемых QR кодов, маски будут выглядеть так:

Получим режимы:

Шаг 5. Чтение данных

После получения данных о режиме можно приступать к чтению информации. Надо оговорить, что наиболее интересно считывать числовые и буквенно-числовые данные, так как они легко интерпретируются. Но также не стоит бояться 8-битных. Это может быть также легко интерпретируемая информация. Например, многие онлайн генераторы QR текст кодируют в этом режиме, используя ASCII. Ещё одна причина, почему следует изначально прочитать режим, это то, что от него зависит количество пакетов данных. Которая также зависит и от версии кода. Для версий с первой по девятую длины блоков для более читабельных режимов:

Первый блок после указателя режима — это количество символов. Для числового режима количество закодировано в 10 следующих битах, а для 8-битного режима в 8 битах (прошу прощения за тавтологию).

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

На рисунке видно, все 4 пакета представляют собой коды ASCII латинских букв, образующие слово «habr»

Естественно наилучшим способом остаётся достать телефон из кармана и, наведя камеру на QR-картинку, считать всю информацию. Однако в экстренных случаях может пригодиться и описанная методика. Конечно, в голове не удержишь все указатели режимов и типов масок, а также ASCII символы, но популярные комбинации запомнить (хотя бы те, что рассмотрены в статье) под силу.

Спецификация:

BS ISO/IEC 18004:2006. Information technology. Automatic identification and data capture techniques. QR Code 2005 bar code symbology specification. London: BSI. 2007. p. 126. ISBN 978-0-580-67368-9.

P.S. Соблюдайте правила ресурса и условия Creative Commons Attribution 3.0 Unported (CC BY 3.0)

P.P.S. Если ошибся блогом, то подскажите куда — перенесу.

Чтобы самостоятельно получить закодированную в QR код информацию, нужно, прежде всего знать алгоритм и этапы ее получения. Для каждого отдельного типа кодирования существуют свои этапы и порядок преобразования информации о которых мы расскажем в этой статье.

Для получения QR матрицы, то есть самого изображения QR-кода, состоящего из квадратных модулей, необходимо произвести преобразование исходной информации в QR код. QR-кодирование происходит в несколько этапов, ни один из которых нельзя пропустить или исключить из процесса шифрования. Чтобы не ошибиться с порядком кодирования, все этапы в статье пронумерованы. Каждый из них рассмотрен более подробно, для того чтобы лучше понять необходимость действий выполняемых в нем. После прочтения этой статьи, зная какой-либо из языков программирования, можно попробовать написать свой собственный алгоритм для создания QR-кода. 

Этап 1. Выбор метода шифрования данных

Метод шифрования зависит от типа кодируемых символов. Иначе говоря, на этом этапе осуществляется выбор одного из типов кодирования.

  • цифровой;
  • буквенно-цифровой;
  • байтовый;
  • кандзи.

После этого выбирается версия кода, именно она определяет размер получаемого изображения. Минимальный размер – 21х21 пиксель — можно получить при использовании первой версии. Максимальный размер QR-кода – 177х177 пикселей – получается если используется 40-я версия.Чем выше версия, тем больше символов можно зашифровать. В размерностях версий не учитываются поля матрицы.

Этап 2. Выбор уровня коррекции ошибок

Коррекционные данные относятся к служебной информации, без которой не обходится ни один QR-код.В качестве кода коррекции используются различные вариации кодов Рида-Соломона, длина кодового слова в которых равняется 8.

Существует 4 коррекционных уровня: L, M, Q и H.Каждый из нихимеет свое максимально допустимоеколичество повреждений изображения, выражаемое в процентах. При использовании уровня L, изображение может быть повреждено максимум на 7%от всей емкости, при Mи Q– 15 и 25 % соответственно. В случаях, когда к QR-изображению добавляется рисунок, рекомендуется применять наивысший коррекционный уровень – H, который сможет скорректировать до 30% поврежденного изображения.

У каждой версии QR-кода существуют свои наибольшие значения коррекционных уровней, выражаемые в количестве символов. Это связано с тем, что размерность матрицы имеет прямую зависимость от ее версии. Чем она выше, тем крупнее изображение, и тем большую площадь займут на нем закодированная информация и коррекционные данные. Максимальный объем полезных данных, в том числе служебных, можно узнать из специальных таблиц.

Таблицы для определения максимального количества полезных данных

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

Количество информации представляется двоичным числом, длина которого зависит от версии и типа кодировки. Это число обозначает, сколько символов или байт зашифровано в коде.

Таблица для определения длины двоичного числа

Поле, предназначенное для добавления метода кодирования всегда имеет неизменную размерность 4 бита. Меняются только значения указываемые в нем, согласно которым определяется метод кодирования при считывании:

  • 0001 –цифровое;
  • 0010 – буквенно-цифровое;
  • 0100 –побайтовое.

По завершению этого этапа, должна сформироваться битовая последовательность. Биты в ней должны быть расположены в таком порядке: метод шифрования, количество данных, зашифрованная информация.

Пример. При кодировании слова «Дом» побайтовым методом, в Unicode (HEX) в UTF-8, символы слова имеют значения:

  • «Д» — D094;
  • «о» — D0BE;
  • «м» — D0BC.

При переводе полученных 16-ричных значений в 2-ичную систему счисления:

  • D0=11010000;
  • 94=10010100;
  • D0=11010000;
  • BE=10111110;
  • D0=11010000;
  • BC=10111100.

После объединения в единую последовательность, она будет иметь вид: 11010000 10010100 11010000 10111110 11010000 10111100. Этот двоичный код содержит 48 бит данных.

При необходимости использования уровня Q, позволяющего восстанавливать 25% данных, согласно таблицам для определения максимального количества полезных данных, самой оптимальной версией QR-кода будет первая версия (позволяющая зашифровать 104 символа полезных данных, при коррекционном уровне Q).

Так как в качестве метода кодирования был выбран побайтовый, то в поле метода кодирования будет стоять значение 0100. При переводе его в 2-ичную систему счисления, он станет выглядеть как 110 и содержать 6 байт информации.

Согласно таблице для определения длины 2-ичного числа, его длина должна быть 8 бит. Поэтому последовательность 110 превращается в 00000110, путем дописывания к ней нулей.

По завершению этих этапов, поток бит выглядит следующим образом: 0100 00000110 11010000 10010100 11010000 10111110 11010000 10111100

Этап 3. Разбиение битового потока на блоки

Полученный на втором этапе поток бит разделяется на блоки, в соответствии со специальной таблицей. Из нее берутся значения согласно выбранным версии и коррекционным уровнем.

Таблица выбора количества блоков

Если блок оказывается всего один, данный этап можно считать пройденным. Если их два и больше, то необходимо добавить специальные блоки.

Вначале определяется, сколько данных (в байтах) находится в каждом отдельном блоке. Чтобы это сделать, следует поделить число всех байт на число полученных при разбиении блоков. Полученные в результате этой операции остаточные байты показывают число дополненных блоков(число байт в них на единицу больше чем в других). Такие блоки могут находиться в различных частях последовательности, в том числе ими могут оказаться последние блоки.

После этого все полученные блоки последовательно заполняются байтами данных. После полного заполнения одного блока, происходит переход к следующему блоку. 

Например, при использовании 8 версии и коррекционного уровня H:

  • число данных — 688 символов (по таблице для определения наибольшего количества полезных данных), или86 байт (1 символ это один бит данных, в одном байте – 8 бит).
  • число блоков равно 6 (по таблице выбора числа блоков).

При делении 86 на 6 получится 14 байт и 2 остаточных. Следовательно, размер блоков в байтах 14, 14, 14, 14, 15, 15 (при без остаточном делении, размер всех блоков был бы по 15 байт).В полученные блоки заносятся данные. 

Этап 4. Создание корректирующих байтов

После того, как исходные данные были разбиты на блоки, для них создаются корректирующие байты. Этот этап основывается она алгоритме Рида-Соломона, применяемого ко всем без исключения блокам данных (даже если был получен всего один блок).

Из таблицы для определения числа корректирующих байт узнается, сколько таких байт понадобится создать. После этого создается генерирующий многочлен.

Таблица для определения числа корректирующих байт

Для многочленов так же есть своя таблица. Каждое существующее число байт коррекции меет свой многочлен.

Генерирующие многочлены

До того как начнется цикл создания байтов коррекции, подготавливается массив с длиной соответствующей максимальному числу байт в блоке. Байты блока заносятся в начало, а конец заполняется нулями.

Далее процедура повторяется до конца байт в блоке. По завершению всего цикла, каждый блок получит свои корректирующие байты.

Так же для работы с массивами данных понадобятся таблицы со значениями для поля Галуа и обратного поля Галуа, длинами 256.

Подробная работа цикла описана в примере ниже, байты представлены в 10-ричной системе от 0 до 255. 

Поле Галуа

Обратное поле Галуа

В качестве примера взят произвольный исходный блок данных: 32 197 133 85 197, все байты которого представлены десятичными числами от 0 до 255.

Используемая версия – 1, с уровнем M. Число создаваемых корректирующих байт – 7, им соответствует многочлен генерации: 87, 229, 146, 149, 238, 102, 21.

Создается массив на 7 элементов, в него заносятся байты данных: 32 197 133 85 197 0 0.

Первое действие цикла.По таблице обратного поля Галуа находится соответствие для первого элементаблока. Числу 32 соответствует число 5, оно складывается по модулю 255со всеми членами многочлена:92 234 151 154 243 107 26.

Для получения результата такого сложения, нужно сложить числа, и если их сумма меньше модульного числа, то это и есть сумма по модулю. Если же больше, то сумма по модулю вычисляется как остаток от деления суммы чисел на модуль. 

Например, сложение чисел 5 и 87 по модулю 255, записывается как: 5mod 255 + 87 mod 255 = (5+87) mod 255 = 92mod255 = 92. Так как 92 меньше чем 255, то это и есть искомая сумма. 

Если бы по модулю 255 складывались числа 187 и 95, то запись была бы следующая: 187mod 255 + 95mod 255 = (187+95) mod 255 = 282 mod 255 = 27. Так как 282 больше 255, поделив первое число на второе, получим целочисленный остаток 27. 

Для всех полученных в результате сложения чисел находятся соответствия в таблице поле Галуа: 91 251 170 57 125 104 6.

Элементы массива сдвигаются, к нему дописывается ноль (197 133 85 197 0 0 0) и побитово складывается по модулю 2 с членами массива: 158 126 255 252 125 104 6. Этот массив и есть корректирующие байты.

Далее цикл повторяется. Всего в цикле из этого примера должно быть 5 действий. 

Побитовое сложение по модулю во многих языках программирования представляется операцией xor (исключающее или). Например, 197+91 будет записано как 197xor91. В битах будет выглядеть как 11000101xor1011011, что в сумме даст 10011110 или 158 в десятичном виде. Результат вычисляется согласно существующим соотношениям:

  • 0+0=0;
  • 0+1=1;
  • 1+0=1;
  • 1+1=0.

Этап 5. Объединение блоков данных

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

Из первого блока берется 1 байт. Затем тоже самое делается во втором блоке. Действия повторяются, пока не закончатся все байты в последовательностях. После того, как взят байт из блока стоящего в самом конце, переходят обратно к первому. 

Полученный массив байт выглядит следующим образом: 

<первый байт первого БД><первый байт второго БД>…<первый байт n-го БД><второй байт первого БД>…<(m-1)-ый байт первого БД><(m-1)-ый байт n-го БД><m-ый байт k-го БД>…<m-ый байт n-го БД><первый байт первого БК><первый байт второго БК>…<первый байт n-го БК><второй байт первого БК>…<p-ый байт первого БК>…<p-ый байт n-го БК>

В его начале стоят байты исходных данных (БД), а в конце байты коррекции (БК).

Обозначения:

  • n – число БД;
  • m – число байтов на один БД;
  • p – число БК;
  • k–это то же n, только за вычетом числа БД имеющих на 1 байт больше.

Этап 6. Размещение байтов данных на матрице QR-кода

QR-матрица имеет обязательные поля и отступ. В них не содержится никакой зашифрованной информации. Эти поля служат для позиционирования и несут в себе данные необходимые для декодирования.

Поля матрицы QR-кода

Поисковые узоры и отступ.

Любое QR-изображение имеет три поисковых узора, размерами 8х8 модулей каждый (один модуль – это один черный или белый квадрат), располагаемых в трех его углах (за исключением нижнего право). Поисковые узоры имеют квадратный вид, в центре размещается черный квадрат 3х3 модуля, его окружает белая и черная рамки (шириной в один модуль каждая). С внутренней стороны располагается еще половина белой рамки, так же шириной в 1 модуль. Для наглядности, поисковые узоры отмечены на картинке красным цветом.

Вокруг всей QR-матрицы проходит белая рамка (шириной 4 модуля). Поисковые узоры и рамка необходимы для успешного позиционирования изображения. Эти поля присутствуют на всех QR-кодах.

Выравнивающие узоры

Выравнивающие узоры имеются у всех версий QR-кода, кроме первой. Они служат в качестве дополнительного стабилизатора кода при его дешифрировании. Выравнивающих узоров может быть несколько, равно, как и не быть совсем (у кодов первой версии). Внешне они напоминают поисковый узор, только с размерами 5х5 модулей. Центромузора является единственный черный модуль, окруженный рамками обоих цветов (шириной в 1 модуль).

Полосы синхронизации

Так же имеются у всех версий кода. Эти полосы необходимы, чтобы определить модульный размер при считывании. Всего таких полосы две. Одна полоса находится между левым и правым поисковым узором, вторая между верхним и нижним левыми поисковыми узорами. Полосы синхронизации начинаются с черного цвета, затем цвета чередуются через один. Если на их пути попадаются выравнивающие узоры, то вид узора не меняется, а происходит его наслоение на полосу.

Наслоение полос синхронизации на выравнивающие узоры

Код маски и уровня коррекции

Эти поля располагаются вдоль всех поисковых узоров. Поле, соприкасающееся с нижним краем верхнего правого узора идентично тому, что соприкасается с правым краем верхнего левого узора. Размеры этих полей 8 модулей. Точно так же идентичны поля соприкасающиеся с правым краем левого нижнего поискового узора и нижним краем левого верхнего узора. У них размеры 7 модулей.

Код версии тоже дублируется. С верхнего края правого поискового узора на левый край правого узора. Причем нижний код представляет собой копию того что снизу, только в зеркальном отображении иперевернутую на 90 градусов влево.

Оставшееся свободное место

Вся остальная поверхность изображения служит для занесения данных. Для этого свободное пространство разделяется на двухмодульные столбики. Начиная с правого нижнего угла матрицы, ее заполняют битами из байтов данных, двигаясь змейкой. Черные модули это единицы, а белые – нули. Первым будет правый нижний модуль, затем модуль слева от него, затем модуль над правым нижним, модуль над левым нижним и так далее, пока не дойдет до самого верха. От нее движение пойдет в обратном порядке – вниз, и затем опять вверх. И так пока не будет заполнено все пространство QR-матрицы.

Направление движения по QR-матрице при ее заполнении

При недостаточности данных, модули заполнятся нулями и останутся белыми (пустыми). На каждый модуль при размещении его на матрицу, накладываетсяодна из 8 масок:

  • 0 – (А + В) % 2;
  • 1 – В % 2;
  • 2 – А % 3;
  • 3 – (А + В) % 3;
  • 4 – (А/3 + В/2) % 2;
  • 5 – (А *В) % 2 + (А*В) % 3;
  • 6 – ((А*В) % 2 + (А*В) % 3) % 2;
  • 7 — ((А*В) % 3 + (А*В) % 2) % 2;

А обозначает столбец, В – строку, % — остаток от деления, / — целочисленное деление. 

Если в результате вычисления выражение получается равным нулю, цвет модуля для которого производилось вычисление, изменяется. То есть, если изначально модуль был белого цвета, и в результате вычислений был получен ноль, то этот модуль станет черного цвета. Аналогично и для модулей с черным цветом.

Для каждого модуля выбирается своя оптимальная маска. Но нередко для упрощения ее делают единой для всех модулей. 

Все вышеперечисленные этапы представляют собой алгоритм шифрования QR-кода, менять их последовательность нельзя, так как это приведет к не читаемости кода. Если все этапы пройдены верно, то в результате получается полноценный QR-код. 

Читать дальше:

Возможности QR кода

Основные возможности и структура QR-кода, необходимые для корректного шифрования и дешифрирования QR-изображений.

Использование QR-кодов маркетингом

При грамотном использовании QR-код может стать отличным помощником в деле продвижения товара на рынке.

Алгоритм QR-кода

Бывают случаи, когда просто необходимо прочесть QR-код, а телефона с необходимым для прочтения приложением нет. Читаем QR-код самостоятельно.

QR-код (англ. quick response — быстрый отклик)
— матричный код, разработанный японской
компанией «Denso-Wave» в 1994 году [1].

Естественно, что вместимость одной
кодовой матрицы не является безграничной.
Максимальное количество символов,
которые помещаются в одну матрицу
такое:

цифры — 7189; цифры и буквы (включая
кириллицу) — 4296; двоичный код — 2953 байт.

Наибольшее распространение рассматриваемый
код получил среди абонентов мобильной
связи. Пользователь может моментально
занести в свой мобильный телефон
(нетбук) текстовую информацию, контакты
в адресную книгу, перейти по web-ссылке,
отправить SMS-сообщение и т. д.

С помощью QR-кодов удобно
делать визитки и размещать их на майках,
фуражках, значках. Коды открывают большие
возможности для рекламы. За счет
размещения QR-кода на рекламном щите,
плакате (постере) или объявлении можно
привлечь большое число клиентов.

Для того чтобы сделать туристические
маршруты более информативными, на улицах
г. Львова (Украина) размещено более 80
изображений QR-кодов. Ими оснащены
коммерческие и культурные объекты, в
том числе памятники, архитектурные
сооружения.

QR-коды используются для
маркировки ответственных деталей.
Гравировка металлической поверхности
позволяет наносить код на детали,
подвергающиеся воздействиям высоких
температур, давлений или агрессивных
химических веществ. Данный код имеет
высокую помехоустойчивость. Даже при
наличии повреждений (искажений)
изображения на площади 30% всё еще есть
возможность безошибочно считывать
информацию.

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

QR-код не является единственным вариантом
2D штрих-кода. Известны и другие форматы:
DataMatrix, ScanLife EZcode и Microsoft Tag (Tag).

Три квадрата в углах изображения QR-кода
позволяют устройству распознавания
масштабировать изображение и правильно
определять его пространственную
ориентацию. Черные и белые точки
изображения преобразуются считывающим
устройством в двоичные числа. Затем
производится обработка цифровой
информации. На матрице размещается
системная информация, данные, корректирующие
биты [2]. При обработке используется
алгоритм Рида-Соломона, позволяющий
устранить треть возможных искажений
картинки.

QR-коды можно создавать с
различной степенью помехозащищенности.
Чем выше помехозащищенность, тем больше
избыточной информации содержит матрица.

QR-коды имеют 4 уровня
помехозащищенности (уровня коррекции
ошибок). Уровни коррекции ошибок
определяют долю информации, подлежащей
восстановлению за счет использования
корректирующего кода.

Уровень коррекции ошибок

Код

Допустимые искажения

L

01

7%

M

00

15%

Q

11

25%

H

10

30%

Уровни L и M
рекомендуется использовать для печати
кодов на пригласительных билетах,
визитках, плакатах, рекламных щитах и
т.д. Уровни Q и H
применяют для маркировки деталей, когда
существует высокая вероятность
повреждения изображения кода.

Таблица 4.1. показывает, как выглядит код
слова «Проба» при различных уровнях
помехоустойчивости. Из таблицы видно,
что с увеличением уровня помехоустойчивости
число элементов на матрице растет.

Таблица 4.2. демонстрирует высокую степень
помехоустойчивости QR-кодов.
Даже перечеркнутые матрицы позволяют
правильно декодировать информацию.

Следует обратить внимание, что считывание
информации прекращается в случаях,
когда существенно искажается один из
трех прямоугольников, отвечающих за
определение ориентации матрицы (см.
табл. 4.3). В тоже время наличие 20 – ти
цветных точек на изображении матрицы
не приводит к снижению надежности
считывания информации (см. табл. 4.4).

Таблица 4.1

7%

15%

25%

30%

Таблица 4.2

1

2

3

4

Таблица 4.3

1

2

3

4

Таблица 4.4

1

2

3

4

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

QR-код

QR-код (сокращение от английского Quick Response, что в переводе означает «Быстрый ответ») –  оптически считываемый матричный код, который способен хранить в закодированном виде обычный текст, URL-адрес веб-сайта,  номер телефона, адрес электронной почты и любые другие буквенно-цифровые данные в объеме до 4296 символов (QR-коды стандартизированы на международном уровне в соответствии с ISO 18004).

Наш QR-генератор STQR.RU умеет генерировать огромное количество статических и динамических QR-кодов в доступных графических форматах (JPG, PNG, SVG, EPS).

Статичные QR-коды

Выше представленный QR-код генератор БЕСПЛАТЕН для тех, кому нужно создать простой QR-код и графическое его изображение. Такие QR-коды можно создавать на нашем интернет-сервисе STQR.RU без регистрации. Такие QR-коды также называют постоянные QR-коды. Их срок действия, по сути, ничем не органичен, так как вся информация закодирована непосредственно в самом коде. Он будет действовать до тех пор, пока актуальна информация, закодированная в таком QR-коде. 

В STQR.RU Вы можете создать столько QR-кодов, сколько вам нужно БЕСПЛАТНО и без каких-либо ограничений для личного или коммерческого использования.

Динамические QR-коды

Это QR-код с закодированной интернет-ссылкой на страницу STQR.RU. После создания такого кода создаётся и соответствующая интернет страница с уникальным URL. Данные на этой странице могут быть отредактированы в любой момент времени через личный кабинет STQR.RU без вмешательства в сам QR-код (то есть изображение QR-кода при редактировании не меняется). На мобильной странице QR-кода может быть реализован дополнительный интерактивный функционал — формы обратной связи, форма получения скидочного купона, форма получения пригласительного билета итп.

Создание динамических QR-кодов возможно в STQR.RU только зарегистрированным пользователям. 

Как создать статический или динамический QR-код в STQR.RU?

Создание любого типа QR-кода (статичного или динамичного) выполняется в несколько простых шагов:

  • Шаг 1 Выберите тип QR-кода, который вам нужен, например, включая Текст, URL-ссылка, Визитная карточка, Географические координаты, Email, или сообщение электронной почты и т.д.. У нас есть более 50 разных типов данных QR-кодов на выбор, разделенных для удобства в несколько групп — Контакты, Платежи и др.
  • Шаг 2 Добавьте содержимое QR-кода. В зависимости от выбранного типа данных введите контент для QR-кода, например; URL веб-сайта, страницу Facebook, местоположение карты, данные электронного сообщения и т. д.
  • Шаг 3 Определите параметры изображения вашего будущего QR-кода. Измените цвет своего QR-кода, используя наш удобный подборщик цветов, задайте логотип, определите параметр коррекции ошибок и т.п..
  • Шаг 4 Определите какой QR-коды Вы хотите создать — Статичный или Динамичный
  • Шаг 5 Создайте свой QR-код. Загрузите полученное изображение QR-кода в доступных растровых и векторных форматах.

После создания, не забудьте проверить свой QR-код при помощи сканера QR-кодов.

Создание динамических QR-кодов возможно в STQR.RU только зарегистрированным пользователям. Для создания динамического QR-кодалюбого типа необходимо предварительно зарегистрироваться на нашем сервисе STQR.ru и пройти авторизацию.

Уровень коррекции ошибок QR-кодов

В процессе QR-кодирования наш генератор формирует текстовые данные, которые будут кодироваться непосредственно в сам QR-код. Кроме основных данных, согласно стандарту QR-кодирования, в код добавляется служебная  дополнительная информация, необходимая для успешного считывания и декодирования программой считывания QR-кода. Чем больше дополнительной информации добавляется в код (выше уровень коррекции ошибок), тем лучше такой QR-код будет считываться в дальнейшем, даже при потери части изображения кода. 
Доступные уровни коррекции ошибок приведены ниже:

  • Уровень L (допускается потеря до 7% площади изображения QR-кода) 
  • Уровень M (допускается потеря до 15% площади изображения QR-кода)  — используется по умолчанию
  • Уровень Q (допускается потеря до 25% площади изображения QR-кода) 
  • Уровень H (допускается потеря до 30% площади изображения QR-кода) 

Обратите внимание, что:

  • при увеличении уровня коррекции ошибок, увеличивается изображение QR-кода 
  • при использовании логотипа в изображении QR-кода, нужно использовать более высокий уровень коррекции ошибок

Как создавать много однотипных статичных или динамичных QR-кодов?

Обычно наши Пользователи создают много однотипных QR-кодов. Для этого в личном кабинете есть функция копирования (только для динамических QR-кодов) — можно скопировать ранее созданный QR-код и изменить в нем некоторые параметры. Однако, если требуется создать большое число однотипных QR-кодов за раз, то можно:

  • создавать QR-коды в пакетном режиме через модуль — Пакетный генератор QR-кодов
  • создавать QR-коды через программный интерфейс —  STQR API

Пакетный генератор позволяет создавать QR-коды путем загрузки специального пакетного текстового файла в формете CSV, который может быть создан в Excel или любом текстовом редакторе. Модуль доступен только на тарифных планах Профессиональный и Безлимитный.

STQR API позволяет создавать коды в автоматическом режиме из сторонних информационных систем, например, 1С, SAP, ActiveDirectory и др. Модуль доступен только на тарифных планах Безлимитный.

Понравилась статья? Поделить с друзьями:
  • R studio ошибка 483
  • Qnap ошибка обновления
  • Qnap не удалось обновить систему код ошибки 4
  • R studio ошибка 433
  • Qnap архив доступа к диску i o ошибка