В целях увеличения объема номеров при неизменном количестве символов в формат федерального уникального номера средства маркирования (УНСМ) введены буквы. Однако не все электронные средства маркирования могут его поддерживать.
В этой связи Россельхознадзор публикует алгоритм пересчёта федерального УНСМ в формат чисто цифровых номеров, поддерживаемый некоторыми электронными средствами маркирования.
Пока Служба продолжит выдавать УНСМ цифро-буквенного формата. Для «вшивания» таких номеров в электронные средства маркирования, которые поддерживают только цифровой формат, их необходимо будет сначала перевести в этот цифровой формат по приведенной ниже схеме.
В дальнейшем в Хорриоте будет реализован функционал по автоматическому перекодированию цифро-буквенных УНСМ в цифровые и обратно – из цифровых в цифро-буквенные. При заказе цифровых УНСМ Россельхознадзор будет выдавать цифро-буквенные номера и указывать их цифровые аналоги. В карточке животных/групп животных будет добавлена поддержка обоих форматов номеров одновременно.
До реализации изложенных функций в системе необходимо вносить только номер, который был выдан изначально, т.е. номер федерального цифро-буквенного формата.
При добавлении поддержки нового цифрового формата в Хорриот для электронных носителей поддержка цифро-буквенного формата не будет прекращена и будет работать в полном объёме.
Федеральный УНСМ цифро-буквенного формата состоит из 11 символов и имеет следующий вид:
RU[1-2][a-z0-9]{7}[0-9]
- первые два разряда заполняются заглавными буквами – «RU», показывающими, что животные подвергнуты учету в Российской Федерации;
- третий разряд заполняется цифрой «1» или «2»:
- «1» в случае, если животное подвергнуто индивидуальной идентификации;
- «2» в случае, если животное подвергнуто групповой идентификации;
- 7 символов с четвертого по десятый разряды заполняются уникальной последовательностью цифр и строчных английских букв (если УНСМ был выдан до мая 2021, то с четвертого по десятый разряды состоят только из цифр);
- одиннадцатый разряд является служебным и содержит контрольную сумму (далее – КС), вычисленную для всего номера (с 1-го символа по 10-й) по алгоритму «Схема проверки контрольной суммы» с основанием 10.
После преобразования в цифровой формат федеральный УНСМ будет состоять из 15 символов и будет иметь следующий вид:
643[1-2][0-9]{11}
- первые три разряда заполняются цифрами «643», показывающими, что животные подвергнуты учету в Российской Федерации;
- четвертый разряд заполняется цифрой контрольной суммы, вычисленной для уникальной части номера (символы с 5-го по 15-й) по алгоритму «Схема проверки контрольной суммы» с основанием 5 и следующими дополнениями
- в случае, если животное подвергнуто индивидуальной идентификации – оставить цифру без изменений;
- в случае, если животное подвергнуто групповой идентификации – добавить 5;
- 11 символов с пятого по пятнадцатый разряды заполняются уникальной последовательностью цифр.
Уникальная часть номера средства маркирования цифро-буквенного формата в текстовом представлении представляет собой алфавит и цифры от 0 до 9: «0123456789abcdefghijklmnopqrstuvwxyz», что соответствует 36-ричной системе счисления.
Уникальная часть номера средства маркирования цифрового формата представляет собой цифры от 0 до 9, что соответствует 10-тичной системе счисления.
Для внесения УНСМ в текстовом формате на носитель необходимо преобразовать уникальную часть номера средства маркирования цифро-буквенного формата из 36-ричной системы счисления в 10-тичную.
- Алгоритм для преобразования числа из 36-ричной в 10-тичную систему счисления
- Пример перевода числа b316100 из 36-ричной в 10-тичную систему
- Алгоритм для преобразования числа из 10-тичной системы счисления в 36-ричную
- Схема проверки контрольной суммы на примере цифро-буквенного УНСМ
- Пример вычисления контрольной суммы номера RU1b3161006
Алгоритм для преобразования числа из 36-ричной в 10-тичную систему счисления
Перевести буквы из 36-ричной системы в 10-тичную, пользуясь ниже приведенной таблицей соответствия букв из 36-ричной системы цифрам в 10-тичной
a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r |
10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
s | t | u | v | w | x | y | z |
28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 |
Сложить все произведения каждой цифры числа на основание системы счисления, т.е. на 36, в степени соответствующего разряда каждой цифры числа. Первый разряд соответствует степени 0, второй – степени 1, третий – степени 2 и т.д.
Пример перевода числа b316100 из 36-ричной в 10-тичную систему
Складываем все произведения каждой цифры числа на 36 в степени соответствующего разряда каждой цифры числа.
Разряды цифр числа «b316100» в соответствии с таблицей справа налево следующие: «0» — 1 разряд; «0» — 2 разряд; «1» — 3 разряд; «6» — 4 разряд; «1» — 5 разряд; «3» — 6 разряд; «11» — 7 разряд.
Учитывая, что первый разряд соответствует степени 0, второй – степени 1, третий – степени 2 и т.д., получаем следующее:
(11 × 36⁶) + (3 × 36⁵) + (1 × 36⁴) + (6 × 36³) + (1 × 36²) + (0 × 36¹) + (0 × 36⁰) = 23944605696 + 181398528 + 1679616 + 279936 + 1296 + 0 + 0 = 24127965072.
Следовательно, число «b316100» в 36-ричной системе = числу «24127965072» в 10-тичной системе.
Таким образом, перевод цифро-буквенного УНСМ для индивидуального маркирования животного, в котором уникальная часть состоит из числа «b316100», в цифровой формат будет выглядеть следующим образом:
Алгоритм для преобразования числа из 10-тичной системы счисления в 36-ричную
Данный алгоритм необходим для проверки корректности перевода федерального цифро-буквенного УНСМ в цифровой формат.
Чтобы перевести целое положительное десятичное число в другую систему счисления (например, в 36-ричную), нужно это число разделить на основание (на 36). Полученное частное снова делить на основание до тех пор, пока частное не окажется меньше основания.
Полученные остатки, являющиеся цифрами числа в новой системе счисления, выражаем цифрами алфавита этой системы. В качестве результата преобразования необходимо записать в одну строку последнее частное и все остатки, начиная с последнего. Полученное значение будет являться результатом преобразования.
Перевод числа 24127965072 из 10-тичной системы счисления в 36-ричную будет выглядеть следующим образом:
Деление | Целое частное | Остаток |
24127965072 / 36 | 670221252 | 0 |
670221252 / 36 | 18617257 | 0 |
18617257 / 36 | 517146 | 1 |
517146 / 36 | 14365 | 6 |
14365 / 36 | 399 | 1 |
399 / 36 | 11 | 3 |
11 / 36 | 0 | 11 → b |
24127965072 по основанию 10 = b316100 по основанию 36
Схема проверки контрольной суммы на примере цифро-буквенного УНСМ
Для вычисления контрольной суммы номера (служебный разряд) требуется сложить суммы вычисления следующей функции для каждого символа номера с 1-го по 10-й.
Сначала для каждого символа номера, начиная с последнего, вычислить код этого символа по кодировке ASCII в соответствии с указанной ниже таблицей.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | R | U | a | b | c | d | e | f | g |
48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 82 | 85 | 97 | 98 | 99 | 100 | 101 | 102 | 103 |
h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z |
104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 |
Из кода каждого символа вычесть 48. Уникальная часть средства маркирования считается в нижнем регистре. Получившееся значение разницы для каждого нечётного символа умножаем на 2, и если получившееся произведение больше 9, то вычитаем из него 9.
Складываем получившиеся значения.
Сумму делим на основание (5 или 10). Если остаток от деления на основание равен нулю, то оставляем 0 и следующий шаг не осуществляется. Контрольная цифра равна 0.
Из основания вычитаем получившийся остаток.
Пример вычисления контрольной суммы номера RU1b3161006
Контрольная сумма в данном номере «6».
Коды символов этого номера в соответствии с таблицей (выделены жирным шрифтом):
R код 82,
U код 85,
1 код 49 и т.д.
R = 82 – 48 = 34
U = 85 – 48 = 37 *2 — 9 = 65
1 = 49 – 48 = 1
b = 98 – 48 = 50 * 2 – 9 = 91
3 = 51 – 48 = 3
1 = 49 – 48 = 1 * 2 = 2
6 = 54 – 48 = 6
1 = 49 – 48 = 1 * 2 = 2
0 = 48 – 48 = 0
0 = 48 – 48 = 0 * 2 = 0
34 + 65+ 1 + 91 +3 +2 +6 +2 + 0 + 0 = 204
204 mod основание (10) = 4
основание (10) – 4 = 6