Алгоритм расчёта контрольного разряда в кодах GS1-13, GS1-8, ITF-14
Практически во всех системах нумерации системы GS1 (GS1-13, GS1-14 (ITF-14), GS1-8, UPC) используется понятие контрольного числа, а, точнее, контрольной цифры. Роль контрольной цифры огромна — она позволяет безошибочно определять, правильно ли считан штриховой код в супермаркете, банке или в любой другой системе, использующей штриховое кодирование. Алгоритм определения контрольного числа некоторого набора цифр для системы GS1 носит название «Модуло 10».
Он состоит из следующих шагов:
- Цифры набора нумеруются справа налево.
- Подсчитываются суммы цифр, стоящих на четных и нечетных местах.
- Сумма цифр, стоящих на четных местах, суммируется с утроенной суммой цифр, стоящих на нечетных местах.
- Если цифра единиц полученного результата равна нулю, то контрольная цифра — 0. Если последняя цифра результата не нуль, то контрольная цифра равна дополнению этой цифры до 10.
Пример:
Пусть имеется набор цифр в системе EAN-13 — 345678905675 C.
- Цифры, стоящие на нечетных местах: 5,6,0,8,6,4. Сумма этих цифр равна 29.
- Цифры, стоящие на четных местах:7,5,9,7,5,3 . Сумма этих цифр равна 36.
- Результат 3-го шага: 29*3+36=123.
- Искомая контрольная цифра C=7, т.к. 7+3 = 10.
Калькулятор контрольной цифры
19 июня 2019г.
Пример вычисления контрольной цифры для определения подлинности товара:
1. Сложить цифры, стоящие на четных местах: 8+0+2+7+0+1=18
2. Полученную сумму умножить на 3:
18×3=54
3. Сложить цифры, стоящие на нечетных местах, без контрольной цифры:
4+2+0+4+0+0=10
4. Сложить числа, указанные в пунктах 2 и 3:
54+10=64
5. Отбросить десятки:
получим 4
6. Из 10 вычесть полученное в пункте 5:
10-4=6
Если полученная после расчета цифра не совпадает с контрольной цифрой в штрих-коде, это значит, что товар произведен незаконно.
Контрольная цифра ean 13 — завершающий символ 13-разрядного номера штрихкода, служит для правильности проверки считывания кода сканером, а также для определения подлинности или контрафактного происхождения товара.
Сегодня, пожалуй, не найти покупателя, не знакомого с изображение штрихкода. Некоторые даже знают, что в нем содержатся сведения о товаре и предприятии-производителе, хотя абсолютному большинству штрихкод ни о чем не говорит. В принципе, это закономерно, поскольку штрихкод создавался не для удобства покупателей, а для облегчения работы торговых и логистических организаций.
Но, даже беглая расшифровка цифр позволяет выяснить, имеет ли товар официальную регистрацию, страну производства и получить сведения о предприятии, указанном в качестве производителя.
Штрих код — графическое изображение уникального номера товара. Выглядит как последовательность различных по толщине черно-белых штрихов и пробелов и расположенного под ними ряда цифр. Код наносится на этикетку или упаковку товара, реже — на поверхность самого изделия.
Зашифрованные в штрихкоде сведения извлекаются из него посредством электронных сканеров — считывателей штрихкода. Их можно увидеть практически в любом магазине. В России распространена 13-разрядная европейская система кодировки EAN-13, и ее сокращенный вариант EAN-8, применяемый для розничных товаров в мелкой упаковке; EAN-8 не содержит информацию о производителе товара.
Создание цифр в штрихкод ean 13
Штрихкод EAN-13 состоит из нескольких блоков цифр:
- 2-3 цифры — код Национальной Ассоциации товарной нумерации, присвоившей штрихкод продукции;
- 4-5 цифр — код, присвоенный предприятию национальным регистратором;
- 5 цифр — код товара, где 1 цифра — наименование товара; 2-я цифра — потребительские свойства; 3-я цифра — масса, размер; 4-я цифра — состав; 5-я цифра — цвет;
- Контрольная цифра, рассчитывается путем последовательности математических действий по алгоритму EAN.
Проверка контрольной цифры ean 13
Для проверки контрольной цифры EAN-13 понадобятся цифры кода с 1-й по 12-ю.
Действуем по следующему алгоритму:
- Суммировать цифры на четных позициях;
- Результат пункта 1 умножить на 3;
- Суммировать цифры на нечетных позициях;
- Суммировать результаты пунктов 2 и 3;
- Контрольное число — разница между окончательной суммой и ближайшим к ней наибольшим числом, кратным 10-ти.
Пример расчета контрольной цифры ean-13
46 79135 74987 (?)
- 6+9+3+7+9+7 = 41
- 41х3=123;
- 4+7+1+5+4+8 = 29;
- 123+29 = 152
- 160-152 = 8
Искомая контрольная цифра — 8; полный номер EAN-кода — 46 79135 74987 8.
Для расчета контрольной цифры EAN-13 достаточно воспользоваться приведенным алгоритмом, а затем сравнить получившийся результат и контрольную цифру. Цифры должны совпасть, в противном случае, возможно, была допущена ошибка при вводе цифр или в математических вычислениях. Если же цифры введены в верно, и вероятность ошибки в расчетах исключена, скорее всего, вы столкнулись с контрафактной (поддельной) продукцией.
Штрихкоды задаются последовательностью цифр, а для средств автоматического
считывания представляются также в виже штриховой последовательности.
Последовательность штрихов лишь кодирует последовательность цифр, и баркод может
быть введен вручную по представленным (если присутствуют) цифрам. Последняя
цифра в написании штрихкода является контрольной цифрой и служит для
подтверждения правильности считывания или ручного ввода за счет введения
избыточности. Также контрольную цифру называют цифрой в контрольном разряде
(разряд – это место для цифры). Значимыми цифрами в штрихкоде являются все кроме
нее. Для вычисления контрольной цифры введите значимые цифры штрихкода без
контрольной цифры.
Ссылки по теме:
Руководство по штриховому
кодированию
Онлайн калькуляторы
Контрольное число, контрольная цифра — разновидность контрольной суммы, добавляется обычно в конец длинных номеров с целью первичной проверки их правильности. Применяется с целью уменьшения вероятности ошибки при обработке таких номеров: машинном считывании с упаковки товара, записи в документы, голосовой передаче от человека к человеку и т. п.
Наличие и правильность контрольного числа не гарантирует достоверность рассматриваемого номера (в том числе не спасает от действий злоумышленников), но на практике достаточно хорошо оберегает от случайных ошибок.
Контрольное число чаще всего это либо последняя цифра суммы всех чисел номера, либо результат другой математической операции над цифрами. В компьютерных программах понятие «контрольного числа» обобщено до CRC, бита чётности и Кодов Рида-Соломона; а в некоторых архиваторах объём контрольных данных таков, что позволяет не только обнаружить ошибку, но и исправить её (обнаружение и исправление ошибок).
Контрольные числа, применяемые в документах, обычно позволяют восстановить одну потерянную цифру при условиях, что известно, на какой позиции в номере она должна находиться и что остальные цифры в номере правильные. Если неизвестно, на какой позиции есть ошибка, нужно перебрать все возможные варианты (например, для 13-значного номера их будет 13), а из них выбрать наиболее правдоподобные (исходя из анализа содержательной информации в номере). Простое исправление контрольной цифры может привести только к большей ошибке, не связанной с математикой.
Достоинства и недостатки[править | править код]
Описание ошибки | Алгоритм Верхуффа |
Алгоритм Луна |
Алгоритм SHA1 (равномерный) |
ИНН остаток от деления на 11 |
ОКПО двойной остаток от деления на 11 |
EAN13 |
---|---|---|---|---|---|---|
Одиночные ошибки (6 вместо 7) | 100 % | 100 % | 94,5 % | 98,1 % | 100 % | 100 % |
Перестановки соседних цифр (67 вместо 76) | 100 % | 97,7 % | 94,5 % | 98,1 % | 100 % | 88,8 % |
Двойные ошибки (66 вместо 77) | 95,5 % | 93,3 % | 94,5 % | 98,1 % | 81,8 % | 88,8 % |
Перестановки четныхнечетных позиций цифр (637 вместо 736) | 94,2 % | 0 % | 94,5 % | 98,1 % | 100 % | 0 % |
Перестановки любых позиций цифр (6327 вместо 7326) | 94,9 % | 58,6 % | 94,5 % | 98,1 % | 100 % | 53,3 % |
Двойные ошибки в несоседних цифрах (636 вместо 737) | 94,2 % | 100 % | 94,5 % | 98,1 % | 100 % | 88,8 % |
Вставка любой цифры — (67 вместо 6) | 90 % | 94 % | 94,5 % | 90,6 % | 93,0 % | 91,4 % |
Дублирование любой цифры (66 вместо 6) | 90 % | 93,8 % | 94,5 % | 89,2 % | 93,5 % | 90 % |
К недостаткам алгоритма традиционно относили его высокую, по сравнению с другими алгоритмами, сложность. Достаточно сложно произвести все вычисления вручную, особенно для длинных последовательностей. Однако при машинной проверке сложность вычислений не играет решающей роли, что позволяет использовать алгоритм Верхуффа при проверке введённых значений в различных устройствах.
Примеры использования контрольных чисел в документах[править | править код]
В примерах обычно вычисляется некоторая функция (контрольная сумма) от цифр номера. Если она равна 0, то номер признаётся правильным. В некоторых случаях удобнее вычислять контрольное число и сверять его с имеющимся. Формально контрольной суммой можно считать разность между имеющимся и вычисленным контрольными числами.
Цифры номера нумеруются справа налево:
…n3n2n1, так же, как и соответствующие им коэффициенты …k3k2k1.
Обычно содержательная информация (код страны, товара, банка и т. п.) находится в левой части номера, а контрольное число (цифра) является завершающей (самой правой) и имеет номер 1 (n1), однако с математической точки зрения все цифры кода, как правило, равноправны, и любая из них может считаться контрольной для остальных. Значение содержательной части номера можно посмотреть в описании соответствующего кода.
Номера на товарах: штрих-код разных типов[править | править код]
Контрольные суммы штрих-кодов вычисляются по сходному алгоритму. Кроме того, тот же алгоритм (таблица обрезается или продолжается влево по очевидному правилу), используется во многих других случаях, например, для номеров товаров в магазинах.
k13 | k12 | k11 | k10 | k9 | k8 | k7 | k6 | k5 | k4 | k3 | k2 | k1 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
EAN-13 | 1 | 3 | 1 | 3 | 1 | 3 | 1 | 3 | 1 | 3 | 1 | 3 | 1 |
UPC-12 | |||||||||||||
EAN-8 |
Контрольная сумма есть остаток от деления на 10 суммы из цифр номера, умноженных на соответствующие коэффициенты из таблицы. Если контрольная сумма есть 0, то номер признаётся правильным.
Если нужно подсчитать требуемое контрольное число для произвольного номера, нужно вначале поставить «0» на крайнюю правую позицию, посчитать контрольную сумму, а затем, если она не равна нулю, заменить этот «0» на «10 — контрольная сумма».
Конкретные примеры:
4×1+ 6×3+ 0×1+ 0×3+ 0×1+ 5×3+ 1×1+ 0×3+ 0×1+ 0×3+ 0×1+ 5×3+ 7×1=
4+ 18+ 0+ 0+ 0+ 15+ 1+ 0+ 0+ 0+ 0+ 15+ 7= 60.
Контрольная сумма = 0 — номер правильный.
4×3+ 6×1+ 0×3+ 0×1+ 9×3+ 3×1+ 3×3+ 3×1=
12+ 6+ 0+ 0+ 27+ 3+ 9+ 3= 60.
Контрольная сумма = 0 — номер правильный.
0×3+ 4×1+ 1×3+ 6×1+ 8×3+ 9×1+ 3×3+ 0×1+ 0×3+ 4×1+ 9×3+ 4×1=
0+ 4+ 3+ 6+ 24+ 9+ 9+ 0+ 0+ 4+ 27+ 4= 90.
Контрольная сумма = 0 — номер правильный.
Для 4601546021290:
4×1+ 6×3+ 0×1+ 1×3+ 5×1+ 4×3+ 6×1+ 0×3+ 2×1+ 1×3+ 2×1+ 9×3+ 0×1=
4+ 18+ 0+ 3+ 5+ 12+ 6+ 0+ 2+ 3+ 2+ 27+ 0= 82.
Контрольное число — наименьшее число, которое необходимо прибавить к вычисленному значению, чтобы получилось кратное 10 число. В нашем случае, ближайшее к «82» кратное «10» число — это «90». К «82» необходимо прибавить «8» для получения «90». Следовательно, контрольное число — «8» по определению, а искомый номер: 4601546021298.
Номера банковских счетов[править | править код]
Для расчёта контрольного разряда банковского счёта (девятая цифра в номере счета) используется следующий алгоритм: к номеру расчётного счёта в начало добавляют 3 разряда, соответствующие трём последним цифрам БИКа банка. Получаем число из 23 разрядов, в котором на 12 месте находится контрольный разряд. Если мы собираемся проверить или рассчитать контрольную цифру корреспондентского счета, то для первых трех разрядов берем ноль (‘0’) и две цифры условного номера РКЦ, которым соответствует пятая и шестая цифра БИКа банка.
Пример расчета контрольной цифры расчетного счёта:
БИК 044544512
В исходном состоянии известны все цифры, кроме контрольного разряда, он заменяется нулём. Для расчетов используется специальный массив весовых коэффициентов: 7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1, 3, 7, 1.
Вычисляют сумму произведений цифры позиции на вес позиции.
Последняя цифра этой суммы, умноженная на 3, и составит контрольную цифру.
Здесь взвешенная сумма равна 135 = (5×7 + 1×1 + 2×3) + (4×7 + 0×1 + 7×3 + 0×7 + 2×1 + 8×3 + 1×7 + 0×1 + 0×3 + 0×7 + 0×1 + 0×3 + 0×7 + 0×1 + 0×3 + 0×7 + 0×1 + 0×3 + 1×7 + 4×1). Последняя цифра равна 5, умножаем её на 3 и получаем 15. Из этого числа берём последнюю цифру, она и является контрольной. В нашем случае это цифра 5.
Проверка правильности некоторого расчётого счета производится по тому же алгоритму. О правильности некоторого номера банковского счета говорит равенство нулю последнего разряда взвешенной суммы. Таким образом, для заданного примера взвешенная сумма составляет 150 = (5×7 + 1×1 + 2×3) + (4×7 + 0×1 + 7×3 + 0×7 + 2×1 + 8×3 + 1×7 + 0×1 + 5×3 + 0×7 + 0×1 + 0×3 + 0×7 + 0×1 + 0×3 + 0×7 + 0×1 + 0×3 + 1×7 + 4×1). Ноль на конце говорит о правильности.
Номера банковских карт[править | править код]
Номера банковских карт Мир всегда начинаются на цифру 2, American Express, Diners Club и JCB начинаются на цифру 3, VISA начинается на 4, MasterCard на 5 и Maestro на 6.
Алгоритм тот же, что и для «Международного идентификационного кода ценной бумаги».
Международный идентификационный код ценной бумаги (ISIN)[править | править код]
Контрольные суммы вычисляются по алгоритму Луна. Правило продолжения таблицы влево (для длинных номеров) и усечения её для коротких номеров очевидно.
В случае наличия в Международном идентификационном коде ценной бумаги английских букв, каждая из них заменяется на 2 цифры, представляющие собой порядковый номер буквы в латинском алфавите, увеличенный на 9 (то есть A ~ 10, B ~ 11, …, Z ~ 35). Так, буквы RU заменяются на 2730.
k16 | k15 | k14 | k13 | k12 | k11 | k10 | k9 | k8 | k7 | k6 | k5 | k4 | k3 | k2 | k1 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
банковские карты, 16 цифр | 2 | 1 | 2 | 1 | 2 | 1 | 2 | 1 | 2 | 1 | 2 | 1 | 2 | 1 | 2 | 1 |
ценные бумаги | ||||||||||||||||
банковские карты, 13 цифр |
Контрольная сумма: цифры кода умножаются на коэффициенты из таблицы, если результат умножения превосходит 9, то вычитаем из него 9, получившиеся числа складываем. В этой сумме берём последнюю цифру, остальные отбрасываем (то есть остаток от деления на 10). Если контрольная сумма есть 0, то номер признаётся правильным. Восстановление «контрольного числа» аналогично способу для штрих-кода.
Конкретные примеры:
Произведения: 4×1, 0×2, 0×1, 0×2, 0×1, 0×2,
0×1, 0×2, 0×1, 0×2, 0×1, 0×2, 6×1;
После вычитания 9: 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6;
Их сумма: 10;
Контрольная сумма = 0 — номер правильный.
Произведения: 5×2, 6×1, 1×2, 0×1, 0×2, 0×1, 0×2, 0×1, 0×2,
0×1, 0×2, 0×1, 0×2, 0×1, 0×2, 1×1;
После вычитания 9: 1, 6, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1;
Их сумма: 10;
Контрольная сумма = 0 — номер правильный.
Буквы RU заменяем на 2730 и получаем 14-значный номер 27300007661625, который и будем проверять.
Произведения: 2×2, 7×1, 3×2, 0×1,
0×2, 0×1, 0×2, 7×1, 6×2, 6×1, 1×2, 6×1, 2×2, 5×1;
После вычитания 9: 4, 7, 6, 0, 0, 0, 0, 7, 3, 6, 2, 6, 4, 5;
Их сумма: 50;
Контрольная сумма = 0 — номер правильный.
Буквы DE заменяем на 1314 и получаем 14-значный номер 13140001136927.
Произведения: 1×2, 3×1, 1×2, 4×1,
0×2, 0×1, 0×2, 1×1, 1×2, 3×1, 6×2, 9×1, 2×2, 7×1;
После вычитания 9: 2, 3, 2, 4, 0, 0, 0, 1, 2, 3, 3, 9(!), 4, 7;
Их сумма: 40;
Контрольная сумма = 0 — номер правильный.
Страховой номер индивидуального лицевого счёта (Россия)[править | править код]
Страховой номер индивидуального лицевого счёта страхового свидетельства обязательного пенсионного страхования (он же СНИЛС) проверяется на корректность контрольным числом.
СНИЛС имеет вид: «XXX-XXX-XXX YY», где XXX-XXX-XXX — собственно номер, а YY — контрольное число.
Алгоритм формирования контрольного числа СНИЛС таков:
- Проверка контрольного числа Страхового номера проводится только для номеров больше номера 001-001-998
- Контрольное число СНИЛС рассчитывается следующим образом:
-
- Каждая цифра СНИЛС умножается на номер своей позиции (позиции отсчитываются с конца, то есть, справа)
- Полученные произведения суммируются
- Получить остаток от деления на 101
- Если получилось 100, контрольное число равно 0
Например: указан СНИЛС 112-233-445 95. Проверяем правильность контрольного числа:
- цифры номера 1 1 2 2 3 3 4 4 5
- номер позиции 9 8 7 6 5 4 3 2 1
Сумма = 1×9 + 1×8 + 2×7 + 2×6 + 3×5 + 3×4 + 4×3 + 4×2 + 5×1 = 95. Сумма равна YY (контрольное число). Контрольное число 95 — указано верно.
Данный алгоритм не способен обнаружить все случаи ошибок в одной цифре (например, номера 087-654-303 00 и 087-654-302 00 различаются одной цифрой, но оба будут признаны верными). Также не во всех случаях может быть обнаружена ошибка перестановки двух соседних цифр (например, 087-654-303 00 и 086-754-303 00). Причина — пункт 2.4, где для близких чисел 100 и 101 установлено одинаковое контрольное число 00.
Если бы вместо последних двух подпунктов проверки применялся алгоритм «Если сумма равна или больше 100, то контрольное число равно двум последним цифрам этой суммы (остатку от деления суммы на 100)», то он был бы способен обнаружить все случаи ошибок в одной цифре и все случаи ошибочной перестановки двух соседних цифр.
Номера ИНН[править | править код]
Бывают 10-значные — для юридических лиц, одна контрольная цифра в конце; и 12-значные — для физических лиц и ИП, две контрольные цифры: предпоследняя (n1) и последняя (n2) цифра в ИНН.
k1 | k2 | k3 | k4 | k5 | k6 | k7 | k8 | k9 | k10 | k11 | k12 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
вычисление контрольного числа n1
для 12-значного ИНН |
7 | 2 | 4 | 10 | 3 | 5 | 9 | 4 | 6 | 8 | ||
вычисление контрольного числа n2
для 12-значного ИНН |
3 | 7 | 2 | 4 | 10 | 3 | 5 | 9 | 4 | 6 | 8 | |
вычисление контрольного числа n1
для 10-значного ИНН |
Проверку номера ИНН удобнее проводить, вычисляя контрольные числа:
- 1 (только для 12-значного ИНН). Контрольное число n2 есть остаток от деления на 11 суммы из цифр номера, умноженных на соответствующие коэффициенты из таблицы (из строки «вычисление контрольного числа n2»). Если остаток равен 10, то n2 = 0.
- Контрольное число n1 есть остаток от деления на 11 суммы из цифр номера, умноженных на соответствующие коэффициенты из таблицы (из строки «вычисление контрольного числа n1»). Если остаток равен 10, то n1 = 0.
Примеры:
- 5*7+ 0*2+ 0*4+ 1*10+ 0*3+ 0*5+ 7*9+ 3*4+ 2*6+ 2*8= 148
148= 11*13 + 5(остаток); Остаток совпадает с предпоследней цифрой ИНН, это одна контрольная цифра
- 5*3+ 0*7+ 0*2+ 1*4+ 0*10+ 0*3+ 7*5+ 3*9+ 2*4+ 2*6+ 5*8= 141
141= 11*12 +9 (остаток); Остаток совпадает с последней цифрой ИНН, это другая контрольная цифра.
Оба контрольных числа совпадают, номер правильный.
Шаг 2:
7*2+ 8*4+ 3*10+ 0*3+ 0*5+ 0*9+ 2*4+ 2*6+ 9*8= 168
168 ÷ 11 = 15,27
168 = 11 x 15 + 3(остаток)
Контрольное число совпадает, номер правильный.
Номер ОКПО[править | править код]
Методика расчёта контрольного числа для кода ОКПО (едина для всех кодов статистики).
Контрольное число рассчитывается следующим образом:
- Контрольной цифрой кода является последняя цифра — восьмая в восьмизначном коде и десятая в десятизначном.
- Разрядам кода в общероссийском классификаторе, начиная со старшего разряда, присваивается набор весов, соответствующий натуральному ряду чисел от 1 до 10. Если разрядность кода больше 10, то набор весов повторяется.
- Каждая цифра кода, кроме последней, умножается на вес разряда и вычисляется сумма полученных произведений.
- Контрольное число для кода представляет собой остаток от деления полученной суммы на модуль «11».
- Контрольное число должно иметь один разряд, значение которого находится в пределах от 0 до 9.
Если получается остаток, равный 10, то для обеспечения одноразрядного контрольного числа необходимо провести повторный расчет, применяя вторую последовательность весов, сдвинутую на два разряда влево (3, 4, 5,…).
ВАЖНО: Если рассчитывается контрольный символ для десятизначного ОКПО, то последовательность весов будет заканчиваться на 1 (!!), то есть не (3,4,5,6,7,8,9,10,11), а (3,4,5,6,7,8,9,10,1).
Если в случае повторного расчета остаток от деления вновь сохраняется равным 10, то значение контрольного числа проставляется равным «0».
Пример проверки контрольного числа для кода 47296611:
Код 4 7 2 9 6 6 1 1
Вес разрядов 1 2 3 4 5 6 7
Сумма произведений, полученных путём умножения каждой цифры кода на вес разряда, равна:
4 х 1 + 7 х 2 + 2 х 3 + 9 х 4 + 6 х 5 + 6 х 6 + 1 х 7 = 133.
133 = 11 * 12 + 1;
Остаток от деления полученной суммы на 11 равен 1. Контрольная цифра кода — 1 (последняя цифра). Контрольное число (остаток от деления) = 1 — совпадает с контрольной цифрой = 1, номер правильный.
Важно отметить, что в случае с ОКПО номер для ЮЛ должен состоять из 8 цифр, а для ИП из 10. Поэтому перед проверкой номера не забывайте добавлять лидирующие нули. Например, ОКПО ИП — 148543122, а для проверки номера нужно передавать 0148543122.
Номер ОКАТО[править | править код]
Номер ОКАТО может быть кодом раздела «Объекты административно-территориального деления, кроме сельских населенных пунктов», который содержит от 2 до 8 цифр, или кодом раздела «Сельские населенные пункты» (11 цифр)[1]. Контрольное число (одна цифра) может быть добавлена к коду, образуя «блок идентификации», в котором на одну цифру больше (9 цифр для 8-цифрового кода).
Расчет контрольного числа[править | править код]
В коде ОКАТО расчёт контрольного числа подчиняется общему стандарту[2].
- Каждому разряду кода общероссийского классификатора, начиная со старшего разряда, присваивается вес, соответствующий натуральному ряду чисел от 1 до 10. Если разрядность кода больше 10, то набор весов повторяется.
- Каждая цифра кода умножается на вес разряда и вычисляется сумма полученных произведений.
- Контрольное число для каждого кода представляет собой остаток от деления полученной суммы на число 11.
- Контрольное число должно иметь один разряд, значение которого находится в пределах от 0 до 9.
- Для проверки контрольного числа кода ОКАТО, код ОКАТО должен содержать 3, 6 или 9 символов, то есть включать в себя контрольное число. Для расчета контрольного числа кода ОКАТО код должен состоять из 2, 5 или 8 символов.
Если получается остаток, равный 10, то для обеспечения одноразрядного контрольного числа необходимо провести повторный расчет, применяя вторую последовательность весов, сдвинутую на два разряда влево (то есть начинающуюся так: 3, 4, 5, …).
Если в случае повторного расчета остаток от деления вновь сохраняется равным 10, то значение контрольного числа принимается равным 0.
Пример расчёта контрольного числа[править | править код]
Код: 5 6 3 9 2 1
Вес разрядов: 1 2 3 4 5 6
Сумма произведений, полученная путём умножения каждой цифры кода на вес разряда, равна 5·1 + 6·2 + 3·3 + 9·4 + 2·5 + 1·6 = 78.
Остаток от деления полученной суммы на 11 равен 1: 78 = 11 * 7 + 1.
Контрольное число для данного кода равно 1.
10-значный ISBN[править | править код]
ISBN[3] имеет 10 цифр, ISSN — 8 цифр. Последняя — контрольная. В том случае, если вместо последней цифры стоит буква «X», при вычислении контрольной суммы она заменяется на число 10.
k10 | k9 | k8 | k7 | k6 | k5 | k4 | k3 | k2 | k1 | |
---|---|---|---|---|---|---|---|---|---|---|
ISBN, 10 цифр |
10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
ISSN, 8 цифр |
Контрольная сумма есть разность между числом 11 и остатком от деления на 11 суммы из цифр номера, умноженных на соответствующие коэффициенты из таблицы.
Восстановление «контрольного числа» аналогично способу для штрих-кода, однако вместо «0» нужно подставлять цифру «11 — контрольная сумма». Если контрольная сумма равна 1, то подставляем «цифру» 10, то есть букву «X».
При нанесении ISBN на книгу в виде штрих-кода собственная контрольная цифра удаляется,
слева приписывается префикс 978 (или 979, этот префикс пока не используется). При нанесении ISSN на журнал в виде штрих-кода собственная контрольная цифра удаляется,
слева приписывается префикс 977, а справа — 2 цифры, несущие некую дополнительную информацию, не содержащуюся непосредственно в ISSN (обычно 00 для платных изданий). Далее в обоих случаях справа приписывается контрольная цифра,
вычисленная по 13-значному алгоритму для штрих-кода.
Конкретные примеры:
5×10+ 9×9+ 3×8+ 2×7+ 8×6+ 6×5+ 0×4+ 0×3+ 5×2+ 7×1=
50+ 81+ 24+ 14+ 48+ 30+ 0+ 0+ 10+ 7= 264= 24* 11+ 0(остаток).
Контрольная сумма (остаток) = 0 — номер правильный.
0×10+ 4×9+ 4×8+ 6×7+ 5×6+ 2×5+ 0×4+ 8×3+ 7×2+ 10×1=
0+ 36+ 32+ 42+ 30+ 10+ 0+ 24+ 14+ 10= 198= 18* 11+ 0(остаток).
Контрольная сумма (остаток) = 0 — номер правильный.
0×8+ 0×7+ 3×6+ 3×5+ 7×4+ 6×3+ 5×2+ 10×1=
0+ 0+ 18+ 15+ 28+ 18+ 10+ 10= 99= 9* 11+ 0(остаток).
Контрольная сумма (остаток) = 0 — номер правильный.
Номера ОГРН и ОГРНИП[править | править код]
Состоят из 13 (или 15) цифр, из них последняя — n1 — контрольная.
Контрольная цифра равна остатку от деления на 11 (или на 13) числа, состоящего из первых 12 (или 14) цифр. Если остаток больше 9, то n1 = последней цифре остатка.
Примеры:
1037739010891 — 13 цифр, ОГРН.
Вычисляем остаток: −1+0-3+7-7+3-9+0-1+0-8+9 = −10(Признак Паскаля)
−10 + 11 = 1(остаток)
Контрольное число = 1 — совпадает, номер правильный.
1035006110083 — 13 цифр, ОГРН.
Вычисляем остаток: 103500611008 = 11 • 9409146455 + 3(остаток)
Контрольное число = 3 — совпадает, номер правильный.
1037739010891 — 13 цифр, ОГРН.
Вычисляем остаток: 103773901089 = 11 • 9433991008 + 1(остаток)
Контрольное число = 1 — совпадает, номер правильный.
304500116000157 — 15 цифр, ОГРНИП.
Вычисляем остаток: 30450011600015 = 13 • 2342308584616 + 7(остаток)
Контрольное число = 7 — совпадает, номер правильный.
304463210700212 — 15 цифр, ОГРНИП.
Вычисляем остаток: 30446321070021 = 13 • 2342024697693 + 12(остаток)
Контрольное число = 2 — совпадает с последней цифрой остатка, номер правильный.
Идентификационный номер транспортного средства (VIN)[править | править код]
Стандарт ISO 3779-1983, оговаривающий структуру VIN транспортного средства, рекомендует в 9-й позиции VIN размещать контрольную сумму — число, вычисленное по определенному стандартом алгоритму, чье значение зависит от значений всех остальных знаков в VIN.
В случае использования в 9-й позиции контрольной суммы там допустимы следующие значения: числа 0…9 или X. Если в 9-й позиции находится любой другой знак, то такой VIN не пройдет проверку. Если это VIN автомобиля, предназначенного для североамериканского рынка, то он или переписан с автомобиля с ошибками или перебит.
Пример расчета контрольной суммы:
- Берем VIN, например JHMCM56557C404453, и заполняем табличку ниже:
Позиция VIN | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | CHK | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
VIN | J | H | M | C | M | 5 | 6 | 5 | 5 | 7 | С | 4 | 0 | 4 | 4 | 5 | 3 |
- Подменяем буквы на цифры в соответствии с таблицей:
Буква | A | B | C | D | E | F | G | H | J | K | L | M | N | P | R | S | T | U | V | W | X | Y | Z |
Цифровой эквивалент | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 1 | 2 | 3 | 4 | 5 | 7 | 9 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
- Заполняем таблицу ниже, где для каждого знака VIN указан его «вес»:
Позиция VIN | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
Вес | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 10 | CHK | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
Цифровой эквивалент | 1 | 8 | 4 | 3 | 4 | 5 | 6 | 5 | CHK | 7 | 3 | 4 | 0 | 4 | 4 | 5 | 3 |
- Складываем произведения каждого знака VIN на его «вес»:
1*8 + 8*7 + 4*6 + 3*5 + 4*4 + 5*3 + 6*2 + 5*10 + 7*9 + 3*8 + 4*7 + 0*6 + 4*5 + 4*4 + 5*3 + 3*2 = 368
- Вычисляем ближайшее наименьшее целое число, кратное 11:
368/11 = 33.5
33 * 11 = 363
- Разницу между результатом в п. 5 и ближайшим наименьшим числом, кратным 11 записывается в девятый знак VIN:
CHK = 368—363 = 5
Если CHK = 10, то в 9-й позиции VIN записывается «X» (римская 10).
Примечания[править | править код]
- ↑ Общероссийский классификатор Объектов административно-территориального деления. ОК 019 95. Дата обращения: 16 июня 2011. Архивировано из оригинала 8 ноября 2011 года.
- ↑ ПР 50.1.024-2005 — Основные положения и порядок проведения работ по разработке, ведению и применению общероссийских классификаторов Архивная копия от 1 апреля 2016 на Wayback Machine.
- ↑ С 01.01.2007 года все издатели РФ получают в Российском национальном агентстве только 13-значные ISBN. Контрольная цифра 13-значного ISBN вычисляется по тому же алгоритму, что и контрольная цифра штрих-кода EAN-13.
См. также[править | править код]
- Бит чётности — простейший случай контрольной суммы.
- Алгоритм Верхуффа — еще один интересный алгоритм вычисления контрольной цифры.
- Алгоритм Луна — алгоритм вычисления контрольной цифры в соответствии со стандартом ISO/IEC 7812.
Ссылки[править | править код]
- Проверка контрольной суммы в VIN
- Библиотека Apache Commons Validator содержит реализацию генерации и проверки всех проверочных кодов