Задание: необходимо прочитать Micro QR Code версии М3, содержащий кодовое слово, состоящее из символов верхнего регистра (на примере закодированных слов – SAFEBOX, Q1W2E3R4T5Y6U и EFB QWG WIFI 7; почему выбрано именно такое количество символов будет также расшифровано) на основе алгоритма, приведенного в ГОСТ Р ИСО/МЭК 18004-2015 (п. 7.4.4). Аналогично версии М2 данный режим невозможно прочитать стандартными ресурсами мобильных устройств, производимых GAFAM (как оказалось, свободно распространяемые библиотеки страшно глючат, поэтому Ассоциация отказалась и от этого режима).
Примечание: здесь и далее будет использоваться информация ГОСТ Р ИСО/МЭК 18004-2015 или в оригинале ISO/IEC 18004:2015 (далее – ГОСТ).
Этап 0. Подготовка исходных данных
Рассмотрим М3 поближе. Имеем матрицу размерностью 15x15 бинарных символов (рис. 11 ГОСТ), один индикатор и два определителя (горизонтальный и вертикальный) (рис. 1).
Первый наносимый ограничитель символ на матрицу М3 – битовые последовательности информации о формате (рис. 2). Чтение битовой последовательности начинается с 14 бита, т.е. последовательность чтения/записи будет 14, 13, 12, 11, 10 и т.д.
Второй не менее важный элемент М3 – маршрут последовательности заполнения битами данных поля матрицы (рис. 3). Данная схема отражена на рисунке 11 ГОСТ.
Примечание: приведенные в ГОСТ маршруты для M3-M и M3-L практически одинаковые. Если присмотреться внимательнее, то оба маршрута дублируют друг друга и не вносят изменения в последовательность чтения/записи. Единственное различие – это учет блока в 4-бита для RS-алгоритма (9 и 11 блоки). Далее приводится вариант маршрутов для M3-M и M3-L, примененные в распространяемом бесплатном модуле Ассоциации (рис. 4). Маршруты идентичны и не совпадают с приведенными в ГОСТ (ноу-хау программистов моделистов).
Если наложить маршрут на матрицу, получаем последовательность из 124 бит кода М3 (рис. 4). Число 124 пригодится позже при добавлении кода по алгоритму Рида-Соломона на поле Галуа.
Примечание: здесь и далее будем использовать один из доступных программных инструментов Ассоциации практически на любом ПК – MS Excel (русскоязычная версия). Как следствие, все команды автоматизации процессов будут на кириллице.
Запускаем программное приложение MS Excel. Готовим последовательность листов Книги для дальнейшей работы:
- Лист1 – называем Code;
- Лист2 – M3 SAFEBOX;
- Лист3 – M3 Q1W2E3R4T5Y6U;
- Лист4 – M3 EFB QWG WIFI 7.
Лист1 (Code) – для размещения корректирующих данных и сверки полученных на листах результатов. Листы 2, 3 и 4 нужны для декодирования соответствующих последовательностей.
На полях листов Лист2 – Лист4 делаем размерность ячеек одинаковой (например, 23 на 23 пикселя) и по горизонтали, и по вертикали (рис. 5a). Затем закрашиваем поле серым фоновым цветом (рис. 5b).
Примечание: для удобства дальнейшего описания ссылок на ячейки листа перейдем от современного отображения адресов ячеек в виде R1C1 (относительные ссылки) к старому формату в виде A1 (буквенно-числовое отображение). Выбираем в Меню Файл → Параметры. В категории Формулы в группе Работа с формулами снимаем галочку напротив пункта Стиль ссылок R1C1. В результате названия столбиков должны поменяться с чисел на латинские буквы (рис. 6).
Если посчитать количество пикселей (квадратиков) микрокода М3 (рис. 1) по горизонтали и/или по вертикали, то получится матрица (табличка) размерностью 15×15. Создадим новую схему шаблон для микрокода М3 на Лист2 – Лист4 начиная с ячейки D4 (рис. 6).
Воспользуемся любым кодировщиком микрокодов в Интернет или рисунками далее для переноса битовой маски рабочего поля микрокода на листы книги MS Excel (рис. 7-8).
Исходные данные для декодирования готовы. Переходим к заполнению первого листа книги Code.
В системе QR Code существует несколько разновидностей кодирования: числовой, алфавитно-цифровой, байтовый, кандзи, структурированное соединение и FNC1.
Примечание: каждый из методов имеет ряд собственных особенностей. Не получится использовать предложенный ниже алгоритм для байтовых последовательностей или для кандзи.
Используем алфавитно-цифровую систему кодирования для выполнения требований задания. Добавлено следующее ограничение – необходимо кодировать 7, 13 и 14 символов верхнего регистра искусственного алфавита (Таблица 5 ГОСТ). М3 поддерживает два уровня исправления ошибок – L и M. Обращаемся к таблице 7 ГОСТ, получаем, что уровни L и M поддерживают емкость 7 символов, а 13 и 14 символов поддерживает только уровень L (табл. 1).
Воспользуемся алгоритмом, представленном в ГОСТ (п. 7.4.4). Разбиваем кодовые слова на слоги по две буквы. Получаем следующие комбинации:
- SA, FE, BO и X;
- Q1, W2, E3, R4, T5, Y6 и U;
- EF, B_, QW, G_, WI, FI и _7.
Таблица 1 – Число знаков символа и емкость входных данных для QR Code (Таблица 7 ГОСТ)
Версия |
Уровень исправления ошибок |
Число кодовых слов данных |
Число битов для данных |
Емкость данных для разных режимов |
|||
Цифровой |
Алфавитно-цифровой |
Байтовый |
Кандзи |
||||
М1 |
Только обнаружение ошибок |
3 |
20 |
5 |
- |
- |
- |
М2 |
L |
5 |
40 |
10 |
6 |
- |
- |
М |
4 |
32 |
8 |
5 |
- |
- |
|
М3 |
L |
11 |
84 |
23 |
14 |
9 |
6 |
М |
9 |
68 |
18 |
11 |
7 |
4 |
|
М4 |
L |
16 |
128 |
35 |
21 |
15 |
9 |
М |
14 |
112 |
30 |
18 |
13 |
8 |
|
Q |
10 |
80 |
21 |
13 |
9 |
5 |
Открываем лист Code. Пример готового результата представлен на рисунке 9.
Для автоматизации сначала переносим таблицу символов (табл. 2), начиная с ячейки B4.
Таблица 2 – Кодирование/декодирование для алфавитно-цифрового режима (Таблица 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 |
|
|
В данной таблице есть одна особенность – используется исключительно латиница верхнего регистра, т.е. большие буквы.
Резервируем восьмую строчку, начиная с ячейки C8 для исходных данных. В ячейку L8 заносим число 45 – множитель кода первой буквы кодового слога. В десятой строке ячейки заполнены парами ссылок на слоги исходного слова. Например, в ячейке C10 – =C8, а в ячейке D10 – =D8 (рис. 10).
В одиннадцатой строчке происходит автоматический поиск кода символа в последовательности символов. Например, в ячейке C11:
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(C10;$B$4:$AT$4;0))
где
B5:AT5 – порядковый номер символа (строка 5, рис. 9);
C10 – искомый в последовательности символ;
B4:AT4 – последовательность символов для поиска (строка 4, рис. 9).
Заполним ниже таблицу 11 строки со ссылками на соответствующие ячейки:
C11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(C10;$B$4:$AT$4;0)) |
D11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(D10;$B$4:$AT$4;0)) |
F11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(F10;$B$4:$AT$4;0)) |
G11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(G10;$B$4:$AT$4;0)) |
I11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(I10;$B$4:$AT$4;0)) |
J11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(J10;$B$4:$AT$4;0)) |
L11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(L10;$B$4:$AT$4;0)) |
В строке 13 объединяем ячейки C13 и D13. Также объединяем ячейки F13 и G13, и I13 и J13. В ячейку C13-D13 прописываем:
=C11*L8+D11
где
C11 – ячейка с числом 28 (рис. 6);
L8 – ячейка с числом 45 (рис. 6);
D11 – ячейка с числом 10 (рис. 6).
В результате в ячейке должно появиться число 1270. Аналогичные ссылки на вторую и третью пары букв добавляем в ячейки F13-G13 и I13-J13:
=F11*L8+G11
=I11*L8+J11
Добавим ссылку на одинокую седьмую букву в ячейке L13-M13:
=L11
Следующий этап – необходимо перевести полученные десятичные числа 1270, 689, 519 и 33 в двоичное представление. В 15 строке объединяем ячейки с C15 по I15. Аналогично объединяем ячейки в 16 и 17 строках. Также в 15 строке объединяем ячейки K15-M15 (рис. 6).
В ячейку C15-I13 добавляем:
=ОСНОВАНИЕ(C13;2;11)
В ячейку C16-I16 добавляем:
=ОСНОВАНИЕ(F13;2;11)
В ячейку C17-I17 добавляем:
=ОСНОВАНИЕ(I13;2;11)
В ячейку K15-M15 добавляем:
=ОСНОВАНИЕ(L13;2;6)
Далее необходимо объединить все четыре полученные бинарные кодовые последовательности в одну. Объединяем ячейки с C20 по M21. В ячейку C20-M21 добавляем:
=C15&C16&C17&K15
Полученная кодовая комбинация (рис. 6):
100111101100101011000101000000111100001
В результате получена кодовая комбинация первого слова – SAFEBOX. Выделяем диапазон ячеек B7:N22, копируем. Переходим в ячейку O7, добавляем выделенный фрагмент. Переходим в ячейку AD7, аналогично, добавляем выделенный диапазон B7:N22. Пример полученного результата представлен на рисунке 11.
В диапазон ячеек P8:AB8 переносим слово Q1W2E3R4T5Y6U (рис. 11). В строках 10 и 11 меняем функции согласно таблице:
Ячейка |
Функция |
Ячейка |
Функция |
P10 |
=P8 |
P11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(P10;$B$4:$AT$4;0)) |
Q10 |
=Q8 |
Q11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(Q10;$B$4:$AT$4;0)) |
R10 |
=R8 |
R11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(R10;$B$4:$AT$4;0)) |
S10 |
=S8 |
S11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(S10;$B$4:$AT$4;0)) |
T10 |
=T8 |
T11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(T10;$B$4:$AT$4;0)) |
U10 |
=U8 |
U11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(U10;$B$4:$AT$4;0)) |
V10 |
=V8 |
V11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(V10;$B$4:$AT$4;0)) |
W10 |
=W8 |
W11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(W10;$B$4:$AT$4;0)) |
X10 |
=X8 |
X11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(X10;$B$4:$AT$4;0)) |
Y10 |
=Y8 |
Y11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(Y10;$B$4:$AT$4;0)) |
Z10 |
=Z8 |
Z11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(Z10;$B$4:$AT$4;0)) |
AA10 |
=AA8 |
AA11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(AA10;$B$4:$AT$4;0)) |
AB10 |
=AB8 |
AB11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(AB10;$B$4:$AT$4;0)) |
В 13 строке изменяем функции в диапазонах ячеек согласно таблице:
Диапазон |
Функция |
P13-Q13 |
=P11*AB15+Q11 |
R13-S13 |
=R11*AB15+S11 |
T13-U13 |
=T11*$AB$15+U11 |
V13-W13 |
=V11*$AB$15+W11 |
X13-Y13 |
=X11*$AB$15+Y11 |
Z13-AA13 |
=Z11*$AB$15+AA11 |
AB13 |
=AB11 |
Переводим полученные десятичные числа в двоичное представление:
Диапазон |
Функция |
P15-T15 |
=ОСНОВАНИЕ(P13;2;11) |
P16-T16 |
=ОСНОВАНИЕ(R13;2;11) |
P17-T17 |
=ОСНОВАНИЕ(T13;2;11) |
P18-T18 |
=ОСНОВАНИЕ(V13;2;11) |
V15-Z15 |
=ОСНОВАНИЕ(X13;2;11) |
V16-Z16 |
=ОСНОВАНИЕ(Z13;2;11) |
V17-Z17 |
=ОСНОВАНИЕ(AB13;2;6) |
В диапазоне ячеек P20:AB21 меняем функцию на:
=P15&P16&P17&P18&V15&V16&V17
Полученная битовая комбинация в диапазоне ячеек P20:AB21 кодирует искомое слово:
100100100111011010001001001111001100110000111010001111011000000000011110
В диапазон ячеек AE8:AR8 переносим слово EFB QWG WIFI 7 (рис. 11). В строках 10 и 11 меняем функции согласно таблице:
Ячейка |
Функция |
Ячейка |
Функция |
AE10 |
=AE8 |
AE11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(AE10;$B$4:$AT$4;0)) |
AF10 |
=AF8 |
AF11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(AF10;$B$4:$AT$4;0)) |
AG10 |
=AG8 |
AG11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(AG10;$B$4:$AT$4;0)) |
AH10 |
=AH8 |
AH11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(AH10;$B$4:$AT$4;0)) |
AI10 |
=AI8 |
AI11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(AI10;$B$4:$AT$4;0)) |
AJ10 |
=AJ8 |
AJ11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(AJ10;$B$4:$AT$4;0)) |
AK10 |
=AK8 |
AK11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(AK10;$B$4:$AT$4;0)) |
AL10 |
=AL8 |
AL11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(AL10;$B$4:$AT$4;0)) |
AM10 |
=AM8 |
AM11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(AM10;$B$4:$AT$4;0)) |
AN10 |
=AN8 |
AN11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(AN10;$B$4:$AT$4;0)) |
AO10 |
=AO8 |
AO11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(AO10;$B$4:$AT$4;0)) |
AP10 |
=AP8 |
AP11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(AP10;$B$4:$AT$4;0)) |
AQ10 |
=AQ8 |
AQ11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(AQ10;$B$4:$AT$4;0)) |
AR10 |
=AR8 |
AR11 |
=ИНДЕКС($B$5:$AT$5;ПОИСКПОЗ(AR10;$B$4:$AT$4;0)) |
В 13 строке изменяем функции в диапазонах ячеек согласно таблице:
Диапазон |
Функция |
AE13-AF13 |
=AE11*$AR$15+AF11 |
AG13-AH13 |
=AG11*$AR$15+AH11 |
AI13-AJ13 |
=AI11*$AR$15+AJ11 |
AK13-AL13 |
=AK11*$AR$15+AL11 |
AM13-AN13 |
=AM11*$AR$15+AN11 |
AO13-AP13 |
=AO11*$AR$15+AP11 |
AQ13-AR13 |
=AQ11*$AR$15+AR11 |
Переводим полученные десятичные числа в двоичное представление:
Диапазон |
Функция |
AE15-AI15 |
=ОСНОВАНИЕ(AE13;2;11) |
AE16-AI16 |
=ОСНОВАНИЕ(AG13;2;11) |
AE17-AI17 |
=ОСНОВАНИЕ(AI13;2;11) |
AE18-AI18 |
=ОСНОВАНИЕ(AK13;2;11) |
AK15-AO15 |
=ОСНОВАНИЕ(AM13;2;11) |
AK16-AO16 |
=ОСНОВАНИЕ(AO13;2;11) |
AK17-AO17 |
=ОСНОВАНИЕ(AQ13;2;11) |
В диапазоне ячеек AE20:AR21 меняем функцию на:
=AE15&AE16&AE17&AE18&AK15&AK16&AK17
Полученная битовая комбинация в диапазоне ячеек AE20:AR21 кодирует искомое слово:
01010000101010000100111001011001001011110100101101100100101011010111001011011
Лист с корректирующими данными готов.
Переходим к основным микрокодам. Открываем лист книги М3 SAFEBOX с исходным битовым полем (рис. 12a). К сожалению, за долгие годы MS Excel так и не научился работать с цветом ячеек. Добавим в каждую цветную ячейку соответствующее битовое значение: белая ячейка – 0, черная ячейка – 1 (рис. 12b).
Для удобства отделим цветом индикатор служебной информации (рис. 13a) – битовая последовательность информации о формате. Чтение последовательности начинается с 14 бита, т.е. последовательность чтения будет 14, 13, 12, 11, 10 и т.д.
Также отделяем цветом индикатор распознавания микрокода (рис. 13b).
Полученная матрица готова для дальнейшего анализа (рис. 14).
Переходим к первому этапу – работа со служебной информацией.
Этап 1. Служебная информация
Перед тем как начать работать с основной рабочей областью микрокода, необходимо расшифровать служебную информацию. Пример итогового результата приведен на рисунке 15.
Сначала переводим служебную информацию также в бинарное представление, т.е. ряды ячеек E12-L12 и L5-L12 представляем как набор 0 (светлые ячейки) и 1 (темные ячейки) (рис. 15).
Выносим служебную информацию из микрокода, т.е. дублируем полученный ряд в угловом представлении и в представлении – один ряд. Получаем следующие ссылочные ячейки:
Ячейка |
Функция |
Ячейка |
Функция |
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 добавляем функцию (рис. 15):
=СЦЕП(T14:AH14)
По таблице С.1 ГОСТ (табл. 3) находим битовую последовательность информации о формате и соответствующую последовательность бит данных до маскирования. Для данного примера – 10000.
Hidden text
Таблица 3 – Корректирующие последовательности информации о формате
Последовательность до маскирования |
Последовательность после маскирования (символы 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) |
AG7 |
=БИТ.ИСКЛИЛИ(AG6;AG7) |
AH7 |
=БИТ.ИСКЛИЛИ(AH6;AH7) |
В результате получаем последовательность 10000, полностью соответствующую полученной по таблице ГОСТ. Расшифруем полученную комбинацию. Разделим на две части: 100 и 00 (3 и 2 бита соответственно). Обратимся к таблице 13 ГОСТ (табл. 4).
Таблица 4 – Номер символа для 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. Запомним, на последующих этапах данная информация пригодится.
Разбираем вторую часть служебной информации, комбинацию маски 00. Обратимся к рисунку 22 ГОСТ. Перенесем маску с соответствующим битовым кодом на Лист, начиная с ячейки AL4 (рис. 16).
Аналогично основной матрице, каждая черная ячейка обозначена как 1, а каждая белая – 0.
Все необходимые данные на основе служебной информации получены, переходим ко 2-му этапу.
Этап 2. Расшифровка данных основной рабочей области
На основе матрицы исходных данных в диапазоне ячеек D4:R18 и матрицы маскирования в диапазоне ячеек AL4:AZ18 получаем матрицу немаскированных данных в диапазоне ячеек D22:R36 с использованием функции XOR. Пример готового результата представлен на рисунке 17.
В ячейке M23 добавлена следующая формула:
=БИТ.ИСКЛИЛИ(M5;AU5)
Далее за нижний правый угол выделенной ячейки (магический квадрат) дублируем данную формулу на всю поверхность рабочей матрицы. В результате получаем немаскированный вариант для диапазона ячеек M23:R36 и E31:K36.
Самый простой вариант для подготовки к следующему этапу, перенести полученную немаскированную матрицу в таблицу символов вручную. Но это не так интересно. Подготовим таблицу маршрута и заготовку для заполнения битовых комбинаций с учетом особенностей алфавитно-цифрового режима.
Перенесем маршрут (рис. 4) на Лист MS Excel, начиная с ячейки AL22, где каждую ячейку подпишем соответствующим числовым значением. Результат представлен на рисунке 18.
Напомню: не обязательно каждую ячейку прописывать вручную. MS Excel умеет строить прогрессии. Например, заполняем ячейки AZ36 и AZ35 значениями 1 и 3 соответственно. Затем выделяем заполненные ячейки AZ36:AZ35 и за магический квадратик выделенного диапазона (нижний правый угол ячейки) тянем до ячейки AZ23. В результате весь ряд будет заполнен. Остальное рабочее поле можно заполнить аналогичным образом.
Начиная с ячейки T22 в диапазоне ячеек T22:AH33 делаем шаблон-заготовку для последующего наполнения битовой комбинацией в буквенно-цифровом режиме. Пример полученного результата представлен на рисунке 19 (цветовая дифференциация произвольная). Цветом отделена служебная информация и кодовая комбинация декодируемого числа.
Так как этой информации достаточно для расшифровки сообщения, переходим к третьему этапу.
Этап 3. Преобразование кода в набор символов
Пример итогового варианта представлен на рисунке 20.
Как было упомянуто ранее, битовые комбинации в диапазон ячеек T22:Z31 можно перенести вручную (простой вариант). Но можно и автоматизировать. Таблица функций заполнит битовые ячейки автоматически (табл. 5).
Hidden text
Таблица 5 – Функциональные ячейки битовых последовательностей
№ п/п |
Ячейка |
Функция |
Первая строка | ||
1. |
U23 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(U22;$AZ$23:$AZ$36;0);ПОИСКПОЗ(U22;AM36:AZ36;0)) |
2. |
V23 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(V22;$AY$23:$AY$36;0);ПОИСКПОЗ(V22;AM36:AZ36;0)) |
3. |
W23 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(W22;$AZ$23:$AZ$36;0);ПОИСКПОЗ(W22;AM35:AZ35;0)) |
4. |
X23 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(X22;$AY$23:$AY$36;0);ПОИСКПОЗ(X22;AM35:AZ35;0)) |
5. |
Y23 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(Y22;$AZ$23:$AZ$36;0);ПОИСКПОЗ(Y22;AM34:AZ34;0)) |
6. |
Z23 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(Z22;$AY$23:$AY$36;0);ПОИСКПОЗ(Z22;AM34:AZ34;0)) |
Вторая строка | ||
7. |
U25 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(U24;$AZ$23:$AZ$36;0);ПОИСКПОЗ(U24;AM33:AZ33;0)) |
8. |
V25 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(V24;$AY$23:$AY$36;0);ПОИСКПОЗ(V24;AM33:AZ33;0)) |
9. |
W25 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(W24;$AZ$23:$AZ$36;0);ПОИСКПОЗ(W24;AM32:AZ32;0)) |
10. |
X25 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(X24;$AY$23:$AY$36;0);ПОИСКПОЗ(X24;AM32:AZ32;0)) |
11. |
Y25 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(Y24;$AZ$23:$AZ$36;0);ПОИСКПОЗ(Y24;AM31:AZ31;0)) |
12. |
Z25 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(Z24;$AY$23:$AY$36;0);ПОИСКПОЗ(Z24;AM31:AZ31;0)) |
13. |
AA25 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AA24;$AZ$23:$AZ$36;0);ПОИСКПОЗ(AA24;AM30:AZ30;0)) |
14. |
AB25 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AB24;$AY$23:$AY$36;0);ПОИСКПОЗ(AB24;AM30:AZ30;0)) |
15. |
AC25 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AC24;$AZ$23:$AZ$36;0);ПОИСКПОЗ(AC24;AM29:AZ29;0)) |
16. |
AD25 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AD24;$AY$23:$AY$36;0);ПОИСКПОЗ(AD24;AM29:AZ29;0)) |
17. |
AE25 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AE24;$AZ$23:$AZ$36;0);ПОИСКПОЗ(AE24;AM28:AZ28;0)) |
Третья строка | ||
18. |
U27 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(U26;$AY$23:$AY$36;0);ПОИСКПОЗ(U26;AM28:AZ28;0)) |
19. |
V27 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(V26;$AZ$23:$AZ$36;0);ПОИСКПОЗ(V26;AM27:AZ27;0)) |
20. |
W27 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(W26;$AY$23:$AY$36;0);ПОИСКПОЗ(W26;AM27:AZ27;0)) |
21. |
X27 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(X26;$AZ$23:$AZ$36;0);ПОИСКПОЗ(X26;AM26:AZ26;0)) |
22. |
Y27 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(Y26;$AY$23:$AY$36;0);ПОИСКПОЗ(Y26;AM26:AZ26;0)) |
23. |
Z27 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(Z26;$AZ$23:$AZ$36;0);ПОИСКПОЗ(Z26;AM25:AZ25;0)) |
24. |
AA27 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AA26;$AY$23:$AY$36;0);ПОИСКПОЗ(AA26;AM25:AZ25;0)) |
25. |
AB27 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AB26;$AZ$23:$AZ$36;0);ПОИСКПОЗ(AB26;AM24:AZ24;0)) |
26. |
AC27 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AC26;$AY$23:$AY$36;0);ПОИСКПОЗ(AC26;AM24:AZ24;0)) |
27. |
AD27 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AD26;$AZ$23:$AZ$36;0);ПОИСКПОЗ(AD26;AM23:AZ23;0)) |
28. |
AE27 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AE26;$AY$23:$AY$36;0);ПОИСКПОЗ(AE26;AM23:AZ23;0)) |
Четвертая строка | ||
29. |
U29 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(U28;$AX$23:$AX$36;0);ПОИСКПОЗ(U28;AM23:AZ23;0)) |
30. |
V29 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(V28;$AW$23:$AW$36;0);ПОИСКПОЗ(V28;AM23:AZ23;0)) |
31. |
W29 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(W28;$AX$23:$AX$36;0);ПОИСКПОЗ(W28;AM24:AZ24;0)) |
32. |
X29 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(X28;$AW$23:$AW$36;0);ПОИСКПОЗ(X28;AM24:AZ24;0)) |
33. |
Y29 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(Y28;$AX$23:$AX$36;0);ПОИСКПОЗ(Y28;AM25:AZ25;0)) |
34. |
Z29 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(Z28;$AW$23:$AW$36;0);ПОИСКПОЗ(Z28;AM25:AZ25;0)) |
35. |
AA29 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AA28;$AX$23:$AX$36;0);ПОИСКПОЗ(AA28;AM26:AZ26;0)) |
36. |
AB29 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AB28;$AW$23:$AW$36;0);ПОИСКПОЗ(AB28;AM26:AZ26;0)) |
37. |
AC29 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AC28;$AX$23:$AX$36;0);ПОИСКПОЗ(AC28;AM27:AZ27;0)) |
38. |
AD29 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AD28;$AW$23:$AW$36;0);ПОИСКПОЗ(AD28;AM27:AZ27;0)) |
39. |
AE29 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AE28;$AX$23:$AX$36;0);ПОИСКПОЗ(AE28;AM28:AZ28;0)) |
Пятая строка | ||
40. |
U31 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(U30;$AW$23:$AW$36;0);ПОИСКПОЗ(U30;AM28:AZ28;0)) |
41. |
V31 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(V30;$AX$23:$AX$36;0);ПОИСКПОЗ(V30;AM29:AZ29;0)) |
42. |
W31 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(W30;$AW$23:$AW$36;0);ПОИСКПОЗ(W30;AM29:AZ29;0)) |
43. |
X31 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(X30;$AX$23:$AX$36;0);ПОИСКПОЗ(X30;AM30:AZ30;0)) |
44. |
Y31 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(Y30;$AW$23:$AW$36;0);ПОИСКПОЗ(Y30;AM30:AZ30;0)) |
45. |
Z31 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(Z30;$AX$23:$AX$36;0);ПОИСКПОЗ(Z30;AM31:AZ31;0)) |
В диапазоне ячеек U23:V23 указан код 01 – обозначает наличие алфавитно-цифрового режима (таблица 2 ГОСТ).
Следующий диапазон из 4-х бит в ячейках W23:Z23 – диапазон, отображающий битовую комбинацию – 0111 или число 7 (по количеству искомых в микрокоде символов). Проверим, автоматизируем процесс перевода последовательности бит из двоичной системы в десятичную:
1. Объединим ячейки битовых комбинаций в одну AC23:AD23. В полученную ячейку AC23 добавим функцию:
=ДЕС(СЦЕП(W23:Z23);2)
2. Аналогичным образом получим искомые группы пар символов. Добавим функции в ячейки, согласно следующей таблице:
Ячейка |
Функция |
Ячейка |
Функция |
AF25 |
=СЦЕП(U25:AE25) |
AG25-AH25 |
=ДЕС(AF25;2) |
AF27 |
=СЦЕП(U27:AE27) |
AG27-AH27 |
=ДЕС(AF27;2) |
AF29 |
=СЦЕП(U29:AE29) |
AG29-AH29 |
=ДЕС(AF29;2) |
AF31 |
=СЦЕП(U31:Z31) |
AG31-AH31 |
=ДЕС(AF31;2) |
3. Можно выполнить дополнительную проверку по символам согласно следующей таблице:
Ячейка |
Функция |
Ячейка |
Функция |
AG24 |
=ЧАСТНОЕ(AG25;45) |
AH24 |
=AG25-AG24*45 |
AG26 |
=ЧАСТНОЕ(AG27;45) |
AH26 |
=AG27-AG26*45 |
AG28 |
=ЧАСТНОЕ(AG29;45) |
AH28 |
=AG29-AG28*45 |
4. Сравниваем полученные числовые значения со значениями на странице Code:
Ячейка |
Функция |
T25 |
=ЕСЛИ(AG25=Code!C13;"+";"-") |
T27 |
=ЕСЛИ(AG27=Code!F13;"+";"-") |
T29 |
=ЕСЛИ(AG29=Code!I13;"+";"-") |
T31 |
=ЕСЛИ(AG31=Code!L13;"+";"-") |
5. Объединим ячейки в одну T33:AH33. В полученную ячейку T33 добавим условие сравнения предыдущих двух комбинаций. Если совпадают – «ОК!», если не совпадают – не «ОК!»:
=ЕСЛИ(СЧЁТЕСЛИ(T25:T31;"+")=4;"ОК";"не ОК")
6. На данном этапе можно остановиться, остальное поле занимает код Рида-Соломона. В более сложном алгоритме «Пишем микрокод» будет расшифрован данный этап детально на примере.
Этап 4. Применение полученного алгоритма для M3 Q1W2E3R4T5Y6U
Так как заготовлена битовая последовательность для M3 Q1W2E3R4T5Y6U заранее, а основной алгоритм очень схож (необходимо будет поменять только маску и функцию комбинации итогового кода), то воспользуемся данным обстоятельством и просто продублируем страницу M3 SAFEBOX на M3 Q1W2E3R4T5Y6U с учетом замены исходного микрокода.
Копируем диапазон ячеек T4:AZ18 на странице M3 SAFEBOX, переходим на страницу M3 Q1W2E3R4T5Y6U. Выбираем ячейку T4, добавляем скопированный фрагмент T4:AZ18 получаем новый анализ служебной информации (рис. 21).
Для M3 Q1W2E3R4T5Y6U служебная информация дублирует служебную информацию для M3 SAFEBOX. Используется аналогичная маска – 00.
Переходим ко второй составляющей – анализ рабочей области микрокода. Копируем диапазон ячеек B20:AZ39 на странице M3 SAFEBOX, переходим на страницу M3 Q1W2E3R4T5Y6U. Выбираем ячейку B20, добавляем скопированный фрагмент B20:AZ39. Вносим необходимые изменения (см. ниже) получаем новый анализ служебной информации (рис. 22).
Аналогично предыдущему этапу, в диапазоне ячеек U23:V23 указан код 01 – обозначает наличие алфавитно-цифрового режима (таблица 2 ГОСТ). Следующий диапазон из 4-х бит в ячейках W23:Z23 – диапазон, отображающий битовую комбинацию – 1101 или число 13 (по количеству искомых в микрокоде символов). Проверка в ячейке AC23:AD23 подтверждает полученное значение.
Hidden text
1. Добавляем в таблицу 3 следующие ячейки:
№ п/п |
Ячейка |
Функция |
Пятая строка | ||
1. |
AA31 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AA30;$AW$23:$AW$36;0);ПОИСКПОЗ(AA30;AM31:AZ31;0)) |
2. |
AB31 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AB30;$AX$23:$AX$36;0);ПОИСКПОЗ(AB30;AM32:AZ32;0)) |
3. |
AC31 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AC30;$AW$23:$AW$36;0);ПОИСКПОЗ(AC30;AM32:AZ32;0)) |
4. |
AD31 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AD30;$AX$23:$AX$36;0);ПОИСКПОЗ(AD30;AM33:AZ33;0)) |
5. |
AE31 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AE30;$AW$23:$AW$36;0);ПОИСКПОЗ(AE30;AM33:AZ33;0)) |
Шестая строка | ||
6. |
U33 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(U32;$AX$23:$AX$36;0);ПОИСКПОЗ(U32;AM34:AZ34;0)) |
7. |
V33 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(V32;$AW$23:$AW$36;0);ПОИСКПОЗ(V32;AM34:AZ34;0)) |
8. |
W33 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(W32;$AX$23:$AX$36;0);ПОИСКПОЗ(W32;AM35:AZ35;0)) |
9. |
X33 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(X32;$AW$23:$AW$36;0);ПОИСКПОЗ(X32;AM35:AZ35;0)) |
10. |
Y33 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(Y32;$AX$23:$AX$36;0);ПОИСКПОЗ(Y32;AM36:AZ36;0)) |
11. |
Z33 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(Z32;$AW$23:$AW$36;0);ПОИСКПОЗ(Z32;AM36:AZ36;0)) |
12. |
AA33 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AA32;$AV$23:$AV$36;0);ПОИСКПОЗ(AA32;AM36:AZ36;0)) |
13. |
AB33 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AB32;$AU$23:$AU$36;0);ПОИСКПОЗ(AB32;AM36:AZ36;0)) |
14. |
AC33 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AC32;$AV$23:$AV$36;0);ПОИСКПОЗ(AC32;AM35:AZ35;0)) |
15. |
AD33 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AD32;$AU$23:$AU$36;0);ПОИСКПОЗ(AD32;AM35:AZ35;0)) |
16. |
AE33 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AE32;$AV$23:$AV$36;0);ПОИСКПОЗ(AE32;AM34:AZ34;0)) |
Седьмая строка | ||
17. |
U35 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(U34;$AU$23:$AU$36;0);ПОИСКПОЗ(U34;AM34:AZ34;0)) |
18. |
V35 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(V34;$AV$23:$AV$36;0);ПОИСКПОЗ(V34;AM33:AZ33;0)) |
19. |
W35 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(W34;$AU$23:$AU$36;0);ПОИСКПОЗ(W34;AM33:AZ33;0)) |
20. |
X35 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(X34;$AV$23:$AV$36;0);ПОИСКПОЗ(X34;AM32:AZ32;0)) |
21. |
Y35 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(Y34;$AU$23:$AU$36;0);ПОИСКПОЗ(Y34;AM32:AZ32;0)) |
22. |
Z35 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(Z34;$AV$23:$AV$36;0);ПОИСКПОЗ(Z34;AM31:AZ31;0)) |
23. |
AA35 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AA34;$AU$23:$AU$36;0);ПОИСКПОЗ(AA34;AM31:AZ31;0)) |
24. |
AB35 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AB34;$AV$23:$AV$36;0);ПОИСКПОЗ(AB34;AM30:AZ30;0)) |
25. |
AC35 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AC34;$AU$23:$AU$36;0);ПОИСКПОЗ(AC34;AM30:AZ30;0)) |
26. |
AD35 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AD34;$AV$23:$AV$36;0);ПОИСКПОЗ(AD34;AM29:AZ29;0)) |
27. |
AE35 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AE34;$AU$23:$AU$36;0);ПОИСКПОЗ(AE34;AM29:AZ29;0)) |
Восьмая строка | ||
28. |
U37 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(U36;$AV$23:$AV$36;0);ПОИСКПОЗ(U36;AM28:AZ28;0)) |
29. |
V37 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(V36;$AU$23:$AU$36;0);ПОИСКПОЗ(V36;AM28:AZ28;0)) |
30. |
W37 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(W36;$AV$23:$AV$36;0);ПОИСКПОЗ(W36;AM27:AZ27;0)) |
31. |
X37 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(X36;$AU$23:$AU$36;0);ПОИСКПОЗ(X36;AM27:AZ27;0)) |
32. |
Y37 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(Y36;$AV$23:$AV$36;0);ПОИСКПОЗ(Y36;AM26:AZ26;0)) |
33. |
Z37 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(Z36;$AU$23:$AU$36;0);ПОИСКПОЗ(Z36;AM26:AZ26;0)) |
Получим группы пар новых символов. Добавим функции в ячейки, согласно следующей таблице:
Ячейка |
Функция |
Ячейка |
Функция |
AF31 |
=СЦЕП(U31:AE31) |
AG31-AH31 |
=ДЕС(AF31;2) |
AF33 |
=СЦЕП(U33:AE33) |
AG33-AH33 |
=ДЕС(AF33;2) |
AF35 |
=СЦЕП(U35:AE35) |
AG35-AH35 |
=ДЕС(AF35;2) |
AF37 |
=СЦЕП(U37:Z37) |
AG37-AH37 |
=ДЕС(AF37;2) |
Выполним дополнительную проверку по символам согласно следующей таблице:
Ячейка |
Функция |
Ячейка |
Функция |
AG30 |
=ЧАСТНОЕ(AG31;45) |
AH30 |
=AG31-AG30*45 |
AG32 |
=ЧАСТНОЕ(AG33;45) |
AH32 |
=AG33-AG32*45 |
AG34 |
=ЧАСТНОЕ(AG35;45) |
AH34 |
=AG35-AG34*45 |
AG36 |
=ЧАСТНОЕ(AG37;45) |
AH36 |
=AG37-AG36*45 |
Сравниваем полученные числовые значения со значениями на странице Code:
Ячейка |
Функция |
T25 |
=ЕСЛИ(AG25=Code!P13;"+";"-") |
T27 |
=ЕСЛИ(AG27=Code!R13;"+";"-") |
T29 |
=ЕСЛИ(AG29=Code!T13;"+";"-") |
T31 |
=ЕСЛИ(AG31=Code!V13;"+";"-") |
T33 |
=ЕСЛИ(AG33=Code!X13;"+";"-") |
T35 |
=ЕСЛИ(AG35=Code!Z13;"+";"-") |
T37 |
=ЕСЛИ(AG37=Code!AB13;"+";"-") |
Объединим ячейки в одну T39:AH39. В полученную ячейку T39 добавим условие сравнения предыдущих двух комбинаций. Если совпадают – «ОК!», если не совпадают – не «ОК!»:
=ЕСЛИ(СЧЁТЕСЛИ(T25:T37;"+")=7;"ОК";"не ОК")
В результате получаем полное совпадение кодовой составляющей.
Этап 5. Применение полученного алгоритма для M3 EFB QWG WIFI 7
Аналогично предыдущей странице, для M3 EFB QWG WIFI 7 заготовлена битовая последовательность заранее, а алгоритм идентичен М3 Q1W2E3R4T5Y6U. Воспользуемся данным обстоятельством, продублируем страницу М3 Q1W2E3R4T5Y6U на M3 EFB QWG WIFI 7 с учетом замены исходного микрокода.
Копируем диапазон ячеек T4:AZ18 на странице М3 Q1W2E3R4T5Y6U, переходим на страницу M3 EFB QWG WIFI 7. Выбираем ячейку T4, добавляем скопированный фрагмент T4:AZ18 получаем новый анализ служебной информации (рис. 23). Для M3 EFB QWG WIFI 7 служебная информация полностью дублирует служебную информацию для М3 Q1W2E3R4T5Y6U.
Переходим ко второй составляющей – анализ рабочей области микрокода. Копируем диапазон ячеек B20:AZ39 на странице M3 Q1W2E3R4T5Y6U, переходим на страницу M3 EFB QWG WIFI 7. Выбираем ячейку B20, добавляем скопированный фрагмент B20:AZ39. Вносим необходимые изменения (см. ниже) получаем новый анализ служебной информации (рис. 24).
1. Добавляем в таблицу 3 следующие ячейки:
№ п/п |
Ячейка |
Функция |
Восьмая строка | ||
1. |
AA37 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AA36;$AV$23:$AV$36;0);ПОИСКПОЗ(AA36;AM25:AZ25;0)) |
2. |
AB37 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AB36;$AU$23:$AU$36;0);ПОИСКПОЗ(AB36;AM25:AZ25;0)) |
3. |
AC37 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AC36;$AV$23:$AV$36;0);ПОИСКПОЗ(AC36;AM24:AZ24;0)) |
4. |
AD37 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AD36;$AU$23:$AU$36;0);ПОИСКПОЗ(AD36;AM24:AZ24;0)) |
5. |
AE37 |
=ИНДЕКС($E$23:$R$36;ПОИСКПОЗ(AE36;$AV$23:$AV$36;0);ПОИСКПОЗ(AE36;AM23:AZ23;0)) |
2. Изменим функции в ячейки, согласно следующей таблице:
Ячейка |
Функция |
Ячейка |
Функция |
AF37 |
=СЦЕП(U37:AE37) |
AG37-AH37 |
=ДЕС(AF37;2) |
3. Выполним дополнительную проверку по символам согласно следующей таблице:
Ячейка |
Функция |
Ячейка |
Функция |
AG36 |
=ЧАСТНОЕ(AG37;45) |
AH36 |
=AG37-AG36*45 |
4. Сравниваем полученные числовые значения со значениями на странице Code:
Ячейка |
Функция |
T25 |
=ЕСЛИ(AG25=Code!AE13;"+";"-") |
T27 |
=ЕСЛИ(AG27=Code!AG13;"+";"-") |
T29 |
=ЕСЛИ(AG29=Code!AI13;"+";"-") |
T31 |
=ЕСЛИ(AG31=Code!AK13;"+";"-") |
T33 |
=ЕСЛИ(AG33=Code!AM13;"+";"-") |
T35 |
=ЕСЛИ(AG35=Code!AO13;"+";"-") |
T37 |
=ЕСЛИ(AG37=Code!AQ13;"+";"-") |
В результате получаем полное совпадение кодовой составляющей.
P.S.: как уже стало понятно из первых двух закодированных слов, кодирование нечетного количества символов просто изменяет алгоритм кодирования пары символов алфавитно-цифрового режима (11 бит) на код порядкового номера одного символа этого же режима (6 бит). Данный алгоритм – ноу-хау программиста или программистов моделистов программного модуля Ассоциации. Согласно ГОСТ, к нечетной цифре или букве необходимо добавить ноль и перевести в бинарный вид пару символов.
Удачи в декодировании алфавитно-цифровых
последовательностей Micro QR Code версии M3!!!