Задача
Проект: Анализ алгоритма контрольного числа УИН ДМДК
Цель: Определить метод формирования контрольного числа (1 цифра) в УИН
Задачи:
— Выявить алгоритм генерации контрольного числа (например, CRC, взвешенные суммы).
— Предоставить формулу или код для расчета.
— Если точный алгоритм не найден — разработать модель (нейросеть) с точностью 50%.
Клиент предоставил базу с данными
1) Я создал дерево решения для этих данных с прогнозируемым исходом не менее 50 верных ответов.
2) В процессе я догоался до 1-ого алгоритма.
3) Дальше я распознал алгоритм целиком. В результат подробное описание.
Я выявил зависимость между цифрами. Вот описание алгоритма:
Алгорим работы УИН ДМДК очень простой.
1) Сначала составляется таблица 10х10.
В каждой строчке цифры от 0 до 9 и каждая встречается в строке один раз.
Со столбцами аналогично. В каждом столбце цифры от 0 до 9 и каждая цифра встречается 1 раз.
Эти цифры соответствуют контрольным числам. В нашем случае, если мы рассматриваем годы 23 и 24,
Эти контрольеые цифры соответствуют числам
от 643230000000000
до 643230000000099
(15 разрядов)
Итого, таблица показывает, какие контрольные цифры для первых 100 чисел.
2) Дальше, если мы перейдём ко 2-ой сотне чисел, то для них форммируется аналогичная таблица,
но по определённому правилу.
Если в первой таблице (для первой сотни), до пустим на месте (i1,j1) стоит число "а",
на месте (i2,j2) стоит такое же число "a", а во второй таблице (для второй сотни) на
сесте (i1,j1) стоит число "b", то на месте (i2,j2) во второй таблице будет стоять число "b".
По факту мы просто замениали число "a" на число "b".
Это можно закодировать ключом из 10 цифр, где на месте "a" (это ведь какая-то цифра <10),
стоит цифра "b"
Пример:
a=3, b=5
Получаем ключ: ***5*****.
На 3-ем (у нас отсчёт от 0) стоит цифра 5.
Итак, мы получили ключ из 10 цифр, который позволяет получить контрольные цифры для второй стотни чмсел,
т.е. для чисел из диапазона.
от 643230000000100
до 643230000000199
(15 разрядов)
Также у нас всегда, условно, есть ключ для 1-ой сотни, который не меняет цифры:
0123456789
Итого 2 ключа для первых 2-х сотен чисел.
Для следующих сотен также нужны свои ключи.
Т.е. если мы хотим узнать значения контрольных чисел для первых 10*100=1000 чисел, то
нам нужна таблица 10х10 и 10 ключей.
Это диапазон чисел:
от 643230000000000
до 643230000000999
(15 разрядов)
3) Оказывается ключи имеют те же свойства, что и таблица. Т.е. если мы хотим получить
следующие 10 ключей для таблицы (и узнать тем самым следующие 1000 контрольных цифр), то
нам достаточно найти ключ из 10 цифр, но этот ключ используется уже не к таблице а к тем
10-и ключам, что мы определили выше.
Тем самым мы определим ещё 10 ключей (всего 20)
В итоге 10 таких ключей позволяют определить уже набор из 100 ключей для таблицы, т.е.
100х100=10000 первых контрольных чисел мы тем самым можем получить.
Это диапазон чисел:
от 643230000000000
до 643230000009999
(15 разрядов)
4) Вот эти ключи, что мы определили на шаге 3, имеют те же свойства, что таблица или ключи,
определённые на шаге 2. Поэтому к ним применяется та же процедура.
Таким образом, следующие 10 ключей кодируют "следующий разряд".
Используя их мы может определить контрольные цифры из диапазона:
от 643230000000000
до 643230000099999
(15 разрядов)
5) Процесс можно продолжать дальше. Каждые 10 новых ключей позволяют определить в 10 раз
больше контрольных цифр.
Если какой-то разря не используется, то он просто пропускается.
Итого, подсчитаем, сколько нужно ключей.
У нас 15-2=13 разрядов под ключи. Первые 2 разряда под таблицу.
Из этих 13 разрядов первые 4 неизменны. Значит 9 разрядов.
5-ый разряд имеет цифру 3 или 4, т.е. требует всего 2 ключа. Остальные 8 требуют 10 ключей.
Итого, требуется 82 ключа по 10 цифр и одна таблица 10х10.
Это 920 цифр.