Контрольное число, контрольная цифра — разновидность контрольной суммы, добавляется обычно в конец длинных номеров с целью первичной проверки их правильности. Применяется с целью уменьшения вероятности ошибки при обработке таких номеров: машинном считывании с упаковки товара, записи в документы, голосовой передаче от человека к человеку и т. п.
Наличие и правильность контрольного числа не гарантирует достоверность рассматриваемого номера (в том числе не спасает от действий злоумышленников), но на практике достаточно хорошо оберегает от случайных ошибок.
Контрольное число чаще всего это либо последняя цифра суммы всех чисел номера, либо результат другой математической операции над цифрами. В компьютерных программах понятие «контрольного числа» обобщено до CRC, бита чётности и Кодов Рида-Соломона; а в некоторых архиваторах объём контрольных данных таков, что позволяет не только обнаружить ошибку, но и исправить её (обнаружение и исправление ошибок).
Контрольные числа, применяемые в документах, обычно позволяют восстановить одну потерянную цифру при условиях, что известно, на какой позиции в номере она должна находиться и что остальные цифры в номере правильные. Если неизвестно, на какой позиции есть ошибка, нужно перебрать все возможные варианты (например, для 13-значного номера их будет 13), а из них выбрать наиболее правдоподобные (исходя из анализа содержательной информации в номере). Простое исправление контрольной цифры может привести только к большей ошибке, не связанной с математикой.
Достоинства и недостатки Описание ошибкиАлгоритмВерхуффаАлгоритмЛунаАлгоритм SHA1(равномерный)ИННостаток от деления на 11ОКПОдвойной остаток от деления на 11EAN13Одиночные ошибки (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), однако с математической точки зрения все цифры кода, как правило, равноправны, и любая из них может считаться контрольной для остальных. Значение содержательной части номера можно посмотреть в описании соответствующего кода.
Номера на товарах: штрих-код разных типов Контрольные суммы штрих-кодов вычисляются по сходному алгоритму. Кроме того, тот же алгоритм (таблица обрезается или продолжается влево по очевидному правилу), используется во многих других случаях, например, для номеров товаров в магазинах.
k13k12k11k10k9 k8 k7 k6 k5 k4 k3 k2 k1 EAN-131313131313131UPC-12EAN-8
Контрольная сумма есть остаток от деления на 10 суммы из цифр номера, умноженных на соответствующие коэффициенты из таблицы. Если контрольная сумма есть 0, то номер признаётся правильным.
Если нужно подсчитать требуемое контрольное число для произвольного номера, нужно вначале поставить «0» на крайнюю правую позицию, посчитать контрольную сумму, а затем, если она не равна нулю, заменить этот «0» на «10 — контрольная сумма».
Конкретные примеры:
4600051000057 (сигареты «Прима») — код EAN-13.
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 — номер правильный.
46009333 (папиросы «Беломорканал») — код EAN-8.
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 — номер правильный.
041689300494 (бензин для зажигалки «Zippo») — код UPC-12.
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 — номер правильный.
Восстановление контрольного числа. Дан номер 460154602129?, EAN-13 с потерянной контрольной цифрой «?».
Для 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') и две цифры условного номера РКЦ, которым соответствует пятая и шестая цифра БИКа банка.
Пример расчёта контрольной цифры расчётного счёта:
р/с 40702810?00000000014БИК 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.
<TR> <TH> <TH>k16<TH>k15<TH>k14 <TH>k13<TH>k12<TH>k11 <TH>k10<TH>k9 <TH>k8 <TH>k7 <TH>k6 <TH>k5 <TH>k4 <TH>k3 <TH>k2 <TH>k1 <TR align="CENTER"> <TH>банковские карты, 16 цифр <TD>2<TD>1<TD rowspan="2">2 <TD rowspan="3">1<TD rowspan="3">2<TD rowspan="3">1<TD rowspan="3">2 <TD rowspan="3">1<TD rowspan="3">2<TD rowspan="3">1<TD rowspan="3">2 <TD rowspan="3">1<TD rowspan="3">2<TD rowspan="3">1<TD rowspan="3">2 <TD rowspan="3">1 <TR align="CENTER"> <TH>ценные бумаги <TD> <TD> <TR align="CENTER"> <TH>банковские карты, 13 цифр <TD> <TD> <TD>
Контрольная сумма: цифры кода умножаются на коэффициенты из таблицы, если результат умножения превосходит 9, то вычитаем из него 9, получившиеся числа складываем. В этой сумме берём последнюю цифру, остальные отбрасываем (то есть остаток от деления на 10). Если контрольная сумма есть 0, то номер признаётся правильным. Восстановление «контрольного числа» аналогично способу для штрих-кода.
Конкретные примеры:
4000-0000-0000-6 — 13-значная банковская карта Visa.
Произведения: 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 — номер правильный.
5610-0000-0000-0001 — 16-значная банковская карта Australian Bankcard.
Произведения: 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 — номер правильный.
RU0007661625 — ISIN акции Газпрома номиналом 5 руб.
Буквы 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 — номер правильный.
DE0001136927 — пример ISIN с сайта Банка Эстонии.
Буквы 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 — указано верно.