Задание: необходимо прочитать 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).

Рисунок 1 – Исходная матрица для М3

Первый наносимый ограничитель символ на матрицу М3 – битовые последовательности информации о формате (рис. 2). Чтение битовой последовательности начинается с 14 бита, т.е. последовательность чтения/записи будет 14, 13, 12, 11, 10 и т.д.

Рисунок 2 – Битовая последовательность информации о формате

Второй не менее важный элемент М3 – маршрут последовательности заполнения битами данных поля матрицы (рис. 3). Данная схема отражена на рисунке 11 ГОСТ.

Примечание: приведенные в ГОСТ маршруты для M3-M и M3-L практически одинаковые. Если присмотреться внимательнее, то оба маршрута дублируют друг друга и не вносят изменения в последовательность чтения/записи. Единственное различие – это учет блока в 4-бита для RS-алгоритма (9 и 11 блоки). Далее приводится вариант маршрутов для M3-M и M3-L, примененные в распространяемом бесплатном модуле Ассоциации (рис. 4). Маршруты идентичны и не совпадают с приведенными в ГОСТ (ноу-хау программистов моделистов).

Рисунок 3a – Маршруты последовательностей записи бит кода М3-L по ГОСТ
Рисунок 3b – Маршруты последовательностей записи бит кода M3-M по ГОСТ

Если наложить маршрут на матрицу, получаем последовательность из 124 бит кода М3 (рис. 4). Число 124 пригодится позже при добавлении кода по алгоритму Рида-Соломона на поле Галуа.

Рисунок 4a – Кодовая последовательность на матричном поле М3-L не по ГОСТ
Рисунок 4b – Кодовая последовательность на матричном поле М3-М не по ГОСТ

Примечание: здесь и далее будем использовать один из доступных программных инструментов Ассоциации практически на любом ПК – 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).

Рисунок 5a – Заготовка для работы с микрокодами версии М3 (ячейки)
Рисунок 5b – Заготовка для работы с микрокодами версии М3 (поле)

Примечание: для удобства дальнейшего описания ссылок на ячейки листа перейдем от современного отображения адресов ячеек в виде R1C1 (относительные ссылки) к старому формату в виде A1 (буквенно-числовое отображение). Выбираем в Меню ФайлПараметры. В категории Формулы в группе Работа с формулами снимаем галочку напротив пункта Стиль ссылок R1C1. В результате названия столбиков должны поменяться с чисел на латинские буквы (рис. 6).

Если посчитать количество пикселей (квадратиков) микрокода М3 (рис. 1) по горизонтали и/или по вертикали, то получится матрица (табличка) размерностью 15×15. Создадим новую схему шаблон для микрокода М3 на Лист2 – Лист4 начиная с ячейки D4 (рис. 6).

Рисунок 6 – Матрица рабочей поверхности с нанесенными индикаторами М3

Воспользуемся любым кодировщиком микрокодов в Интернет или рисунками далее для переноса битовой маски рабочего поля микрокода на листы книги MS Excel (рис. 7-8).

Рисунок 7 – Исходная матрица битовых данных для М3 SAFEBOX
Рисунок 8a – Исходная матрица битовых данных для M3 Q1W2E3R4T5Y6U
Рисунок 8b – Исходная матрица битовых данных для M3 EFB QWG WIFI 7

Исходные данные для декодирования готовы. Переходим к заполнению первого листа книги 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.

Рисунок 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).

Рисунок 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.

Рисунок 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).

Рисунок 12a – Заполненная матрица битовой составляющей исходных данных
Рисунок 12b – Матрица битовой составляющей исходных данных с обозначениями

Для удобства отделим цветом индикатор служебной информации (рис. 13a) – битовая последовательность информации о формате. Чтение последовательности начинается с 14 бита, т.е. последовательность чтения будет 14, 13, 12, 11, 10 и т.д.

Рисунок 13a – Отделена цветом служебная информация

Также отделяем цветом индикатор распознавания микрокода (рис. 13b).

Рисунок 13b – Отделены цветом служебная информация и индикаторы

Полученная матрица готова для дальнейшего анализа (рис. 14).

Рисунок 14 – Итоговый результат отображения матрицы исходных данных версии М3

Переходим к первому этапу – работа со служебной информацией.

 Этап 1. Служебная информация

Перед тем как начать работать с основной рабочей областью микрокода, необходимо расшифровать служебную информацию. Пример итогового результата приведен на рисунке 15.

Рисунок 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).

Рисунок 16 – Выбранная маска 00 для микрокода M3-M

Аналогично основной матрице, каждая черная ячейка обозначена как 1, а каждая белая – 0.

Все необходимые данные на основе служебной информации получены, переходим ко 2-му этапу.

 Этап 2. Расшифровка данных основной рабочей области

 На основе матрицы исходных данных в диапазоне ячеек D4:R18 и матрицы маскирования в диапазоне ячеек AL4:AZ18 получаем матрицу немаскированных данных в диапазоне ячеек D22:R36 с использованием функции XOR. Пример готового результата представлен на рисунке 17.

Рисунок 17 – Матрица немаскированных данных М3-M

В ячейке M23 добавлена следующая формула:

=БИТ.ИСКЛИЛИ(M5;AU5)

Далее за нижний правый угол выделенной ячейки (магический квадрат) дублируем данную формулу на всю поверхность рабочей матрицы. В результате получаем немаскированный вариант для диапазона ячеек M23:R36 и E31:K36.

Самый простой вариант для подготовки к следующему этапу, перенести полученную немаскированную матрицу в таблицу символов вручную. Но это не так интересно. Подготовим таблицу маршрута и заготовку для заполнения битовых комбинаций с учетом особенностей алфавитно-цифрового режима.

Перенесем маршрут (рис. 4) на Лист MS Excel, начиная с ячейки AL22, где каждую ячейку подпишем соответствующим числовым значением. Результат представлен на рисунке 18.

Рисунок 18 – Маршрут обхода рабочего поля для M3-M на рабочем листе

Напомню: не обязательно каждую ячейку прописывать вручную. MS Excel умеет строить прогрессии. Например, заполняем ячейки AZ36 и AZ35 значениями 1 и 3 соответственно. Затем выделяем заполненные ячейки AZ36:AZ35 и за магический квадратик выделенного диапазона (нижний правый угол ячейки) тянем до ячейки AZ23. В результате весь ряд будет заполнен. Остальное рабочее поле можно заполнить аналогичным образом.

Начиная с ячейки T22 в диапазоне ячеек T22:AH33 делаем шаблон-заготовку для последующего наполнения битовой комбинацией в буквенно-цифровом режиме. Пример полученного результата представлен на рисунке 19 (цветовая дифференциация произвольная). Цветом отделена служебная информация и кодовая комбинация декодируемого числа.

Рисунок 19 – Шаблон-заготовка для битовых комбинаций

Так как этой информации достаточно для расшифровки сообщения, переходим к третьему этапу.

 Этап 3. Преобразование кода в набор символов

 Пример итогового варианта представлен на рисунке 20.

Рисунок 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.

Рисунок 21 – Служебная информация для М3 Q1W2E3R4T5Y6U

Переходим ко второй составляющей – анализ рабочей области микрокода. Копируем диапазон ячеек B20:AZ39 на странице M3 SAFEBOX, переходим на страницу M3 Q1W2E3R4T5Y6U. Выбираем ячейку B20, добавляем скопированный фрагмент B20:AZ39. Вносим необходимые изменения (см. ниже) получаем новый анализ служебной информации (рис. 22).

Рисунок 22 – Пример готового результата для М3 Q1W2E3R4T5Y6U

Аналогично предыдущему этапу, в диапазоне ячеек 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))

  1. Получим группы пар новых символов. Добавим функции в ячейки, согласно следующей таблице:

Ячейка

Функция

Ячейка

Функция

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)

  1. Выполним дополнительную проверку по символам согласно следующей таблице:

Ячейка

Функция

Ячейка

Функция

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

  1. Сравниваем полученные числовые значения со значениями на странице 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;"+";"-")

  1. Объединим ячейки в одну 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.

Рисунок 23 – Служебная информация для M3 EFB QWG WIFI 7

Переходим ко второй составляющей – анализ рабочей области микрокода. Копируем диапазон ячеек B20:AZ39 на странице M3 Q1W2E3R4T5Y6U, переходим на страницу M3 EFB QWG WIFI 7. Выбираем ячейку B20, добавляем скопированный фрагмент B20:AZ39. Вносим необходимые изменения (см. ниже) получаем новый анализ служебной информации (рис. 24).

Рисунок 24 – Пример готового результата для M3 EFB QWG WIFI 7

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!!!