Задание: необходимо прочитать Micro QR Code версии М2, содержащий кодовое слово, состоящее из символов верхнего регистра (на примере закодированных слов – NOVICE, MONEY и M1ND5; почему выбрано именно такое количество символов будет также расшифровано) на основе алгоритма, приведенного в ГОСТ Р ИСО/МЭК 18004-2015 (п. 7.4.4). Аналогично версии М1 данный режим невозможно прочитать стандартными ресурсами мобильных устройств, производимых GAFAM (как оказалось, свободно распространяемые библиотеки страшно глючат, поэтому Ассоциация отказалась и от этого режима).
Примечание: здесь и далее будет использоваться информация ГОСТ Р ИСО/МЭК 18004-2015 или в оригинале ISO/IEC 18004:2015 (далее – ГОСТ).
Этап 0. Подготовка исходных данных
Рассмотрим М2 поближе. Имеем матрицу размерностью 13´13 бинарных символов (рис. 11 ГОСТ), один индикатор и два определителя (горизонтальный и вертикальный) (рис. 1).

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

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


Запускаем программное приложение MS Excel. Готовим последовательность листов Книги для дальнейшей работы:
- Лист1 – называем Code;
- Лист2 – M2 NOVICE;
- Лист3 – M2 MONEY;
- Лист4 – M2 M1ND5.
Лист1 (Code) – для размещения корректирующих данных и сверки полученных на листах результатов. Листы 2, 3 и 4 нужны для декодирования соответствующих последовательностей.
На листах с семерками (Лист2 – Лист3) делаем размерность ячеек одинаковой (например, 23 на 23 пикселя) и по горизонтали, и по вертикали (рис. 5a). Затем закрашиваем поле серым фоновым цветом (рис. 5b).


Примечание: для удобства дальнейшего описания ссылок на ячейки листа перейдем от современного отображения адресов ячеек в виде R1C1 (относительные ссылки) к старому формату в виде A1 (буквенно-числовое отображение). Выбираем в Меню Файл → Параметры. В категории Формулы в группе Работа с формулами снимаем галочку напротив пункта Стиль ссылок R1C1. В результате названия столбиков должны поменяться с чисел на латинские буквы (рис. 6).
Если посчитать количество пикселей (квадратиков) микрокода М2 (рис. 1) по горизонтали и/или по вертикали, то получится матрица (табличка) размерностью 13×13. Создадим новую схему шаблон для микрокода М2 на листах с семерками: Лист2 – Лист3 начиная с ячейки D4 (рис. 6).

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



Исходные данные для декодирования готовы. Переходим к заполнению первого листа книги Code.
В системе QR Code существует несколько разновидностей кодирования: числовой, алфавитно-цифровой, байтовый, кандзи, структурированное соединение и FNC1.
Примечание: каждый из методов имеет ряд собственных особенностей. Не получится использовать предложенный ниже алгоритм для байтовых последовательностей или для кандзи.
Используем алфавитно-цифровую систему кодирования для выполнения требований задания. Добавлено следующее ограничение – необходимо кодировать 6 и 5 символов верхнего регистра искусственного алфавита (Таблица 5 ГОСТ). М2 поддерживает два уровня исправления ошибок – L и M. Обращаемся к таблице 7 ГОСТ, получаем, что уровни L и M поддерживают емкость 5 символов, а 6 символов поддерживает только уровень L (табл. 1).
Воспользуемся алгоритмом, представленном в ГОСТ (п. 7.4.4). Разбиваем кодовые слова на слоги по две буквы. Получаем следующие комбинации – NO, VI и CE; MO, NE и Y; M1, ND и 5.
Таблица 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))  | 
В строке 13 объединяем ячейки C13 и D13. Также объединяем ячейки F13 и G13, и I13 и J13. В ячейку C13-D13 прописываем:
=C11*L8+D11
где
C11 – ячейка с числом 23 (рис. 6);
L8 – ячейка с числом 45 (рис. 6);
D11 – ячейка с числом 24 (рис. 6).
В результате в ячейке должно появиться число 1059. Аналогичные ссылки на вторую и третью пары букв добавляем в ячейки F13-G13 и I13-J13:
=F11*L8+G11
=I11*L8+J11
Следующий этап – необходимо перевести полученные десятичные числа 1059, 1413 и 554 в двоичное представление. В 15 строке объединяем ячейки с C15 по I15. Аналогично объединяем ячейки в 17 и 19 строках (рис. 6).
В ячейку C15-I13 добавляем:
=ОСНОВАНИЕ(C13;2;11)
В ячейку C17-I17 добавляем:
=ОСНОВАНИЕ(F13;2;11)
В ячейку C19-I19 добавляем:
=ОСНОВАНИЕ(I13;2;11)
Далее необходимо объединить все три полученные бинарные кодовые последовательности в одну. В 21 строке объединяем ячейки с C21 по P21. В ячейку C21-P21 добавляем:
=C15&C17&C19
Полученная кодовая комбинация (рис. 6):
100001000111011000010101000101010
В результате получена кодовая комбинация первого слова – NOVICE. Выделяем диапазон ячеек B7:P22, копируем. Переходим в ячейку Q7, добавляем выделенный фрагмент. Переходим в ячейку AF7, аналогично, добавляем выделенный диапазон B7:P22. Пример полученного результата представлен на рисунке 11.

В диапазон ячеек R8:V8 переносим слово MONEY (рис. 9). Ячейка W8 не нужна, оставляем пустой. Также удаляем содержимое ячеек Y10 и Y11. В диапазоне ячеек X13:Y13 меняем функцию на:
=X11
В диапазоне ячеек R19:X19 меняем функцию на:
=ОСНОВАНИЕ(X13;2;6)
Полученная битовая комбинация в диапазоне ячеек R21:AD21 кодирует искомое слово:
0111111011010000011001100010
В диапазон ячеек AG8:AK8 переносим слово M1ND5 (рис. 9). Ячейка AL8 не нужна, оставляем пустой. Также удаляем содержимое ячеек AN10 и AN11. В диапазоне ячеек AM13:AN13 меняем функцию на:
=AM11
В диапазоне ячеек AG19:AM19 меняем функцию на:
=ОСНОВАНИЕ(AM13;2;6)
Полученная битовая комбинация в диапазоне ячеек AG21:AS21 кодирует искомое слово:
0111101111110000011000000101
Лист с корректирующими данными готов.
Переходим к основным микрокодам. Открываем лист книги М2 NOVICE с исходным битовым полем (рис. 12a). К сожалению, за долгие годы MS Excel так и не научился работать с цветом ячеек. Добавим в каждую цветную ячейку соответствующее битовое значение: белая ячейка – 0, черная ячейка – 1 (рис. 12b).


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


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

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

Сначала переводим служебную информацию также в бинарное представление, т.е. ряды ячеек E12-L12 и L5-L12 представляем как набор 0 (светлые ячейки) и 1 (темные ячейки) (рис. 15).
Выносим служебную информацию из микрокода, т.е. дублируем полученный ряд в угловом представлении и в представлении – один ряд. Получаем следующие ссылочные ячейки:
Ячейка  | 
Функция  | 
Ячейка  | 
Функция  | 
R12  | 
=E12  | 
R14  | 
=R12  | 
S12  | 
=F12  | 
S14  | 
=S12  | 
T12  | 
=G12  | 
T14  | 
=T12  | 
U12  | 
=H12  | 
U14  | 
=U12  | 
V12  | 
=I12  | 
V14  | 
=V12  | 
W12  | 
=J12  | 
W14  | 
=W12  | 
X12  | 
=K12  | 
X14  | 
=X12  | 
Y12  | 
=L12  | 
Y14  | 
=Y12  | 
Y11  | 
=L11  | 
Z14  | 
=Y11  | 
Y10  | 
=L10  | 
AA14  | 
=Y10  | 
Y9  | 
=L9  | 
AB14  | 
=Y9  | 
Y8  | 
=L8  | 
AC14  | 
=Y8  | 
Y7  | 
=L7  | 
AD14  | 
=Y7  | 
Y6  | 
=L6  | 
AE14  | 
=Y6  | 
Y5  | 
=L5  | 
AF14  | 
=Y5  | 
Воспользуемся рядом бит служебной информации 14 строки для определения версии и уровня микрокода, а также для получения вида используемой в данном коде маски. Сначала найдем соответствие в таблице ГОСТ, потом сделаем самопроверку.
Объединяем ячейки R16-AF1. В полученную новую ячейку P16 добавляем функцию (рис. 15):
=СЦЕП(R14:AF14)
По таблице С.1 ГОСТ (табл. 3) находим битовую последовательность информации о формате и соответствующую последовательность бит данных до маскирования. Для данного примера – 00100.
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  | 
ЗВВА  | 
Проверим полученный результат. Заполняем ячейки в соответствии с таблицей:
Ячейка  | 
Функция  | 
Ячейка  | 
Функция  | 
AB6  | 
=R14  | 
AB7  | 
1  | 
AC6  | 
=S14  | 
AC7  | 
0  | 
AD6  | 
=T14  | 
AD7  | 
0  | 
AE6  | 
=U14  | 
AE7  | 
0  | 
AF6  | 
=V14  | 
AF7  | 
1  | 
Воспользуемся алгебраической функцией XOR для получения версии и уровня микрокода, и кода маски. Заполняем ячейки восьмой строчки:
Ячейка  | 
Функция  | 
AB8  | 
=БИТ.ИСКЛИЛИ(AB6;AB7)  | 
AC8  | 
=БИТ.ИСКЛИЛИ(AC6;AC7)  | 
AD8  | 
=БИТ.ИСКЛИЛИ(AD6;AD7)  | 
AE8  | 
=БИТ.ИСКЛИЛИ(AE6;AE7)  | 
AF8  | 
=БИТ.ИСКЛИЛИ(AF6;AF7)  | 
В результате получаем последовательность 00100, полностью соответствующую полученной по таблице ГОСТ. Расшифруем полученную комбинацию. Разделим на две части: 001 и 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  | 
Получаем, что в данном микрокоде используется версия М2 и уровень L, т.е. комбинация M2-L. Запомним, на последующих этапах данная информация пригодится.
Разбираем вторую часть служебной информации, комбинацию маски 00. Обратимся к рисунку 22 ГОСТ. Перенесем маску с соответствующим битовым кодом на Лист, начиная с ячейки AJ4 (рис. 16).

Аналогично основной матрице, каждая черная ячейка обозначена как 1, а каждая белая – 0.
Все необходимые данные на основе служебной информации получены, переходим ко 2-му этапу.
Этап 2. Расшифровка данных основной рабочей области
На основе матрицы исходных данных в диапазоне ячеек D4:P16 и матрицы маскирования в диапазоне ячеек AJ4:AV16 получаем матрицу немаскированных данных в диапазоне ячеек D20:P32 с использованием функции XOR. Пример готового результата представлен на рисунке 17.

В ячейке M21 добавлена следующая формула:
=БИТ.ИСКЛИЛИ(M5;AS5)
Далее за нижний правый угол выделенной ячейки (магический квадрат) дублируем данную формулу на всю поверхность рабочей матрицы. В результате получаем немаскированный вариант для диапазона ячеек M21:P32 и E29:L32.
Самый простой вариант для подготовки к следующему этапу, перенести полученную немаскированную матрицу в таблицу символов вручную. Но это не так интересно. Подготовим таблицу маршрута и заготовку для заполнения битовых комбинаций с учетом особенностей алфавитно-цифрового режима.
Перенесем маршрут (рис. 4) на Лист MS Excel, начиная с ячейки AJ20, где каждую ячейку подпишем соответствующим числовым значением. Результат представлен на рисунке 18.

Напомню: не обязательно каждую ячейку прописывать вручную. MS Excel умеет строить прогрессии. Например, заполняем ячейки AV32 и AV31 значениями 1 и 3 соответственно. Затем выделяем заполненные ячейки AV32:AV31 и за магический квадратик выделенного диапазона (нижний правый угол ячейки) тянем до ячейки AV21. В результате весь ряд будет заполнен. Остальное рабочее поле можно заполнить аналогичным образом.
Начиная с ячейки R20 в диапазоне ячеек R20:AE31 делаем шаблон-заготовку для последующего наполнения битовой комбинацией в буквенно-цифровом режиме. Пример полученного результата представлен на рисунке 19 (цветовая дифференциация произвольная). Цветом отделена служебная информация и кодовая комбинация декодируемого числа.

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

Как было упомянуто ранее, битовые комбинации в диапазон ячеек R21:AB27 можно перенести вручную (простой вариант). Но можно и автоматизировать. Таблица функций заполнит битовые ячейки автоматически (табл. 5).
Hidden text
Таблица 5 – Функциональные ячейки битовых последовательностей
№ п/п  | 
Ячейка  | 
Функция  | 
Первая строка  | ||
1.  | 
R21  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(R20;$AV$21:$AV$32;0);ПОИСКПОЗ(R20;AK32:AV32;0))  | 
2.  | 
S21  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(S20;$AU$21:$AU$32;0);ПОИСКПОЗ(S20;AK32:AV32;0))  | 
3.  | 
T21  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(T20;$AV$21:$AV$32;0);ПОИСКПОЗ(T20;AK31:AV31;0))  | 
4.  | 
U21  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(U20;$AU$21:$AU$32;0);ПОИСКПОЗ(U20;AK31:AV31;0))  | 
Вторая строка  | ||
5.  | 
R23  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(R22;$AV$21:$AV$32;0);ПОИСКПОЗ(R22;AK30:AV30;0))  | 
6.  | 
S23  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(S22;$AU$21:$AU$32;0);ПОИСКПОЗ(S22;AK30:AV30;0))  | 
7.  | 
T23  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(T22;$AV$21:$AV$32;0);ПОИСКПОЗ(T22;AK29:AV29;0))  | 
8.  | 
U23  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(U22;$AU$21:$AU$32;0);ПОИСКПОЗ(U22;AK29:AV29;0))  | 
9.  | 
V23  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(V22;$AV$21:$AV$32;0);ПОИСКПОЗ(V22;AK28:AV28;0))  | 
10.  | 
W23  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(W22;$AU$21:$AU$32;0);ПОИСКПОЗ(W22;AK28:AV28;0))  | 
11.  | 
X23  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(X22;$AV$21:$AV$32;0);ПОИСКПОЗ(X22;AK27:AV27;0))  | 
12.  | 
Y23  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(Y22;$AU$21:$AU$32;0);ПОИСКПОЗ(Y22;AK27:AV27;0))  | 
13.  | 
Z23  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(Z22;$AV$21:$AV$32;0);ПОИСКПОЗ(Z22;AK26:AV26;0))  | 
14.  | 
AA23  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(AA22;$AU$21:$AU$32;0);ПОИСКПОЗ(AA22;AK26:AV26;0))  | 
15.  | 
AB23  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(AB22;$AV$21:$AV$32;0);ПОИСКПОЗ(AB22;AK25:AV25;0))  | 
Третья строка  | ||
16.  | 
R25  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(R24;$AU$21:$AU$32;0);ПОИСКПОЗ(R24;AK25:AV25;0))  | 
17.  | 
S25  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(S24;$AV$21:$AV$32;0);ПОИСКПОЗ(S24;AK24:AV24;0))  | 
18.  | 
T25  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(T24;$AU$21:$AU$32;0);ПОИСКПОЗ(T24;AK24:AV24;0))  | 
19.  | 
U25  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(U24;$AV$21:$AV$32;0);ПОИСКПОЗ(U24;AK23:AV23;0))  | 
20.  | 
V25  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(V24;$AU$21:$AU$32;0);ПОИСКПОЗ(V24;AK23:AV23;0))  | 
21.  | 
W25  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(W24;$AV$21:$AV$32;0);ПОИСКПОЗ(W24;AK22:AV22;0))  | 
22.  | 
X25  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(X24;$AU$21:$AU$32;0);ПОИСКПОЗ(X24;AK22:AV22;0))  | 
23.  | 
Y25  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(Y24;$AV$21:$AV$32;0);ПОИСКПОЗ(Y24;AK21:AV21;0))  | 
24.  | 
Z25  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(Z24;$AU$21:$AU$32;0);ПОИСКПОЗ(Z24;AK21:AV21;0))  | 
25.  | 
AA25  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(AA24;$AT$21:$AT$32;0);ПОИСКПОЗ(AA24;AK21:AV21;0))  | 
26.  | 
AB25  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(AB24;$AS$21:$AS$32;0);ПОИСКПОЗ(AB24;AK21:AV21;0))  | 
Четвертая строка  | ||
27.  | 
R27  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(R26;$AT$21:$AT$32;0);ПОИСКПОЗ(R26;AK22:AV22;0))  | 
28.  | 
S27  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(S26;$AS$21:$AS$32;0);ПОИСКПОЗ(S26;AK22:AV22;0))  | 
29.  | 
T27  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(T26;$AT$21:$AT$32;0);ПОИСКПОЗ(T26;AK23:AV23;0))  | 
30.  | 
U27  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(U26;$AS$21:$AS$32;0);ПОИСКПОЗ(U26;AK23:AV23;0))  | 
31.  | 
V27  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(V26;$AT$21:$AT$32;0);ПОИСКПОЗ(V26;AK24:AV24;0))  | 
32.  | 
W27  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(W26;$AS$21:$AS$32;0);ПОИСКПОЗ(W26;AK24:AV24;0))  | 
33.  | 
X27  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(X26;$AT$21:$AT$32;0);ПОИСКПОЗ(X26;AK25:AV25;0))  | 
34.  | 
Y27  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(Y26;$AS$21:$AS$32;0);ПОИСКПОЗ(Y26;AK25:AV25;0))  | 
35.  | 
Z27  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(Z26;$AT$21:$AT$32;0);ПОИСКПОЗ(Z26;AK26:AV26;0))  | 
36.  | 
AA27  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(AA26;$AS$21:$AS$32;0);ПОИСКПОЗ(AA26;AK26:AV26;0))  | 
37.  | 
AB27  | 
=ИНДЕКС($E$21:$P$32;ПОИСКПОЗ(AB26;$AT$21:$AT$32;0);ПОИСКПОЗ(AB26;AK27:AV27;0))  | 
В ячейке R21 указан код 1 – обозначает наличие алфавитно-цифрового режима (таблица 2 ГОСТ).
Следующий диапазон из 3-х бит в ячейках S21:U21 – диапазон, отображающий битовую комбинацию – 110 или число 6 (по количеству искомых в микрокоде символов). Проверим, автоматизируем процесс перевода последовательности бит из двоичной системы в десятичную:
1. Объединим ячейки битовых комбинаций в одну W21:X21. В полученную ячейку W21 добавим функцию:
=СЦЕП(S21:U21)
2. В ячейку Y21 добавим функцию перевода двоичного кода в десятичное значение:
=ДВ.В.ДЕС(W21)
3. Аналогичным образом получим искомые группы пар символов. Добавим функции в ячейки, согласно следующие таблице:
Ячейка  | 
Функция  | 
Ячейка  | 
Функция  | 
AС23  | 
=СЦЕП(R23:AB23)  | 
AD23-AE23  | 
=ДЕС(AC23;2)  | 
AС25  | 
=СЦЕП(R25:AB25)  | 
AD25-AE25  | 
=ДЕС(AC25;2)  | 
AС27  | 
=СЦЕП(R27:AB27)  | 
AD27-AE27  | 
=ДЕС(AC27;2)  | 
4. Объединим ячейки в одну R29:AE29. Добавляем функцию сцепления битовых комбинаций:
=СЦЕП(AC23;AC25;AC27)
5. Объединим ячейки в одну R30:AE30. Добавляем функцию сцепления числовых комбинаций:
=Code!C21
6. Объединим ячейки в одну R31:AE31. В полученную ячейку R31 добавим условие сравнения предыдущих двух комбинаций. Если совпадают – «ОК!», если не совпадают – не «ОК!»:
=ЕСЛИ(R29=R30;"ОК!";"не ОК!")
7. На данном этапе можно остановиться, остальное поле занимает код Рида-Соломона. В более сложном алгоритме «Пишем микрокод» будет расшифрован данный этап детально на примере.
Этап 4. Применение полученного алгоритма для M2 MONEY
Так как заготовлена битовая последовательность для M2 MONEY заранее, а основной алгоритм очень схож (необходимо будет поменять только маску и функцию комбинации итогового кода), то воспользуемся данным обстоятельством и просто продублируем страницу M2 NOVICE на M2 MONEY с учетом замены исходного микрокода.
Копируем диапазон ячеек R4:AV16 на странице M2 NOVICE, переходим на страницу M2 MONEY. Выбираем ячейку R4, добавляем скопированный фрагмент R4:AV16 получаем новый анализ служебной информации (рис. 21).
Для M2 MONEY служебная информация не дублирует служебную информацию для M2 NOVICE. Необходимо использовать другую маску – 11.

Переходим ко второй составляющей – анализ рабочей области микрокода. Результат представлен на рисунке 22.

Аналогично предыдущему этапу, в ячейке R21 указан код 1 – обозначает наличие алфавитно-цифрового режима (таблица 2 ГОСТ). Следующий диапазон из 3-х бит в ячейках S21:U21 – диапазон, отображающий битовую комбинацию – 101 или число 5 (по количеству искомых в микрокоде символов). Проверка в ячейке Y21 подтверждает полученное значение.
1. Изменим функции в ячейках, согласно следующей таблице:
Ячейка  | 
Функция  | 
Ячейка  | 
Функция  | 
AС27  | 
=СЦЕП(R27:W27)  | 
AD27-AE27  | 
=ДЕС(AC27;2)  | 
2. В объединенный диапазон ячеек R30:AE30 добавляем функцию:
=Code!R21
В результате получаем полное совпадение кодовой составляющей.
Этап 5. Применение полученного алгоритма для M2 M1ND5
Аналогично предыдущей странице, для M2 M1ND5 заготовлена битовая последовательность заранее, а алгоритм идентичен M2 MONEY. Воспользуемся данным обстоятельством, продублируем страницу M2 MONEY на M2 M1ND5 с учетом замены исходного микрокода.
Копируем диапазон ячеек R4:AV16 на странице M2 MONEY, переходим на страницу M2 M1ND5. Выбираем ячейку R4, добавляем скопированный фрагмент R4:AV16 получаем новый анализ служебной информации (рис. 23). Для M2 M1ND5 служебная информация полностью дублирует служебную информацию для M2 MONEY.

Переходим ко второй составляющей – анализ рабочей области микрокода. Результат представлен на рисунке 24.

Аналогично M2 MONEY, в ячейке R21 указан код 1 – обозначает наличие алфавитно-цифрового режима (таблица 2 ГОСТ). Следующий диапазон из 3-х бит в ячейках S21:U21 – диапазон, отображающий битовую комбинацию – 101 или число 5 (по количеству искомых в микрокоде символов). Проверка в ячейке Y21 подтверждает полученное значение.
Вносим единственное изменение – в объединенный диапазон ячеек R30:AE30 добавляем функцию:
=Code!AG21
В результате получаем полное совпадение кодовой составляющей.
P.S.: как уже стало понятно из добавочных двух последних этапов, кодирование нечетного количества символов просто изменяет алгоритм кодирования пары символов алфавитно-цифрового режима (11 бит) на код порядкового номера одного символа этого же режима (6 бит). Данный алгоритм – ноу-хау программиста или программистов моделистов программного модуля Ассоциации. Согласно ГОСТ, к нечетной цифре или букве необходимо добавить ноль и перевести в бинарный вид пару символов.
Удачи в декодировании алфавитно-цифровых последовательностей Micro QR Code версии M2!!!