или
Как читать алфавитно-цифровой режим в Micro QR Code версии М4
(мифы и нереальности)
Встроенные в Micro QR Code технологии насыщенны мифами и нереальностями. Программисты моделисты часто добавляют артефакты и/или cookies в свои наработки, которые интересно находить при расшифровке кодов и алгоритмов. А затем и самому кодировать и декодировать практически любую информацию. Рассмотрим этапы расшифровки микрокодов самого старшего микроуровня – М4 формата алфавитно-цифрового кодирования на историческом примере.
Первый и, наверное, самый важный на фоне остальных мифов вопрос: почему максимальное количество смешанных символов для кодирования в микрокодах ровно 21 (цифро-кода – 35 символов, но для алфавита это не актуально)?
Примечание: здесь и далее информация будет приводиться с соответствующей ссылкой на официальный нормативный документ – ISO/IEC 18004-2015 (или российский вариант – ГОСТ ИСО/МЭК 18004-2015, далее – ГОСТ).
Для примера, информация о максимальном количестве символов в микрокодах и просто кодах хранится в таблице 7 ГОСТ. Дальше немножко мифической составляющей…
Программные библиотеки, в которых хранятся все алгоритмы кодирования как Micro QR Code, так и QR Code, и которые свободно распространяются во всех популярных операционных системах, принадлежат Ассоциации GAFAM (Google, Apple, Facebook, Amazon, Microsoft). Территориальная и административная принадлежность данной Ассоциации – USA (первая подсказка для 4 этапа). Именно это и было заложено как основной критерий максимальной длины смешанного алфавита микрокодов. Проверим: в послании от разработчиков зашифровано: UNITEDSTATESOFAMERICA (рис. 1). Ровно 21 символ. Бòльшей длины для микрокодов просто не существует. Почему все буквы большие и нет пробелов между словами – будет расшифровано позже.
Рассмотрим пошагово алгоритм расшифровки данного микрокода. Для простоты отображения математической составляющей будем использовать также продукцию Ассоциации – MS Excel.
Запускаем программное приложение. Готовим Лист Книги для работы. Делаем размерность ячеек одинаковой (например, 23 на 23 пикселя) и по горизонтали, и по вертикали (рис. 2a). Затем закрашиваем поле фоновым цветом (рис. 2b).
Если посчитать количество пикселей (квадратиков) на рисунке по горизонтали и/или по вертикали, то получится матрица (табличка) размерностью 17×17. Создадим новую схему шаблон для микрокода (рис. 3).
Перенесем битовую составляющую исходной матрицы (рис. 1) на рабочую поверхности (рис. 4a). К сожалению, за долгие годы MS Excel так и не научился работать с цветом ячеек. Добавим в каждую цветную ячейку соответствующее битовое значение: белая ячейка – 0, черная ячейка – 1 (рис. 4b).
Для удобства отделим цветом индикатор служебной информации (рис. 5a) – битовая последовательность информации о формате. Чтение последовательности начинается с 14 бита, т.е. последовательность чтения будет 14, 13, 12, 11, 10 и т.д.
Также отделяем цветом индикатор распознавания микрокода (рис. 5b). Полученная матрица готова для дальнейшего анализа.
Примечание: для удобства дальнейшего описания ссылок на ячейки листа перейдем от современного отображения адресов ячеек в виде R1C1 (относительные ссылки) к старому формату в виде A1 (буквенно-числовое отображение). Выбираем в Меню Файл → Параметры. В категории Формулы в группе Работа с формулами снимаем галочку напротив пункта Стиль ссылок R1C1. В результате названия столбиков должны поменяться с чисел на латинские буквы (рис. 6).
Этап 1. Служебная информация
Перед тем как начать работать с основной рабочей областью, необходимо расшифровать служебную информацию. Пример итогового результата приведен на рисунке 7.
Сначала переводим служебную информацию также в бинарное представление, т.е. ряды ячеек E12-L12 и L5-L12 представляем как набор 0 (светлые ячейки) и 1 (темные ячейки) (рис. 7).
Выносим служебную информацию из микрокода, т.е. дублируем полученный ряд в угловом представлении и в представлении – один ряд. Получаем следующие ссылочные ячейки:
Ячейка |
Функция |
Ячейка |
Функция |
V12 |
=E12 |
V14 |
=V12 |
W12 |
=F12 |
W14 |
=W12 |
X12 |
=G12 |
X14 |
=X12 |
Y12 |
=H12 |
Y14 |
=Y12 |
Z12 |
=I12 |
Z14 |
=Z12 |
AA12 |
=J12 |
AA14 |
=AA12 |
AB12 |
=K12 |
AB14 |
=AB12 |
AC12 |
=L12 |
AC14 |
=AC12 |
AC11 |
=L11 |
AD14 |
=AC11 |
AC10 |
=L10 |
AE14 |
=AC10 |
AC9 |
=L9 |
AF14 |
=AC9 |
AC8 |
=L8 |
AG14 |
=AC8 |
AC7 |
=L7 |
AH14 |
=AC7 |
AC6 |
=L6 |
AI14 |
=AC6 |
AC5 |
=L5 |
AJ14 |
=AC5 |
Воспользуемся рядом бит служебной информации 14 строки для определения версии и уровня микрокода, а также для получения вида используемой в данном коде маски. Сначала найдем соответствие в таблице ГОСТ, потом сделаем самопроверку.
Объединяем ячейки V16-AJ16 в единую. В полученную новую ячейку V16 добавляем функцию (рис. 7):
=V14&W14&X14&Y14&Z14&AA14&AB14&AC14&AD14&AE14&AF14&AG14&AH14&AI14&AJ14
По таблице С.1 ГОСТ (табл. 1) находим битовую последовательность информации о формате и соответствующую последовательность бит данных до маскирования. Для данного примера – 10100.
Таблица 1 – Корректирующие последовательности информации о формате
Последовательность до маскирования |
Последовательность после маскирования |
||
Биты данных |
Биты исправления ошибок |
Двоичная |
Шестнадцатеричная |
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 |
ЗВВА |
Проверим полученный результат. Заполняем ячейки в соответствии с таблицей:
Ячейка |
Функция |
Ячейка |
Значение |
AF6 |
=V14 |
AF7 |
1 |
AG6 |
=W14 |
AG7 |
0 |
AH6 |
=X14 |
AH7 |
0 |
AI6 |
=Y14 |
AI7 |
0 |
AJ6 |
=Z14 |
AJ7 |
1 |
Воспользуемся алгебраической функцией XOR для получения версии и уровня микрокода, и кода маски. Заполняем ячейки восьмой строчки:
Ячейка |
Функция |
AF8 |
=БИТ.ИСКЛИЛИ(AF6;AF7) |
AG8 |
=БИТ.ИСКЛИЛИ(AG6;AG7) |
AH8 |
=БИТ.ИСКЛИЛИ(AH6;AH7) |
AI8 |
=БИТ.ИСКЛИЛИ(AI6;AI7) |
AJ8 |
=БИТ.ИСКЛИЛИ(AJ6;AJ7) |
В результате получаем последовательность 10100, полностью соответствующую полученной по таблице ГОСТ. Расшифруем полученную комбинацию. Разделим на две части: 101 и 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 |
Получаем, что в данном микрокоде используется версия М4, уровень L, т.е. комбинация M4-L. Запомним, на последующих этапах данная информация пригодится.
Разбираем вторую часть служебной информации, комбинацию маски 00. Обратимся к рисунку 22 ГОСТ. Перенесем маску с соответствующим битовым кодом на Лист, начиная с ячейки AN4 (рис. 8).
Аналогично основной матрице, каждая черная ячейка обозначена как 1, а каждая белая – 0.
Все необходимые данные на основе служебной информации получены, переходим ко 2-му этапу.
Этап 2. Расшифровка данных основной рабочей области
На основе матрицы исходных данных в диапазоне ячеек D4:T20 и матрицы маскирования в диапазоне ячеек AN4:BD20 получаем матрицу немаскированных данных в диапазоне ячеек D24:T40 с использованием функции XOR. Пример готового результата представлен на рисунке 9.
В ячейке M25 добавлена следующая формула:
=БИТ.ИСКЛИЛИ(M5;AW5)
Далее за нижний правый угол выделенной ячейки (магический квадрат) дублируем данную формулу на всю поверхность рабочей матрицы. В результате получаем немаскированный вариант для диапазона ячеек M25:T40 и E33:L40.
Самый простой вариант для подготовки к следующему этапу, перенести полученную немаскированную матрицу в таблицу символов вручную. Но это не так интересно. Подготовим таблицу маршрута и заготовку для заполнения битовых комбинаций с учетом особенностей алфавитно-цифрового режима.
На основе таблицы 13 ГОСТ (табл. 2) определили, что в данной матрице используется формат и уровень M4-L. Обратимся к рисунку 11 ГОСТ, получаем, что маршрут будет представлен следующей схемой (рис. 10).
Перенесем маршрут на Лист MS Excel, начиная с ячейки AN24, где каждую ячейку подпишем соответствующим числовым значением. Результат представлен на рисунке 11.
Напомню: не обязательно каждую ячейку прописывать вручную. MS Excel умеет строить прогрессии. Например, заполняем ячейки BD40 и BD39 значениями 1 и 3 соответственно. Затем выделяем заполненные ячейки BD39:BD40 и за магический квадратик выделенного диапазона (нижний правый угол ячейки) тянем до ячейки BD25. В результате весь ряд будет заполнен. Остальное рабочее поле можно заполнить аналогичным образом.
Начиная с ячейки X24 в диапазоне ячеек X24:AH47 делаем шаблон-заготовку для последующего наполнения битовой комбинацией в буквенно-цифровом режиме. Пример полученного результата представлен на рисунке 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 этапа). Вторая особенность – знак ПРОБЕЛ (код 36) имеет отдельное кодовое значение. При передачи коротких сообщений данным символом можно пренебречь. Как следствие, в расшифрованной комбинации букв данный символ будет пропущен.
Воспользуемся п. 7.4.4 ГОСТ для автоматизации преобразования битовых последовательностей в буквы латинского алфавита. Пример итогового варианта представлен на рисунке 13.
Сначала перенесем таблицу 3 на рабочий Лист MS Excel. Начиная с ячейки B49 в выделенном диапазоне B49:AT50 просто переносим всю последовательность символов в две строки (рис. 13).
Как было упомянуто ранее, битовые комбинации в диапазон ячеек X24:AH47 можно перенести вручную (простой вариант). Но можно и автоматизировать. Таблица функций заполнит битовые ячейки автоматически (табл. 4).
Таблица 4 – Функциональные ячейки битовых последовательностей
№ п/п |
Ячейка |
Функция |
Первая строка | ||
1. |
X25 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(X24;$BD$25:$BD$40;0);ПОИСКПОЗ(X24;AO40:BD40;0)) |
2. |
Y25 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Y24;$BC$25:$BC$40;0);ПОИСКПОЗ(Y24;AO40:BD40;0)) |
3. |
Z25 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Z24;$BD$25:$BD$40;0);ПОИСКПОЗ(Z24;AO39:BD39;0)) |
4. |
AA25 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AA24;$BC$25:$BC$40;0);ПОИСКПОЗ(AA24;AO39:BD39;0)) |
5. |
AB25 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AB24;$BD$25:$BD$40;0);ПОИСКПОЗ(AB24;AO38:BD38;0)) |
6. |
AC25 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AC24;$BC$25:$BC$40;0);ПОИСКПОЗ(AC24;AO38:BD38;0)) |
7. |
AD25 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AD24;$BD$25:$BD$40;0);ПОИСКПОЗ(AD24;AO37:BD37;0)) |
8. |
AE25 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AE24;$BC$25:$BC$40;0);ПОИСКПОЗ(AE24;AO37:BD37;0)) |
Вторая строка | ||
9. |
X27 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(X26;$BD$25:$BD$40;0);ПОИСКПОЗ(X26;AO36:BD36;0)) |
10. |
Y27 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Y26;$BC$25:$BC$40;0);ПОИСКПОЗ(Y26;AO36:BD36;0)) |
11. |
Z27 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Z26;$BD$25:$BD$40;0);ПОИСКПОЗ(Z26;AO35:BD35;0)) |
12. |
AA27 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AA26;$BC$25:$BC$40;0);ПОИСКПОЗ(AA26;AO35:BD35;0)) |
13. |
AB27 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AB26;$BD$25:$BD$40;0);ПОИСКПОЗ(AB26;AO34:BD34;0)) |
14. |
AC27 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AC26;$BC$25:$BC$40;0);ПОИСКПОЗ(AC26;AO34:BD34;0)) |
15. |
AD27 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AD26;$BD$25:$BD$40;0);ПОИСКПОЗ(AD26;AO33:BD33;0)) |
16. |
AE27 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AE26;$BC$25:$BC$40;0);ПОИСКПОЗ(AE26;AO33:BD33;0)) |
17. |
AF27 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AF26;$BD$25:$BD$40;0);ПОИСКПОЗ(AF26;AO32:BD32;0)) |
18. |
AG27 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AG26;$BC$25:$BC$40;0);ПОИСКПОЗ(AG26;AO32:BD32;0)) |
19. |
AH27 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AH26;$BD$25:$BD$40;0);ПОИСКПОЗ(AH26;AO31:BD31;0)) |
Третья строка | ||
20. |
X29 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(X28;$BC$25:$BC$40;0);ПОИСКПОЗ(X28;AO31:BD31;0)) |
21. |
Y29 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Y28;$BD$25:$BD$40;0);ПОИСКПОЗ(Y28;AO30:BD30;0)) |
22. |
Z29 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Z28;$BC$25:$BC$40;0);ПОИСКПОЗ(Z28;AO30:BD30;0)) |
23. |
AA29 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AA28;$BD$25:$BD$40;0);ПОИСКПОЗ(AA28;AO29:BD29;0)) |
24. |
AB29 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AB28;$BC$25:$BC$40;0);ПОИСКПОЗ(AB28;AO29:BD29;0)) |
25. |
AC29 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AC28;$BD$25:$BD$40;0);ПОИСКПОЗ(AC28;AO28:BD28;0)) |
26. |
AD29 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AD28;$BC$25:$BC$40;0);ПОИСКПОЗ(AD28;AO28:BD28;0)) |
27. |
AE29 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AE28;$BD$25:$BD$40;0);ПОИСКПОЗ(AE28;AO27:BD27;0)) |
28. |
AF29 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AF28;$BC$25:$BC$40;0);ПОИСКПОЗ(AF28;AO27:BD27;0)) |
29. |
AG29 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AG28;$BD$25:$BD$40;0);ПОИСКПОЗ(AG28;AO26:BD26;0)) |
30. |
AH29 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AH28;$BC$25:$BC$40;0);ПОИСКПОЗ(AH28;AO26:BD26;0)) |
Четвертая строка | ||
31. |
X31 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(X30;$BD$25:$BD$40;0);ПОИСКПОЗ(X30;AO25:BD25;0)) |
32. |
Y31 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Y30;$BC$25:$BC$40;0);ПОИСКПОЗ(Y30;AO25:BD25;0)) |
33. |
Z31 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Z30;$BB$25:$BB$40;0);ПОИСКПОЗ(Z30;AO25:BD25;0)) |
34. |
AA31 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AA30;$BA$25:$BA$40;0);ПОИСКПОЗ(AA30;AO25:BD25;0)) |
35. |
AB31 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AB30;$BB$25:$BB$40;0);ПОИСКПОЗ(AB30;AO26:BD26;0)) |
36. |
AC31 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AC30;$BA$25:$BA$40;0);ПОИСКПОЗ(AC30;AO26:BD26;0)) |
37. |
AD31 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AD30;$BB$25:$BB$40;0);ПОИСКПОЗ(AD30;AO27:BD27;0)) |
38. |
AE31 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AE30;$BA$25:$BA$40;0);ПОИСКПОЗ(AE30;AO27:BD27;0)) |
39. |
AF31 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AF30;$BB$25:$BB$40;0);ПОИСКПОЗ(AF30;AO28:BD28;0)) |
40. |
AG31 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AG30;$BA$25:$BA$40;0);ПОИСКПОЗ(AG30;AO28:BD28;0)) |
41. |
AH31 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AH30;$BB$25:$BB$40;0);ПОИСКПОЗ(AH30;AO29:BD29;0)) |
Пятая строка | ||
42. |
X33 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(X32;$BA$25:$BA$40;0);ПОИСКПОЗ(X32;AO29:BD29;0)) |
43. |
Y33 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Y32;$BB$25:$BB$40;0);ПОИСКПОЗ(Y32;AO30:BD30;0)) |
44. |
Z33 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Z32;$BA$25:$BA$40;0);ПОИСКПОЗ(Z32;AO30:BD30;0)) |
45. |
AA33 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AA32;$BB$25:$BB$40;0);ПОИСКПОЗ(AA32;AO31:BD31;0)) |
46. |
AB33 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AB32;$BA$25:$BA$40;0);ПОИСКПОЗ(AB32;AO31:BD31;0)) |
47. |
AC33 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AC32;$BB$25:$BB$40;0);ПОИСКПОЗ(AC32;AO32:BD32;0)) |
48. |
AD33 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AD32;$BA$25:$BA$40;0);ПОИСКПОЗ(AD32;AO32:BD32;0)) |
49. |
AE33 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AE32;$BB$25:$BB$40;0);ПОИСКПОЗ(AE32;AO33:BD33;0)) |
50. |
AF33 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AF32;$BA$25:$BA$40;0);ПОИСКПОЗ(AF32;AO33:BD33;0)) |
51. |
AG33 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AG32;$BB$25:$BB$40;0);ПОИСКПОЗ(AG32;AO34:BD34;0)) |
52. |
AH33 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AH32;$BA$25:$BA$40;0);ПОИСКПОЗ(AH32;AO34:BD34;0)) |
Шестая строка | ||
53. |
X35 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(X34;$BB$25:$BB$40;0);ПОИСКПОЗ(X34;AO35:BD35;0)) |
54. |
Y35 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Y34;$BA$25:$BA$40;0);ПОИСКПОЗ(Y34;AO35:BD35;0)) |
55. |
Z35 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Z34;$BB$25:$BB$40;0);ПОИСКПОЗ(Z34;AO36:BD36;0)) |
56. |
AA35 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AA34;$BA$25:$BA$40;0);ПОИСКПОЗ(AA34;AO36:BD36;0)) |
57. |
AB35 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AB34;$BB$25:$BB$40;0);ПОИСКПОЗ(AB34;AO37:BD37;0)) |
58. |
AC35 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AC34;$BA$25:$BA$40;0);ПОИСКПОЗ(AC34;AO37:BD37;0)) |
59. |
AD35 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AD34;$BB$25:$BB$40;0);ПОИСКПОЗ(AD34;AO38:BD38;0)) |
60. |
AE35 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AE34;$BA$25:$BA$40;0);ПОИСКПОЗ(AE34;AO38:BD38;0)) |
61. |
AF35 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AF34;$BB$25:$BB$40;0);ПОИСКПОЗ(AF34;AO39:BD39;0)) |
62. |
AG35 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AG34;$BA$25:$BA$40;0);ПОИСКПОЗ(AG34;AO39:BD39;0)) |
63. |
AH35 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AH34;$BB$25:$BB$40;0);ПОИСКПОЗ(AH34;AO40:BD40;0)) |
Седьмая строка | ||
64. |
X37 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(X36;$BA$25:$BA$40;0);ПОИСКПОЗ(X36;AO40:BD40;0)) |
65. |
Y37 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Y36;$AZ$25:$AZ$40;0);ПОИСКПОЗ(Y36;AO40:BD40;0)) |
66. |
Z37 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Z36;$AY$25:$AY$40;0);ПОИСКПОЗ(Z36;AO40:BD40;0)) |
67. |
AA37 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AA36;$AZ$25:$AZ$40;0);ПОИСКПОЗ(AA36;AO39:BD39;0)) |
68. |
AB37 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AB36;$AY$25:$AY$40;0);ПОИСКПОЗ(AB36;AO39:BD39;0)) |
69. |
AC37 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AC36;$AZ$25:$AZ$40;0);ПОИСКПОЗ(AC36;AO38:BD38;0)) |
70. |
AD37 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AD36;$AY$25:$AY$40;0);ПОИСКПОЗ(AD36;AO38:BD38;0)) |
71. |
AE37 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AE36;$AZ$25:$AZ$40;0);ПОИСКПОЗ(AE36;AO37:BD37;0)) |
72. |
AF37 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AF36;$AY$25:$AY$40;0);ПОИСКПОЗ(AF36;AO37:BD37;0)) |
73. |
AG37 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AG36;$AZ$25:$AZ$40;0);ПОИСКПОЗ(AG36;AO36:BD36;0)) |
74. |
AH37 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AH36;$AY$25:$AY$40;0);ПОИСКПОЗ(AH36;AO36:BD36;0)) |
Восьмая строка | ||
75. |
X39 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(X38;$AZ$25:$AZ$40;0);ПОИСКПОЗ(X38;AO35:BD35;0)) |
76. |
Y39 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Y38;$AY$25:$AY$40;0);ПОИСКПОЗ(Y38;AO35:BD35;0)) |
77. |
Z39 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Z38;$AZ$25:$AZ$40;0);ПОИСКПОЗ(Z38;AO34:BD34;0)) |
78. |
AA39 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AA38;$AY$25:$AY$40;0);ПОИСКПОЗ(AA38;AO34:BD34;0)) |
79. |
AB39 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AB38;$AZ$25:$AZ$40;0);ПОИСКПОЗ(AB38;AO33:BD33;0)) |
80. |
AC39 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AC38;$AY$25:$AY$40;0);ПОИСКПОЗ(AC38;AO33:BD33;0)) |
81. |
AD39 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AD38;$AZ$25:$AZ$40;0);ПОИСКПОЗ(AD38;AO32:BD32;0)) |
82. |
AE39 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AE38;$AY$25:$AY$40;0);ПОИСКПОЗ(AE38;AO32:BD32;0)) |
83. |
AF39 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AF38;$AZ$25:$AZ$40;0);ПОИСКПОЗ(AF38;AO31:BD31;0)) |
84. |
AG39 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AG38;$AY$25:$AY$40;0);ПОИСКПОЗ(AG38;AO31:BD31;0)) |
85. |
AH39 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AH38;$AZ$25:$AZ$40;0);ПОИСКПОЗ(AH38;AO30:BD30;0)) |
Девятая строчка | ||
86. |
X41 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(X40;$AY$25:$AY$40;0);ПОИСКПОЗ(X40;AO30:BD30;0)) |
87. |
Y41 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Y40;$AZ$25:$AZ$40;0);ПОИСКПОЗ(Y40;AO29:BD29;0)) |
88. |
Z41 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Z40;$AY$25:$AY$40;0);ПОИСКПОЗ(Z40;AO29:BD29;0)) |
89. |
AA41 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AA40;$AZ$25:$AZ$40;0);ПОИСКПОЗ(AA40;AO28:BD28;0)) |
90. |
AB41 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AB40;$AY$25:$AY$40;0);ПОИСКПОЗ(AB40;AO28:BD28;0)) |
91. |
AC41 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AC40;$AZ$25:$AZ$40;0);ПОИСКПОЗ(AC40;AO27:BD27;0)) |
92. |
AD41 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AD40;$AY$25:$AY$40;0);ПОИСКПОЗ(AD40;AO27:BD27;0)) |
93. |
AE41 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AE40;$AZ$25:$AZ$40;0);ПОИСКПОЗ(AE40;AO26:BD26;0)) |
94. |
AF41 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AF40;$AY$25:$AY$40;0);ПОИСКПОЗ(AF40;AO26:BD26;0)) |
95. |
AG41 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AG40;$AZ$25:$AZ$40;0);ПОИСКПОЗ(AG40;AO25:BD25;0)) |
96. |
AH41 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AH40;$AY$25:$AY$40;0);ПОИСКПОЗ(AH40;AO25:BD25;0)) |
Десятая строчка | ||
97. |
X43 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(X42;$AX$25:$AX$40;0);ПОИСКПОЗ(X42;AO25:BD25;0)) |
98. |
Y43 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Y42;$AW$25:$AW$40;0);ПОИСКПОЗ(Y42;AO25:BD25;0)) |
99. |
Z43 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Z42;$AX$25:$AX$40;0);ПОИСКПОЗ(Z42;AO26:BD26;0)) |
100. |
AA43 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AA42;$AW$25:$AW$40;0);ПОИСКПОЗ(AA42;AO26:BD26;0)) |
101. |
AB43 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AB42;$AX$25:$AX$40;0);ПОИСКПОЗ(AB42;AO27:BD27;0)) |
102. |
AC43 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AC42;$AW$25:$AW$40;0);ПОИСКПОЗ(AC42;AO27:BD27;0)) |
103. |
AD43 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AD42;$AX$25:$AX$40;0);ПОИСКПОЗ(AD42;AO28:BD28;0)) |
104. |
AE43 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AE42;$AW$25:$AW$40;0);ПОИСКПОЗ(AE42;AO28:BD28;0)) |
105. |
AF43 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AF42;$AX$25:$AX$40;0);ПОИСКПОЗ(AF42;AO29:BD29;0)) |
106. |
AG43 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AG42;$AW$25:$AW$40;0);ПОИСКПОЗ(AG42;AO29:BD29;0)) |
107. |
AH43 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AH42;$AX$25:$AX$40;0);ПОИСКПОЗ(AH42;AO30:BD30;0)) |
Одиннадцатая строчка | ||
108. |
X45 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(X44;$AW$25:$AW$40;0);ПОИСКПОЗ(X44;AO30:BD30;0)) |
109. |
Y45 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Y44;$AX$25:$AX$40;0);ПОИСКПОЗ(Y44;AO31:BD31;0)) |
110. |
Z45 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Z44;$AW$25:$AW$40;0);ПОИСКПОЗ(Z44;AO31:BD31;0)) |
111. |
AA45 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AA44;$AX$25:$AX$40;0);ПОИСКПОЗ(AA44;AO32:BD32;0)) |
112. |
AB45 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AB44;$AW$25:$AW$40;0);ПОИСКПОЗ(AB44;AO32:BD32;0)) |
113. |
AC45 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AC44;$AX$25:$AX$40;0);ПОИСКПОЗ(AC44;AO33:BD33;0)) |
114. |
AD45 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AD44;$AW$25:$AW$40;0);ПОИСКПОЗ(AD44;AO33:BD33;0)) |
115. |
AE45 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AE44;$AX$25:$AX$40;0);ПОИСКПОЗ(AE44;AO34:BD34;0)) |
116. |
AF45 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AF44;$AW$25:$AW$40;0);ПОИСКПОЗ(AF44;AO34:BD34;0)) |
117. |
AG45 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AG44;$AX$25:$AX$40;0);ПОИСКПОЗ(AG44;AO35:BD35;0)) |
118. |
AH45 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AH44;$AW$25:$AW$40;0);ПОИСКПОЗ(AH44;AO35:BD35;0)) |
Двенадцатая строчка | ||
119. |
X47 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(X46;$AX$25:$AX$40;0);ПОИСКПОЗ(X46;AO36:BD36;0)) |
120. |
Y47 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Y46;$AW$25:$AW$40;0);ПОИСКПОЗ(Y46;AO36:BD36;0)) |
121. |
Z47 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(Z46;$AX$25:$AX$40;0);ПОИСКПОЗ(Z46;AO37:BD37;0)) |
122. |
AA47 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AA46;$AW$25:$AW$40;0);ПОИСКПОЗ(AA46;AO37:BD37;0)) |
123. |
AB47 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AB46;$AX$25:$AX$40;0);ПОИСКПОЗ(AB46;AO38:BD38;0)) |
124. |
AC47 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AC46;$AW$25:$AW$40;0);ПОИСКПОЗ(AC46;AO38:BD38;0)) |
125. |
AD47 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AD46;$AX$25:$AX$40;0);ПОИСКПОЗ(AD46;AO39:BD39;0)) |
126. |
AE47 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AE46;$AW$25:$AW$40;0);ПОИСКПОЗ(AE46;AO39:BD39;0)) |
127. |
AF47 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AF46;$AX$25:$AX$40;0);ПОИСКПОЗ(AF46;AO40:BD40;0)) |
128. |
AG47 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AG46;$AW$25:$AW$40;0);ПОИСКПОЗ(AG46;AO40:BD40;0)) |
129. |
AH47 |
=ИНДЕКС($E$25:$T$40;ПОИСКПОЗ(AH46;$AV$25:$AV$40;0);ПОИСКПОЗ(AH46;AO40:BD40;0)) |
Воспользуемся алгоритмом, приведенным п. 7.4.4 ГОСТ.
Объединим ячейки битовых комбинаций в одну в каждой строчке.
№ п/п |
Ячейка |
Функция |
1. |
AI27 |
=X27&Y27&Z27&AA27&AB27&AC27&AD27&AE27&AF27&AG27&AH27 |
2. |
AI29 |
=X29&Y29&Z29&AA29&AB29&AC29&AD29&AE29&AF29&AG29&AH29 |
3. |
AI31 |
=X31&Y31&Z31&AA31&AB31&AC31&AD31&AE31&AF31&AG31&AH31 |
4. |
AI33 |
=X33&Y33&Z33&AA33&AB33&AC33&AD33&AE33&AF33&AG33&AH33 |
5. |
AI35 |
=X35&Y35&Z35&AA35&AB35&AC35&AD35&AE35&AF35&AG35&AH35 |
6. |
AI37 |
=X37&Y37&Z37&AA37&AB37&AC37&AD37&AE37&AF37&AG37&AH37 |
7. |
AI39 |
=X39&Y39&Z39&AA39&AB39&AC39&AD39&AE39&AF39&AG39&AH39 |
8. |
AI41 |
=X41&Y41&Z41&AA41&AB41&AC41&AD41&AE41&AF41&AG41&AH41 |
9. |
AI43 |
=X43&Y43&Z43&AA43&AB43&AC43&AD43&AE43&AF43&AG43&AH43 |
10. |
AI45 |
=X45&Y45&Z45&AA45&AB45&AC45&AD45&AE45&AF45&AG45&AH45 |
Переводим полученную двоичную кодовую комбинацию в десятичный формат.
№ п/п |
Ячейка |
Функция |
1. |
AJ27 |
=ДЕС(AI27;2) |
2. |
AJ29 |
=ДЕС(AI29;2) |
3. |
AJ31 |
=ДЕС(AI31;2) |
4. |
AJ33 |
=ДЕС(AI33;2) |
5. |
AJ35 |
=ДЕС(AI35;2) |
6. |
AJ37 |
=ДЕС(AI37;2) |
7. |
AJ39 |
=ДЕС(AI39;2) |
8. |
AJ41 |
=ДЕС(AI41;2) |
9. |
AJ43 |
=ДЕС(AI43;2) |
10. |
AJ45 |
=ДЕС(AI45;2) |
Находим код первой буквы закодированного слога.
№ п/п |
Ячейка |
Функция |
1. |
AI26 |
=ЧАСТНОЕ(AJ27;45) |
2. |
AI28 |
=ЧАСТНОЕ(AJ29;45) |
3. |
AI30 |
=ЧАСТНОЕ(AJ31;45) |
4. |
AI32 |
=ЧАСТНОЕ(AJ33;45) |
5. |
AI34 |
=ЧАСТНОЕ(AJ35;45) |
6. |
AI36 |
=ЧАСТНОЕ(AJ37;45) |
7. |
AI38 |
=ЧАСТНОЕ(AJ39;45) |
8. |
AI40 |
=ЧАСТНОЕ(AJ41;45) |
9. |
AI42 |
=ЧАСТНОЕ(AJ43;45) |
10. |
AI44 |
=ЧАСТНОЕ(AJ45;45) |
Находим код второй буквы закодированного слога.
№ п/п |
Ячейка |
Функция |
1. |
AJ26 |
=AJ27-AI26*45 |
2. |
AJ28 |
=AJ29-AI28*45 |
3. |
AJ30 |
=AJ31-AI30*45 |
4. |
AJ32 |
=AJ33-AI32*45 |
5. |
AJ34 |
=AJ35-AI34*45 |
6. |
AJ36 |
=AJ37-AI36*45 |
7. |
AJ38 |
=AJ39-AI38*45 |
8. |
AJ40 |
=AJ41-AI40*45 |
9. |
AJ42 |
=AJ43-AI42*45 |
10. |
AJ44 |
=AJ45-AI44*45 |
По полученной кодовой позиции получаем декодированный символ.
№ п/п |
Ячейка |
Функция |
1. |
W26 |
=ИНДЕКС($B$49:$AT$49;ПОИСКПОЗ(AI26;$B$50:$AT$50;0)) |
2. |
W27 |
=ИНДЕКС($B$49:$AT$49;ПОИСКПОЗ(AJ26;$B$50:$AT$50;0)) |
3. |
W28 |
=ИНДЕКС($B$49:$AT$49;ПОИСКПОЗ(AI28;$B$50:$AT$50;0)) |
4. |
W29 |
=ИНДЕКС($B$49:$AT$49;ПОИСКПОЗ(AJ28;$B$50:$AT$50;0)) |
5. |
W30 |
=ИНДЕКС($B$49:$AT$49;ПОИСКПОЗ(AI30;$B$50:$AT$50;0)) |
6. |
W31 |
=ИНДЕКС($B$49:$AT$49;ПОИСКПОЗ(AJ30;$B$50:$AT$50;0)) |
7. |
W32 |
=ИНДЕКС($B$49:$AT$49;ПОИСКПОЗ(AI32;$B$50:$AT$50;0)) |
8. |
W33 |
=ИНДЕКС($B$49:$AT$49;ПОИСКПОЗ(AJ32;$B$50:$AT$50;0)) |
9. |
W34 |
=ИНДЕКС($B$49:$AT$49;ПОИСКПОЗ(AI34;$B$50:$AT$50;0)) |
10. |
W35 |
=ИНДЕКС($B$49:$AT$49;ПОИСКПОЗ(AJ34;$B$50:$AT$50;0)) |
11. |
W36 |
=ИНДЕКС($B$49:$AT$49;ПОИСКПОЗ(AI36;$B$50:$AT$50;0)) |
12. |
W37 |
=ИНДЕКС($B$49:$AT$49;ПОИСКПОЗ(AJ36;$B$50:$AT$50;0)) |
13. |
W38 |
=ИНДЕКС($B$49:$AT$49;ПОИСКПОЗ(AI38;$B$50:$AT$50;0)) |
14. |
W39 |
=ИНДЕКС($B$49:$AT$49;ПОИСКПОЗ(AJ38;$B$50:$AT$50;0)) |
15. |
W40 |
=ИНДЕКС($B$49:$AT$49;ПОИСКПОЗ(AI40;$B$50:$AT$50;0)) |
16. |
W41 |
=ИНДЕКС($B$49:$AT$49;ПОИСКПОЗ(AJ40;$B$50:$AT$50;0)) |
17. |
W42 |
=ИНДЕКС($B$49:$AT$49;ПОИСКПОЗ(AI42;$B$50:$AT$50;0)) |
18. |
W43 |
=ИНДЕКС($B$49:$AT$49;ПОИСКПОЗ(AJ42;$B$50:$AT$50;0)) |
19. |
W44 |
=ИНДЕКС($B$49:$AT$49;ПОИСКПОЗ(AI44;$B$50:$AT$50;0)) |
20. |
W45 |
=ИНДЕКС($B$49:$AT$49;ПОИСКПОЗ(AJ44;$B$50:$AT$50;0)) |
6. Добавляем служебную информацию.
№ п/п |
Ячейка |
Функция |
1. |
AF25 |
=AA25&AB25&AC25&AD25&AE25 |
2. |
AG25 |
=ДЕС(AF25;2) |
В ячейках X25:Z25 спрятана комбинация – 001, обозначение буквенно-цифрового режима (табл. 2 ГОСТ). В ячейках AA25:AE25 спрятана битовая последовательность количества символов. В полученном значении в ячейке AG25 – 21 символ (что полностью соответствует исходным данным).
В результате получена комбинация из последовательности букв латинского алфавита:
UNITEDSTATESOFAMERIC
Не хватает ровно одной буквы, зашифрованной в диапазоне X47:AH47. Если бы программный модуль Ассоциации работал полностью в соответствии с ГОСТ, то к букве A была бы добавлена цифра 0, и в строке была бы следующая последовательность – 00111000010. Но в данной строке другая комбинация. Что не так? Переходим к самому секретному 4 этапу.
Этап 4. Декодирования последней буквы нечетной последовательности
С одной стороны, скрытая система кодирования была разработана теми же авторами, что и предыдущий буквенно-цифровой режим в 50-60-е годы. Да и наименование у него достаточно известное – USA. С другой стороны, так как данная последовательность не приведена в ГОСТ (и не была раскрыта самой Ассоциацией) в явном виде дальше приведена не будет. Но будет ряд подсказок, на основе которых можно будет получить последовательность:
- в названии USA спрятано: если в раскрытом режиме комбинировать код буквы A и буквы U, то можно получить код первой буквы скрытого алфавита, а также критерий смещения;
- в названии USA спрятано: если к коду буквы S в известном режиме добавить код неизвестного режима и вычесть код новой буквы, то получим, что это первая буква названия 51 штата (кстати, в 60-е годы так и не стал 51 штатом);
- если к количеству символов рабочего поля уровня M1 добавить код первой буквы алфавита, можно получить первую букву имени одного из разработчиков – J;
- код по количеству символов рабочего поля уровня M2 дает первую букву имени одного из разработчиков – K;
- код по количеству символов рабочего поля уровня M3 дает первую букву имени одного из разработчиков – X;
- если из количества символов рабочего поля уровня M4 вычесть код последней буквы алфавита, можно получить первую букву имени одного из разработчиков – D.
Применив все условия, можно составить последовательность для букв латинского алфавита. В этой последовательности и спрятан код буквы А (в диапазоне X47:AH47). В результате получаем полную дешифрованную последовательность букв, спрятанной в историческом послании от разработчиков:
UNITEDSTATESOFAMERICA
или
United States of America
Удачи в декодировании Micro QR Code версии M4!!!