или
Как читать алфавитно-цифровой режим в 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.
Рассмотрим пошагово алгоритмы расшифровки данных микрокодов. Для первых трех слов используется микрокод версии М2, а для четвертого – версия М3. Если автоматизировать алгоритм для одного микрокода одной версии, остальные будут требовать только изменения матрицы исходных данных и, возможно, маски. Далее, для простоты отображения математической составляющей и на данном коде, и на последующих будем использовать также продукцию Ассоциации – MS Excel.
Запускаем программное приложение. Готовим Лист Книги для работы. Делаем размерность ячеек одинаковой (например, 23 на 23 пикселя) и по горизонтали, и по вертикали (рис. 2a). Затем закрашиваем поле фоновым цветом (рис. 2b).
Если посчитать количество пикселей (квадратиков) микрокода AMERICA (рис. 1) по горизонтали и/или по вертикали, то получится матрица (табличка) размерностью 15×15. Создадим новую схему шаблон для микрокода М3 (рис. 3).
Перенесем битовую составляющую исходной матрицы первого слова AMERICA (рис. 1) на рабочую поверхности (рис. 4a). К сожалению, за долгие годы MS Excel так и не научился работать с цветом ячеек. Добавим в каждую цветную ячейку соответствующее битовое значение: белая ячейка – 0, черная ячейка – 1 (рис. 4b).
Для удобства отделим цветом индикатор служебной информации (рис. 5a) – битовая последовательность информации о формате. Чтение последовательности, как и в М4, начинается с 14 бита, т.е. последовательность чтения будет 14, 13, 12, 11, 10 и т.д.
Также отделяем цветом индикатор распознавания микрокода (рис. 5b). Полученная матрица готова для дальнейшего анализа.
Примечание: для удобства дальнейшего описания ссылок на ячейки листа перейдем от современного отображения адресов ячеек в виде R1C1 (относительные ссылки) к старому формату в виде A1 (буквенно-числовое отображение). Выбираем в Меню Файл → Параметры. В категории Формулы в группе Работа с формулами снимаем галочку напротив пункта Стиль ссылок R1C1. В результате названия столбиков должны поменяться с чисел на латинские буквы (рис. 6).
Этап 1. Служебная информация
Перед тем как начать работать с основной рабочей областью микрокода, необходимо расшифровать служебную информацию. Пример итогового результата приведен на рисунке 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).
Аналогично основной матрице, каждая черная ячейка обозначена как 1, а каждая белая – 0.
Все необходимые данные на основе служебной информации получены, переходим ко 2-му этапу.
Этап 2. Расшифровка данных основной рабочей области
На основе матрицы исходных данных в диапазоне ячеек D4:R18 и матрицы маскирования в диапазоне ячеек AL4:AZ18 получаем матрицу немаскированных данных в диапазоне ячеек D20:P32 с использованием функции XOR. Пример готового результата представлен на рисунке 9.
В ячейке M23 добавлена следующая формула:
=БИТ.ИСКЛИЛИ(M5;AU5)
Далее за нижний правый угол выделенной ячейки (магический квадрат) дублируем данную формулу на всю поверхность рабочей матрицы. В результате получаем немаскированный вариант для диапазона ячеек M23:R36 и E31:K36.
Самый простой вариант для подготовки к следующему этапу, перенести полученную немаскированную матрицу в таблицу символов вручную. Но это не так интересно. Подготовим таблицу маршрута и заготовку для заполнения битовых комбинаций с учетом особенностей алфавитно-цифрового режима.
На основе таблицы 13 ГОСТ (табл. 2) определили, что в данной матрице используется формат и уровень M3-M. Обратимся к рисунку 11 ГОСТ, получаем, что маршрут будет представлен следующей схемой (рис. 10).
Перенесем маршрут на Лист MS Excel, начиная с ячейки AL22, где каждую ячейку подпишем соответствующим числовым значением.
Примечание: приведенный в ГОСТ маршрут для M3-M неверный. Если присмотреться внимательнее, то оба маршрута (M3-M и M3-L) дублируют друг друга и не вносят изменения. Данная ошибка не исправлена далее в алгоритме. Приводится маршрут для M3-M с точки зрения разработчиков бесплатного программного модуля Ассоциации.
Результат представлен на рисунке 11.
Напомню: не обязательно каждую ячейку прописывать вручную. MS Excel умеет строить прогрессии. Например, заполняем ячейки AZ36 и AZ35 значениями 1 и 3 соответственно. Затем выделяем заполненные ячейки AZ36: AZ35 и за магический квадратик выделенного диапазона (нижний правый угол ячейки) тянем до ячейки AZ23. В результате весь ряд будет заполнен. Остальное рабочее поле можно заполнить аналогичным образом.
Начиная с ячейки V22 в диапазоне ячеек V22:AF31 делаем шаблон-заготовку для последующего наполнения битовой комбинацией в буквенно-цифровом режиме. Пример полученного результата представлен на рисунке 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.
Сначала перенесем таблицу 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!!!
ссылка на оригинал статьи https://habr.com/ru/articles/782772/
Добавить комментарий