Секреты USA в Micro QR Code M2 (часть 2)
или
Как читать алфавитно-цифровой режим в Micro QR Code версии М2
Встроенные в Micro QR Code технологии насыщенны мифами и нереальностями. Программисты моделисты часто добавляют артефакты и/или cookies в свои наработки, которые интересно находить при расшифровке кодов и алгоритмов. А затем и самому кодировать и декодировать практически любую информацию. Рассмотрим этапы расшифровки микрокода среднего микроуровня — М2 формата алфавитно-цифрового кодирования на том же самом историческом примере, что и М4, но в этот раз разделим сплошную фразу на четыре слова, получим: UNITED STATES OF AMERICA.
Примечание: здесь и далее информация будет приводиться с соответствующей ссылкой на официальный нормативный документ — ISO/IEC 18004–2015 (или российский вариант — ГОСТ ИСО/МЭК 18004–2015, далее — ГОСТ).
Например, информация о максимальном количестве символов в микрокодах и просто QR Code хранится в таблице 7 ГОСТ. Дальше немножко мифической составляющей…
Программные библиотеки, в которых хранятся все алгоритмы кодирования как Micro QR Code, так и QR Code, и которые свободно распространяются во всех популярных операционных системах, принадлежат Ассоциации GAFAM (Google, Apple, Facebook, Amazon, Microsoft). Территориальная и административная принадлежность данной Ассоциации — USA. Именно это и было заложено как критерий при декодировании последней в слове нечетной буквы (о чем было уже рассказано для M4 и будет продублировано для М3). Разложим каждое слово на отдельный микрокод (рис. 1). Почему все буквы большие — было расшифровано в М4 и будет расшифровано позже для М2 и M3.
Рисунок 1 — Micro QR Code версий М2 и М3
Рассмотрим пошагово алгоритмы расшифровки данных микрокодов. Для первых трех слов используется микрокод версии М2, а для четвертого — версия М3. Если автоматизировать алгоритм для одного микрокода одной версии, остальные будут требовать только изменения матрицы исходных данных и, возможно, маски. Далее, для простоты отображения математической составляющей и на данном коде, и на последующих будем использовать также продукцию Ассоциации — MS Excel.
Запускаем программное приложение. Готовим Лист Книги для работы. Делаем размерность ячеек одинаковой (например, 23 на 23 пикселя) и по горизонтали, и по вертикали (рис. 2a). Затем закрашиваем поле фоновым цветом (рис. 2b).
Рисунок 2a — Заготовка для работы (ячейки)
Рисунок 2b — Заготовка для работы
Если посчитать количество пикселей (квадратиков) микрокода UNITED (рис. 1) по горизонтали и/или по вертикали, то получится матрица (двухмерное дискретное поле) размерностью 13×13. Создадим новую схему шаблон для микрокода М2 (рис. 3).
Рисунок 3 — Матрица рабочей поверхности с нанесенными индикаторами М2
Перенесем битовую составляющую исходной матрицы первого слова UNITED (рис. 1) на рабочую поверхности (рис. 4a). К сожалению, за долгие годы MS Excel так и не научился работать с цветом ячеек. Добавим в каждую цветную ячейку соответствующее битовое значение: белая ячейка — 0, черная ячейка — 1 (рис. 4b).
Рисунок 4a — Заполненная матрица битовой составляющей исходных данных
Рисунок 4b — Матрица битовой составляющей исходных данных с обозначениями
Для удобства отделим цветом индикатор служебной информации (рис. 5a) — битовая последовательность информации о формате. Чтение последовательности, как и в М4, начинается с 14 бита, т.е. последовательность чтения будет 14, 13, 12, 11, 10 и т.д.
Также отделяем цветом индикатор распознавания микрокода (рис. 5b). Полученная матрица готова для дальнейшего анализа.
Рисунок 5a — Отделена цветом служебная информация
Рисунок 5b — Отделены цветом служебная информация и индикаторы
Примечание: для удобства дальнейшего описания ссылок на ячейки листа перейдем от современного отображения адресов ячеек в виде R1C1 (относительные ссылки) к старому формату в виде A1 (буквенно-числовое отображение). Выбираем в МенюФайл → Параметры. В категории Формулы в группе Работа с формулами снимаем галочку напротив пункта Стиль ссылокR1C1. В результате названия столбиков должны поменяться с чисел на латинские буквы (рис. 6).
Рисунок 6 — Итоговый результат отображения матрицы исходных данных
Этап 1. Служебная информация
Перед тем как начать работать с основной рабочей областью микрокода, необходимо расшифровать служебную информацию. Пример итогового результата приведен на рисунке 7.
Рисунок 7 — Расшифрованная служебная информация
Сначала переводим служебную информацию также в бинарное представление, т.е. ряды ячеек E12-L12 и L5-L12 представляем как набор 0 (светлые ячейки) и 1 (темные ячейки) (рис. 7).
Выносим служебную информацию из микрокода, т.е. дублируем полученный ряд в угловом представлении и в представлении — один ряд. Получаем следующие ссылочные ячейки:
Ячейка | Функция | Ячейка | Функция |
R12 | =E12 | R14 | =R12 |
S12 | =F12 | S14 | =S12 |
T12 | =G12 | T14 | =T12 |
U12 | =H12 | U14 | =U12 |
V12 | =I12 | V14 | =V12 |
W12 | =J12 | W14 | =W12 |
X12 | =K12 | X14 | =X12 |
Y12 | =L12 | Y14 | =Y12 |
Y11 | =L11 | Z14 | =Y11 |
Y10 | =L10 | AA14 | =Y10 |
Y9 | =L9 | AB14 | =Y9 |
Y8 | =L8 | AC14 | =Y8 |
Y7 | =L7 | AD14 | =Y7 |
Y6 | =L6 | AE14 | =Y6 |
Y5 | =L5 | AF14 | =Y5 |
Воспользуемся рядом бит служебной информации 14 строки для определения версии и уровня микрокода, а также для получения вида используемой в данном коде маски. Сначала найдем соответствие в таблице ГОСТ, потом сделаем самопроверку.
Объединяем ячейки R16-AF16 в единую. В полученную новую ячейку R16добавляем функцию (рис. 7):
=СЦЕП (R14: AF14)
По таблице С. 1 ГОСТ (табл. 1) находим битовую последовательность информации о формате и соответствующую последовательность бит данных до маскирования. Для данного примера — 00100.
Таблица 1 — Корректирующие последовательности информации о формате
Последовательность до маскирования | Последовательность после маскирования (символы Micro QR Code) | ||
Биты данных | Биты исправления ошибок | Двоичная | Шестнадцатеричная |
00000 | 0000000000 | 100010001000101 | 4445 |
00001 | 0100110111 | 100000101110010 | 4172 |
00010 | 1001101110 | 100111000101011 | 4Е2В |
00011 | 1101011001 | 100101100011100 | 4В1С |
00100 | 0111101011 | 101010110101110 | 55АЕ |
00101 | 0011011100 | 101000010011001 | 5099 |
00110 | 1110000101 | 101111111000000 | 5FC0 |
00111 | 1010110010 | 101101011110111 | 5AF7 |
01000 | 1111010110 | 110011110010011 | 6793 |
01001 | 1011100001 | 110001010100100 | 62А4 |
01010 | 0110111000 | 110110111111101 | 6DFD |
01011 | 0010001111 | 110100011001010 | 68СА |
01100 | 1000111101 | 111011001111000 | 7678 |
01101 | 1100001010 | 111001101001111 | 734F |
01110 | 0001010011 | 111110000010110 | 7С16 |
01111 | 0101100100 | 111100100100001 | 7921 |
10000 | 1010011011 | 000011011011110 | 06DE |
10001 | 1110101100 | 000001111101001 | 03Е9 |
10010 | 0011110101 | 000110010110000 | 0CB0 |
10011 | 0111000010 | 000100110000111 | 0987 |
10100 | 1101110000 | 001011100110101 | 1735 |
10101 | 1001000111 | 001001000000010 | 1202 |
10110 | 0100011110 | 001110101011011 | 1D5B |
10111 | 0000101001 | 001100001101100 | 186С |
11000 | 0101001101 | 010010100001000 | 2508 |
11001 | 0001111010 | 010000000111111 | 203F |
11010 | 1100100011 | 010111101100110 | 2F66 |
11011 | 1000010100 | 010101001010001 | 2А51 |
11100 | 0010100110 | 011010011100011 | 34E3 |
11101 | 0110010001 | 011000111010100 | 31D4 |
11110 | 1011001000 | 011111010001101 | 3E8D |
11111 | 1111111111 | 011101110111010 | ЗВВА |
Проверим полученный результат. Заполняем ячейки в соответствии с таблицей:
Ячейка | Функция | Ячейка | Функция |
AB6 | =R14 | AB7 | 1 |
AC6 | =S14 | AC7 | 0 |
AD6 | =T14 | AD7 | 0 |
AE6 | =U14 | AE7 | 0 |
AF6 | =V14 | AF7 | 1 |
Воспользуемся алгебраической функцией XOR для получения версии и уровня микрокода, и кода маски. Заполняем ячейки восьмой строчки:
Ячейка | Функция |
AB8 | =БИТ.ИСКЛИЛИ(AB6; AB7) |
AC8 | =БИТ.ИСКЛИЛИ(AC6; AC7) |
AD8 | =БИТ.ИСКЛИЛИ(AD6; AD7) |
AE8 | =БИТ.ИСКЛИЛИ(AE6; AE7) |
AF8 | =БИТ.ИСКЛИЛИ(AF6; AF7) |
В результате получаем последовательность 00100, полностью соответствующую полученной по таблице ГОСТ. Расшифруем полученную комбинацию. Разделим на две части: 001 и 00 (3 и 2 бита соответственно). Обратимся к таблице 13 ГОСТ (табл. 2).
Таблица 2 — Номер символа для Micro QR Code
Номер символа | Версия | Уровень исправления ошибок | Двоичный индикатор |
0 | М1 | Только обнаружение | 000 |
1 | М2 | L | 001 |
2 | М2 | М | 010 |
3 | М3 | L | 011 |
4 | М3 | М | 100 |
5 | М4 | L | 101 |
6 | М4 | М | 110 |
7 | М4 | Q | 111 |
Получаем, что в данном микрокоде используется версия М2, уровень L, т.е. комбинация M2-L. Запомним, на последующих этапах данная информация пригодится.
Разбираем вторую часть служебной информации, комбинацию маски 00. Обратимся к рисунку 22 ГОСТ. Перенесем маску с соответствующим битовым кодом на Лист, начиная с ячейки AJ4 (рис. 8).
Рисунок 8 — Выбранная маска для микрокода
Аналогично основной матрице, каждая черная ячейка обозначена как 1, а каждая белая — 0.
Все необходимые данные на основе служебной информации получены, переходим ко 2-му этапу.
Этап 2. Расшифровка данных основной рабочей области
На основе матрицы исходных данных в диапазоне ячеек D4: P16 и матрицы маскирования в диапазоне ячеек AJ4: AV16 получаем матрицу немаскированных данных в диапазоне ячеек D20: P32 с использованием функции XOR. Пример готового результата представлен на рисунке 9.
Рисунок 9 — Матрица немаскированных данных
В ячейке M21 добавлена следующая формула:
=БИТ.ИСКЛИЛИ (M5; AS5)
Далее за нижний правый угол выделенной ячейки (магический квадрат) дублируем данную формулу на всю поверхность рабочей матрицы. В результате получаем немаскированный вариант для диапазона ячеек M21: P32 и E29: L32.
Самый простой вариант для подготовки к следующему этапу, перенести полученную немаскированную матрицу в таблицу символов вручную. Но это не так интересно. Подготовим таблицу маршрута и заготовку для заполнения битовых комбинаций с учетом особенностей алфавитно-цифрового режима.
На основе таблицы 13 ГОСТ (табл. 2) определили, что в данной матрице используется формат и уровень M2-L. Обратимся к рисунку 11 ГОСТ, получаем, что маршрут будет представлен следующей схемой (рис. 10).
Рисунок 10 — Маршрут обхода рабочего поля для M2-L
Перенесем маршрут на Лист MS Excel, начиная с ячейки AJ20, где каждую ячейку подпишем соответствующим числовым значением. Результат представлен на рисунке 11.
Рисунок 11 — Маршрут обхода рабочего поля для M2-L на рабочем листе
Напомню: не обязательно каждую ячейку прописывать вручную. MS Excel умеет строить прогрессии. Например, заполняем ячейки AV32 и AV31 значениями 1 и 3 соответственно. Затем выделяем заполненные ячейки AV32: AV31 и за магический квадратик выделенного диапазона (нижний правый угол ячейки) тянем до ячейки AV21. В результате весь ряд будет заполнен. Остальное рабочее поле можно заполнить аналогичным образом.
Начиная с ячейки T20 в диапазоне ячеек T20: AD27 делаем шаблон-заготовку для последующего наполнения битовой комбинацией в буквенно-цифровом режиме. Пример полученного результата представлен на рисунке 12 (цветовая дифференциация произвольная).
Рисунок 12 — Шаблон-заготовка для битовых комбинаций
Так как этой информации достаточно для расшифровки сообщения, переходим к завершающему третьему этапу.
Этап 3. Преобразование кода в набор символов
В системе QR Code (в том числе и Micro QR Code) существует несколько разновидностей кодирования: числовой, алфавитно-цифровой, байтовый, кандзи, структурированное соединение и FNC1. Самые простые — числовой (число определенной длины из цифр 0…9) и алфавитно-цифровой (табл. 3).
Таблица 3 — Кодирование/декодирование для алфавитно-цифрового режима (Таблица 5 ГОСТ)
Знак | Значение | Знак | Значение | Знак | Значение | Знак | Значение | Знак | Значение | Знак | Значение | Знак | Значение | Знак | Значение |
0 | 0 | 6 | 6 | С | 12 | I | 18 | О | 24 | U | 30 | SP | 36 | . | 42 |
1 | 1 | 7 | 7 | D | 13 | J | 19 | Р | 25 | V | 31 | $ | 37 | / | 43 |
2 | 2 | 8 | 8 | Е | 14 | К | 20 | Q | 26 | W | 32 | % | 38 | : | 44 |
3 | 3 | 9 | 9 | F | 15 | L | 21 | R | 27 | X | 33 | * | 39 | ||
4 | 4 | А | 10 | G | 16 | М | 22 | S | 28 | Y | 34 | + | 40 | ||
5 | 5 | В | 11 | Н | 17 | N | 23 | Т | 29 | Z | 35 | - | 41 |
В данной таблице есть особенность — используется исключительно латиница верхнего регистра, т.е. большие буквы. Особенность не простая. Данную систему кодирования придумала и эффективно использовала команда разработчиков в 50–60-е годы при переходе от печатных машинок к электронным печатным машинкам.
Воспользуемся п. 7.4.4 ГОСТ для автоматизации преобразования битовых последовательностей в буквы латинского алфавита. Пример итогового варианта представлен на рисунке 13.
Рисунок 13 — Итоговый пример третьего этапа
Сначала перенесем таблицу 3 на рабочий Лист MS Excel. Начиная с ячейки B34 в выделенном диапазоне B34: AT35 просто переносим всю последовательность символов в две строки (рис. 13).
Как было упомянуто ранее, битовые комбинации в диапазон ячеек T20: AD27 можно перенести вручную (простой вариант). Но можно и автоматизировать. Таблица функций заполнит битовые ячейки автоматически (табл. 4).
Таблица 4 — Функциональные ячейки битовых последовательностей
№ п/п | Ячейка | Функция |
Первая строка | ||
1. | T21 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (T20;$AV$21:$AV$32;0); ПОИСКПОЗ (T20; AK32: AV32;0)) |
2. | U21 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (U20;$AU$21:$AU$32;0); ПОИСКПОЗ (U20; AK32: AV32;0)) |
3. | V21 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (V20;$AV$21:$AV$32;0); ПОИСКПОЗ (V20; AK31: AV31;0)) |
4. | W21 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (W20;$AU$21:$AU$32;0); ПОИСКПОЗ (W20; AK31: AV31;0)) |
Вторая строка | ||
5. | T23 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (T22;$AV$21:$AV$32;0); ПОИСКПОЗ (T22; AK30: AV30;0)) |
6. | U23 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (U22;$AU$21:$AU$32;0); ПОИСКПОЗ (U22; AK30: AV30;0)) |
7. | V23 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (V22;$AV$21:$AV$32;0); ПОИСКПОЗ (V22; AK29: AV29;0)) |
8. | W23 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (W22;$AU$21:$AU$32;0); ПОИСКПОЗ (W22; AK29: AV29;0)) |
9. | X23 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (X22;$AV$21:$AV$32;0); ПОИСКПОЗ (X22; AK28: AV28;0)) |
10. | Y23 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (Y22;$AU$21:$AU$32;0); ПОИСКПОЗ (Y22; AK28: AV28;0)) |
11. | Z23 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (Z22;$AV$21:$AV$32;0); ПОИСКПОЗ (Z22; AK27: AV27;0)) |
12. | AA23 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (AA22;$AU$21:$AU$32;0); ПОИСКПОЗ (AA22; AK27: AV27;0)) |
13. | AB23 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (AB22;$AV$21:$AV$32;0); ПОИСКПОЗ (AB22; AK26: AV26;0)) |
14. | AC23 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (AC22;$AU$21:$AU$32;0); ПОИСКПОЗ (AC22; AK26: AV26;0)) |
15. | AD23 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (AD22;$AV$21:$AV$32;0); ПОИСКПОЗ (AD22; AK25: AV25;0)) |
Третья строка | ||
16. | T25 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (T24;$AU$21:$AU$32;0); ПОИСКПОЗ (T24; AK25: AV25;0)) |
17. | U25 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (U24;$AV$21:$AV$32;0); ПОИСКПОЗ (U24; AK24: AV24;0)) |
18. | V25 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (V24;$AU$21:$AU$32;0); ПОИСКПОЗ (V24; AK24: AV24;0)) |
19. | W25 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (W24;$AV$21:$AV$32;0); ПОИСКПОЗ (W24; AK23: AV23;0)) |
20. | X25 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (X24;$AU$21:$AU$32;0); ПОИСКПОЗ (X24; AK23: AV23;0)) |
21. | Y25 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (Y24;$AV$21:$AV$32;0); ПОИСКПОЗ (Y24; AK22: AV22;0)) |
22. | Z25 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (Z24;$AU$21:$AU$32;0); ПОИСКПОЗ (Z24; AK22: AV22;0)) |
23. | AA25 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (AA24;$AV$21:$AV$32;0); ПОИСКПОЗ (AA24; AK21: AV21;0)) |
24. | AB25 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (AB24;$AU$21:$AU$32;0); ПОИСКПОЗ (AB24; AK21: AV21;0)) |
25. | AC25 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (AC24;$AT$21:$AT$32;0); ПОИСКПОЗ (AC24; AK21: AV21;0)) |
26. | AD25 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (AD24;$AS$21:$AS$32;0); ПОИСКПОЗ (AD24; AK21: AV21;0)) |
Четвертая строка | ||
27. | T27 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (T26;$AT$21:$AT$32;0); ПОИСКПОЗ (T26; AK22: AV22;0)) |
28. | U27 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (U26;$AS$21:$AS$32;0); ПОИСКПОЗ (U26; AK22: AV22;0)) |
29. | V27 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (V26;$AT$21:$AT$32;0); ПОИСКПОЗ (V26; AK23: AV23;0)) |
30. | W27 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (W26;$AS$21:$AS$32;0); ПОИСКПОЗ (W26; AK23: AV23;0)) |
31. | X27 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (X26;$AT$21:$AT$32;0); ПОИСКПОЗ (X26; AK24: AV24;0)) |
32. | Y27 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (Y26;$AS$21:$AS$32;0); ПОИСКПОЗ (Y26; AK24: AV24;0)) |
33. | Z27 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (Z26;$AT$21:$AT$32;0); ПОИСКПОЗ (Z26; AK25: AV25;0)) |
34. | AA27 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (AA26;$AS$21:$AS$32;0); ПОИСКПОЗ (AA26; AK25: AV25;0)) |
35. | AB27 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (AB26;$AT$21:$AT$32;0); ПОИСКПОЗ (AB26; AK26: AV26;0)) |
36. | AC27 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (AC26;$AS$21:$AS$32;0); ПОИСКПОЗ (AC26; AK26: AV26;0)) |
37. | AD27 | =ИНДЕКС ($E$21:$P$32; ПОИСКПОЗ (AD26;$AT$21:$AT$32;0); ПОИСКПОЗ (AD26; AK27: AV27;0)) |
Воспользуемся алгоритмом, приведенным п. 7.4.4 ГОСТ.
1. Объединим ячейки битовых комбинаций в одну в каждой строчке.
№ п/п | Ячейка | Функция |
1. | AE23 | =СЦЕП(T23: AD23) |
2. | AE25 | =СЦЕП(T25: AD25) |
3. | AE27 | =СЦЕП(T27: AD27) |
2. Переводим полученную двоичную кодовую комбинацию в десятичный формат.
№ п/п | Ячейка | Функция |
1. | AF23 | =ДЕС(AE23;2) |
2. | AF25 | =ДЕС(AE25;2) |
3. | AF27 | =ДЕС(AE27;2) |
3. Находим код первой буквы закодированного слога.
№ п/п | Ячейка | Функция |
1. | AE22 | =ЧАСТНОЕ(AF23;45) |
2. | AE24 | =ЧАСТНОЕ(AF25;45) |
3. | AE26 | =ЧАСТНОЕ(AF27;45) |
4. Находим код второй буквы закодированного слога.
№ п/п | Ячейка | Функция |
1. | AF22 | =AF23-AE22×45 |
2. | AF24 | =AF25-AE24×45 |
3. | AF26 | =AF27-AE26×45 |
5. По полученной кодовой позиции получаем декодированный символ.
№ п/п | Ячейка | Функция |
1. | S22 | =ИНДЕКС($B$34:$AT$34; ПОИСКПОЗ(AE22;$B$35:$AT$35;0)) |
2. | S23 | =ИНДЕКС($B$34:$AT$34; ПОИСКПОЗ(AF22;$B$35:$AT$35;0)) |
3. | S24 | =ИНДЕКС($B$34:$AT$34; ПОИСКПОЗ(AE24;$B$35:$AT$35;0)) |
4. | S25 | =ИНДЕКС($B$34:$AT$34; ПОИСКПОЗ(AF24;$B$35:$AT$35;0)) |
5. | S26 | =ИНДЕКС($B$34:$AT$34; ПОИСКПОЗ(AE26;$B$35:$AT$35;0)) |
6. | S27 | =ИНДЕКС($B$34:$AT$34; ПОИСКПОЗ(AF26;$B$35:$AT$35;0)) |
6. Добавляем служебную информацию.
№ п/п | Ячейка | Функция |
1. | Y21-Z21 | =U21&V21&W21 |
2. | AA21 | =ДЕС (Y21;2) |
В ячейке T21 спрятана цифра — 1, обозначение буквенно-цифрового режима (табл. 2 ГОСТ). В ячейках U21: W21 спрятана битовая последовательность количества символов. В полученном значении в ячейке AA21 — 6 символов (что полностью соответствует исходным данным).
В результате получена комбинация из последовательности букв латинского алфавита:
UNITED
или
United
Добавляем новый Лист в Книгу MS Excel. Копируем рабочий Лист UNITED на новый пустой. Практически все готово для следующего слова — STATES, надо только поменять исходную матрицу. Проверим…
Пример готового результата представлен на рисунке 14.
Рисунок 14 — Изменена битовая матрица с исходными данными
Как и следовало ожидать, будет применена аналогичная маска с кодом 00. Следовательно ничего изменять не надо. Смотрим результат (рис. 15).
Рисунок 15 — Результат работы алгоритма
Получена комбинация из последовательности букв латинского алфавита:
STATES
или
States
Добавляем новый Лист в Книгу MS Excel. Копируем рабочий Лист STATES на новый пустой. Исходный лист готов для следующего слова — OF, для начала надо поменять исходную матрицу.
Пример готового результата представлен на рисунке 16.
Рисунок 16 — Изменена битовая матрица с исходными данными
Как и следовало ожидать, так как кодовое слово сильно отличается количеством символов, то будет применена другая маска с кодом 10. И уровень уже не L, а M, т.е. будет M2-M. Для разработанного алгоритма изменение уровня не сильно повлияет на результат. Надо только поменять маску.
Обратимся к рисунку 22 ГОСТ. Перенесем другую маску с соответствующим битовым кодом на Лист, начиная с ячейки AJ4 (рис. 17).
Рисунок 17 — Применена новая маска
Матрица немаскированной битовой комбинации должна автоматически поменяться. Так как всего две латинские буквы, то лишние последовательности в результирующей таблице можно удалить, оставить только до 15 бита.
Смотрим результат (рис. 18).
Рисунок 18 — Результат работы алгоритма
Получена комбинация из последовательности букв латинского алфавита:
OF
или
of
Удачи в декодировании Micro QR Code версии M2!!!