Секреты USA в Micro QR Code M2 (часть 3)
или
Как читать алфавитно-цифровой режим в Micro QR Code версии М3
Встроенные в Micro QR Code технологии насыщенны мифами и нереальностями. Программисты моделисты часто добавляют артефакты и/или cookies в свои наработки, которые интересно находить при расшифровке кодов и алгоритмов. А затем и самому кодировать и декодировать практически любую информацию. Рассмотрим этапы расшифровки микрокода среднего микроуровня — М3 формата алфавитно-цифрового кодирования на том же самом историческом примере, что и М2, и М4, аналогично М2 разделим сплошную фразу на четыре слова, получим: 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 (первая подсказка для 4 этапа). Именно это и было заложено как критерий при декодировании последней в слове нечетной буквы (о чем было уже рассказано для M4и будет продублировано для М3). Разложим каждое слово на отдельный микрокод (рис. 1). Почему все буквы большие — было расшифровано в М4 и М2 и будет расшифровано для М3.
Рисунок 1 — Micro QR Code версий М2 и М3
Рассмотрим пошагово алгоритмы расшифровки данных микрокодов. Для первых трех слов используется микрокод версии М2, а для четвертого — версия М3. Если автоматизировать алгоритм для одного микрокода одной версии, остальные будут требовать только изменения матрицы исходных данных и, возможно, маски. Далее, для простоты отображения математической составляющей и на данном коде, и на последующих будем использовать также продукцию Ассоциации — MS Excel.
Запускаем программное приложение. Готовим Лист Книги для работы. Делаем размерность ячеек одинаковой (например, 23 на 23 пикселя) и по горизонтали, и по вертикали (рис. 2a). Затем закрашиваем поле фоновым цветом (рис. 2b).
Рисунок 2a — Заготовка для работы (ячейки)
Рисунок 2b — Заготовка для работы
Если посчитать количество пикселей (квадратиков) микрокода AMERICA (рис. 1) по горизонтали и/или по вертикали, то получится матрица (табличка) размерностью 15×15. Создадим новую схему шаблон для микрокода М3 (рис. 3).
Рисунок 3 — Матрица рабочей поверхности с нанесенными индикаторами
Перенесем битовую составляющую исходной матрицы первого слова AMERICA (рис. 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).
Выносим служебную информацию из микрокода, т.е. дублируем полученный ряд в угловом представлении и в представлении — один ряд. Получаем следующие ссылочные ячейки:
Ячейка | Функция | Ячейка | Функция |
T12 | =E12 | T14 | =T12 |
U12 | =F12 | U14 | =U12 |
V12 | =G12 | V14 | =V12 |
W12 | =H12 | W14 | =W12 |
X12 | =I12 | X14 | =X12 |
Y12 | =J12 | Y14 | =Y12 |
Z12 | =K12 | Z14 | =Z12 |
AA12 | =L12 | AA14 | =AA12 |
AA11 | =L11 | AB14 | =AA11 |
AA10 | =L10 | AC14 | =AA10 |
AA9 | =L9 | AD14 | =AA9 |
AA8 | =L8 | AE14 | =AA8 |
AA7 | =L7 | AF14 | =AA7 |
AA6 | =L6 | AG14 | =AA6 |
AA5 | =L5 | AH14 | =AA5 |
Воспользуемся рядом бит служебной информации 14 строки для определения версии и уровня микрокода, а также для получения вида используемой в данном коде маски. Сначала найдем соответствие в таблице ГОСТ, потом сделаем самопроверку.
Объединяем ячейки T16-AH16 в единую. В полученную новую ячейку T16добавляем функцию (рис. 7):
=СЦЕП(T14: AH14)
По таблице С. 1 ГОСТ (табл. 1) находим битовую последовательность информации о формате и соответствующую последовательность бит данных до маскирования. Для данного примера — 10010.
Hidden text
Таблица 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 | ЗВВА |
Проверим полученный результат. Заполняем ячейки в соответствии с таблицей:
Ячейка | Функция | Ячейка | Функция |
AD6 | =T14 | AD7 | 1 |
AE6 | =U14 | AE7 | 0 |
AF6 | =V14 | AF7 | 0 |
AG6 | =W14 | AG7 | 0 |
AH6 | =X14 | AH7 | 1 |
Воспользуемся алгебраической функцией XOR для получения версии и уровня микрокода, и кода маски. Заполняем ячейки восьмой строчки:
Ячейка | Функция |
AD8 | =БИТ.ИСКЛИЛИ(AD6; AD7) |
AE8 | =БИТ.ИСКЛИЛИ(AE6; AE7) |
AF8 | =БИТ.ИСКЛИЛИ(AF6; AF7) |
AG8 | =БИТ.ИСКЛИЛИ(AG6; AG7) |
AH8 | =БИТ.ИСКЛИЛИ(AH6; AH7) |
В результате получаем последовательность 10010, полностью соответствующую полученной по таблице ГОСТ. Расшифруем полученную комбинацию. Разделим на две части: 100 и 10 (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 |
Получаем, что в данном микрокоде используется версия М3, уровень M, т.е. комбинация M3-M. Запомним, на последующих этапах данная информация пригодится.
Разбираем вторую часть служебной информации, комбинацию маски 10. Обратимся к рисунку 22 ГОСТ. Перенесем маску с соответствующим битовым кодом на Лист, начиная с ячейки AJ4 (рис. 8).
Рисунок 8 — Выбранная маска для микрокода
Аналогично основной матрице, каждая черная ячейка обозначена как 1, а каждая белая — 0.
Все необходимые данные на основе служебной информации получены, переходим ко 2-му этапу.
Этап 2. Расшифровка данных основной рабочей области
На основе матрицы исходных данных в диапазоне ячеек D4: R18 и матрицы маскирования в диапазоне ячеек AL4: AZ18 получаем матрицу немаскированных данных в диапазоне ячеек D20: P32 с использованием функции XOR. Пример готового результата представлен на рисунке 9.
Рисунок 9 — Матрица немаскированных данных
В ячейке M23 добавлена следующая формула:
=БИТ.ИСКЛИЛИ(M5; AU5)
Далее за нижний правый угол выделенной ячейки (магический квадрат) дублируем данную формулу на всю поверхность рабочей матрицы. В результате получаем немаскированный вариант для диапазона ячеек M23: R36 и E31: K36.
Самый простой вариант для подготовки к следующему этапу, перенести полученную немаскированную матрицу в таблицу символов вручную. Но это не так интересно. Подготовим таблицу маршрута и заготовку для заполнения битовых комбинаций с учетом особенностей алфавитно-цифрового режима.
На основе таблицы 13 ГОСТ (табл. 2) определили, что в данной матрице используется формат и уровень M3-M. Обратимся к рисунку 11 ГОСТ, получаем, что маршрут будет представлен следующей схемой (рис. 10).
Рисунок 10 — Маршрут обхода рабочего поля для M3-M
Перенесем маршрут на Лист MS Excel, начиная с ячейки AL22, где каждую ячейку подпишем соответствующим числовым значением.
Примечание: приведенный в ГОСТ маршрут для M3-M неверный. Если присмотреться внимательнее, то оба маршрута (M3-M и M3-L) дублируют друг друга и не вносят изменения. Данная ошибка не исправлена далее в алгоритме. Приводится маршрут для M3-M с точки зрения разработчиков бесплатного программного модуля Ассоциации.
Результат представлен на рисунке 11.
Рисунок 11 — Маршрут обхода рабочего поля для M3-M на рабочем листе
Напомню: не обязательно каждую ячейку прописывать вручную. MS Excel умеет строить прогрессии. Например, заполняем ячейки AZ36 и AZ35 значениями 1 и 3 соответственно. Затем выделяем заполненные ячейки AZ36: AZ35 и за магический квадратик выделенного диапазона (нижний правый угол ячейки) тянем до ячейки AZ23. В результате весь ряд будет заполнен. Остальное рабочее поле можно заполнить аналогичным образом.
Начиная с ячейки V22 в диапазоне ячеек V22: AF31 делаем шаблон-заготовку для последующего наполнения битовой комбинацией в буквенно-цифровом режиме. Пример полученного результата представлен на рисунке 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-е годы при переходе от печатных машинок к электронным печатным машинкам. Встроенная система кодирования имеет скрытый алгоритм преобразования (а это вторая подсказка для ребуса 4 этапа).
Воспользуемся п. 7.4.4 ГОСТ для автоматизации преобразования битовых последовательностей в буквы латинского алфавита. Пример итогового варианта представлен на рисунке 13.
Рисунок 13 — Итоговый пример третьего этапа
Сначала перенесем таблицу 3 на рабочий Лист MS Excel. Начиная с ячейки B38 в выделенном диапазоне B38: AT39 просто переносим всю последовательность символов в две строки (рис. 13).
Как было упомянуто ранее, битовые комбинации в диапазон ячеек V22: AF31 можно перенести вручную (простой вариант). Но можно и автоматизировать. Таблица функций заполнит битовые ячейки автоматически (табл. 4).
Hidden text
Таблица 4 — Функциональные ячейки битовых последовательностей
№ п/п | Ячейка | Функция |
Первая строка | ||
1. | V23 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (V22;$AZ$23:$AZ$36;0); ПОИСКПОЗ (V22; AM36: AZ36;0)) |
2. | W23 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (W22;$AY$23:$AY$36;0); ПОИСКПОЗ (W22; AM36: AZ36;0)) |
3. | X23 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (X22;$AZ$23:$AZ$36;0); ПОИСКПОЗ (X22; AM35: AZ35;0)) |
4. | Y23 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (Y22;$AY$23:$AY$36;0); ПОИСКПОЗ (Y22; AM35: AZ35;0)) |
5. | Z23 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (Z22;$AZ$23:$AZ$36;0); ПОИСКПОЗ (Z22; AM34: AZ34;0)) |
6. | AA23 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AA22;$AY$23:$AY$36;0); ПОИСКПОЗ (AA22; AM34: AZ34;0)) |
Вторая строка | ||
7. | V25 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (V24;$AZ$23:$AZ$36;0); ПОИСКПОЗ (V24; AM33: AZ33;0)) |
8. | W25 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (W24;$AY$23:$AY$36;0); ПОИСКПОЗ (W24; AM33: AZ33;0)) |
9. | X25 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (X24;$AZ$23:$AZ$36;0); ПОИСКПОЗ (X24; AM32: AZ32;0)) |
10. | Y25 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (Y24;$AY$23:$AY$36;0); ПОИСКПОЗ (Y24; AM32: AZ32;0)) |
11. | Z25 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (Z24;$AZ$23:$AZ$36;0); ПОИСКПОЗ (Z24; AM31: AZ31;0)) |
12. | AA25 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AA24;$AY$23:$AY$36;0); ПОИСКПОЗ (AA24; AM31: AZ31;0)) |
13. | AB25 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AB24;$AZ$23:$AZ$36;0); ПОИСКПОЗ (AB24; AM30: AZ30;0)) |
14. | AC25 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AC24;$AY$23:$AY$36;0); ПОИСКПОЗ (AC24; AM30: AZ30;0)) |
15. | AD25 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AD24;$AZ$23:$AZ$36;0); ПОИСКПОЗ (AD24; AM29: AZ29;0)) |
16. | AE25 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AE24;$AY$23:$AY$36;0); ПОИСКПОЗ (AE24; AM29: AZ29;0)) |
17. | AF25 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AF24;$AZ$23:$AZ$36;0); ПОИСКПОЗ (AF24; AM28: AZ28;0)) |
Третья строка | ||
18. | V27 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (V26;$AY$23:$AY$36;0); ПОИСКПОЗ (V26; AM28: AZ28;0)) |
19. | W27 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (W26;$AZ$23:$AZ$36;0); ПОИСКПОЗ (W26; AM27: AZ27;0)) |
20. | X27 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (X26;$AY$23:$AY$36;0); ПОИСКПОЗ (X26; AM27: AZ27;0)) |
21. | Y27 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (Y26;$AZ$23:$AZ$36;0); ПОИСКПОЗ (Y26; AM26: AZ26;0)) |
22. | Z27 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (Z26;$AY$23:$AY$36;0); ПОИСКПОЗ (Z26; AM26: AZ26;0)) |
23. | AA27 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AA26;$AZ$23:$AZ$36;0); ПОИСКПОЗ (AA26; AM25: AZ25;0)) |
24. | AB27 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AB26;$AY$23:$AY$36;0); ПОИСКПОЗ (AB26; AM25: AZ25;0)) |
25. | AC27 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AC26;$AZ$23:$AZ$36;0); ПОИСКПОЗ (AC26; AM24: AZ24;0)) |
26. | AD27 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AD26;$AZ$23:$AZ$36;0); ПОИСКПОЗ (AD26; AM23: AZ23;0)) |
27. | AE27 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AE26;$AY$23:$AY$36;0); ПОИСКПОЗ (AE26; AM24: AZ24;0)) |
28. | AF27 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AF26;$AY$23:$AY$36;0); ПОИСКПОЗ (AF26; AM23: AZ23;0)) |
Четвертая строка | ||
29. | V29 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (V28;$AX$23:$AX$36;0); ПОИСКПОЗ (V28; AM23: AZ23;0)) |
30. | W29 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (W28;$AX$23:$AX$36;0); ПОИСКПОЗ (W28; AM24: AZ24;0)) |
31. | X29 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (X28;$AW$23:$AW$36;0); ПОИСКПОЗ (X28; AM23: AZ23;0)) |
32. | Y29 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (Y28;$AW$23:$AW$36;0); ПОИСКПОЗ (Y28; AM24: AZ24;0)) |
33. | Z29 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (Z28;$AX$23:$AX$36;0); ПОИСКПОЗ (Z28; AM25: AZ25;0)) |
34. | AA29 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AA28;$AW$23:$AW$36;0); ПОИСКПОЗ (AA28; AM25: AZ25;0)) |
35. | AB29 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AB28;$AX$23:$AX$36;0); ПОИСКПОЗ (AB28; AM26: AZ26;0)) |
36. | AC29 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AC28;$AW$23:$AW$36;0); ПОИСКПОЗ (AC28; AM26: AZ26;0)) |
37. | AD29 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AD28;$AX$23:$AX$36;0); ПОИСКПОЗ (AD28; AM27: AZ27;0)) |
38. | AE29 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AE28;$AW$23:$AW$36;0); ПОИСКПОЗ (AE28; AM27: AZ27;0)) |
39. | AF29 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AF28;$AX$23:$AX$36;0); ПОИСКПОЗ (AF28; AM28: AZ28;0)) |
Пятая строка | ||
40. | V31 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (V30;$AW$23:$AW$36;0); ПОИСКПОЗ (V30; AM28: AZ28;0)) |
41. | W31 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (W30;$AX$23:$AX$36;0); ПОИСКПОЗ (W30; AM29: AZ29;0)) |
42. | X31 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (X30;$AW$23:$AW$36;0); ПОИСКПОЗ (X30; AM29: AZ29;0)) |
43. | Y31 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (Y30;$AX$23:$AX$36;0); ПОИСКПОЗ (Y30; AM30: AZ30;0)) |
44. | Z31 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (Z30;$AW$23:$AW$36;0); ПОИСКПОЗ (Z30; AM30: AZ30;0)) |
45. | AA31 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AA30;$AX$23:$AX$36;0); ПОИСКПОЗ (AA30; AM31: AZ31;0)) |
46. | AB31 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AB30;$AW$23:$AW$36;0); ПОИСКПОЗ (AB30; AM31: AZ31;0)) |
47. | AC31 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AC30;$AX$23:$AX$36;0); ПОИСКПОЗ (AC30; AM32: AZ32;0)) |
48. | AD31 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AD30;$AW$23:$AW$36;0); ПОИСКПОЗ (AD30; AM32: AZ32;0)) |
49. | AE31 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AE30;$AX$23:$AX$36;0); ПОИСКПОЗ (AE30; AM33: AZ33;0)) |
50. | AF31 | =ИНДЕКС ($E$23:$R$36; ПОИСКПОЗ (AF30;$AW$23:$AW$36;0); ПОИСКПОЗ (AF30; AM33: AZ33;0)) |
Воспользуемся алгоритмом, приведенным п. 7.4.4 ГОСТ.
1. Объединим ячейки битовых комбинаций в одну в каждой строчке.
№ п/п | Ячейка | Функция |
1. | AG25 | =СЦЕП(V25: AF25) |
2. | AG27 | =СЦЕП(V27: AF27) |
3. | AG29 | =СЦЕП(V29: AF29) |
2. Переводим полученную двоичную кодовую комбинацию в десятичный формат.
№ п/п | Ячейка | Функция |
1. | AH25 | =ДЕС(AG25;2) |
2. | AH27 | =ДЕС(AG27;2) |
3. | AH29 | =ДЕС(AG29;2) |
3. Находим код первой буквы закодированного слога.
№ п/п | Ячейка | Функция |
1. | AG24 | =ЧАСТНОЕ(AH25;45) |
2. | AG26 | =ЧАСТНОЕ(AH27;45) |
3. | AG28 | =ЧАСТНОЕ(AH29;45) |
4. Находим код второй буквы закодированного слога.
№ п/п | Ячейка | Функция |
1. | AH24 | =AH25-AG24×45 |
2. | AH26 | =AH27-AG26×45 |
3. | AH28 | =AH29-AG28×45 |
5. По полученной кодовой позиции получаем декодированный символ.
№ п/п | Ячейка | Функция |
1. | U24 | =ИНДЕКС ($B$38:$AT$38; ПОИСКПОЗ (AG24;$B$39:$AT$39;0)) |
2. | U25 | =ИНДЕКС ($B$38:$AT$38; ПОИСКПОЗ (AH24;$B$39:$AT$39;0)) |
3. | U26 | =ИНДЕКС ($B$38:$AT$38; ПОИСКПОЗ (AG26;$B$39:$AT$39;0)) |
4. | U27 | =ИНДЕКС ($B$38:$AT$38; ПОИСКПОЗ (AH26;$B$39:$AT$39;0)) |
5. | U28 | =ИНДЕКС ($B$38:$AT$38; ПОИСКПОЗ (AG28;$B$39:$AT$39;0)) |
6. | U29 | =ИНДЕКС ($B$38:$AT$38; ПОИСКПОЗ (AH28;$B$39:$AT$39;0)) |
6. Добавляем служебную информацию.
№ п/п | Ячейка | Функция |
1. | AC23-AD23 | =X23&Y23&Z23&AA23 |
2. | AE23 | =ДЕС(AC23;2) |
В ячейке V23: W23 спрятана битовая комбинация — 01, обозначение буквенно-цифрового режима (табл. 2 ГОСТ). В ячейках X23: AA23 спрятана битовая последовательность количества символов. В полученном значении в ячейке AE23 — 7 символов (что полностью соответствует исходным данным).
В результате получена комбинация из последовательности букв латинского алфавита:
AMERIC
или
Americ
Этап 4. Декодирования последней буквы нечетной последовательности
С одной стороны, скрытая система кодирования была разработана теми же авторами, что и предыдущий буквенно-цифровой режим в 50–60-е годы. Да и наименование у него достаточно известное — USA. С другой стороны, так как данная последовательность не приведена в ГОСТ (и не была раскрыта самой Ассоциацией) в явном виде дальше приведена не будет. Но будет ряд подсказок, на основе которых можно будет получить последовательность:
— в названии USA спрятано: если в раскрытом режиме комбинировать код буквы A и буквы U, то можно получить код первой буквы скрытого алфавита, а также критерий смещения;
— в названии USA спрятано: если к коду буквы S в известном режиме добавить код неизвестного режима и вычесть код новой буквы, то получим, что это первая буква названия 51 штата (кстати, в 60-е годы так и не стал 51 штатом);
— если к количеству символов рабочего поля уровня M1 добавить код первой буквы алфавита, можно получить первую букву имени одного из разработчиков — J;
— код по количеству символов рабочего поля уровня M2 дает первую букву имени одного из разработчиков — K;
— код по количеству символов рабочего поля уровня M3 дает первую букву имени одного из разработчиков — X;
— если из количества символов рабочего поля уровня M4 вычесть код последней буквы алфавита, можно получить первую букву имени одного из разработчиков — D.
Применив все условия, можно составить последовательность для букв латинского алфавита. В этой последовательности и спрятан код буквы А (в диапазоне V31: AF31). В результате получаем полную дешифрованную последовательность букв, спрятанной в историческом послании от разработчиков:
В результате получена комбинация из последовательности букв латинского алфавита:
AMERICA
или
America
Удачи в декодировании Micro QR Code версии M3!!!