Контрольная цифра
Контрольная цифра — последний разряд числового идентификатора, вычисляемый из предыдущих разрядов по фиксированной формуле. Служит для проверки правильности ввода и считывания: если пересчёт не совпал с записанной цифрой, номер отвергается.
Как считается контрольная цифра EAN-13
Тринадцатый, последний разряд штрихового кода EAN-13 не хранит информации о товаре — он вычисляется из двенадцати предыдущих. Алгоритм задан стандартом GS1 и называется «модуль 10»: цифрам присваиваются чередующиеся веса, произведения складываются, а контрольная цифра дополняет сумму до ближайшего числа, кратного десяти.
Термин охватывает семейство контрольных разрядов целиком — от товарных номеров до банковских счетов, ISBN и IMEI. Частный случай товарной этикетки, с кассовыми нюансами и разбором ошибок чтения, вынесен в отдельный термин контрольная цифра штрих-кода; здесь EAN-13 нужен как самый наглядный пример схемы «модуль 10», от которой дальше отсчитываются все остальные.
Порядок действий на примере номера 460123456789, которому нужно дописать тринадцатый разряд:
- Пронумеруйте цифры слева направо. Нечётным позициям присваивается вес 1, чётным — вес 3.
- Умножьте каждую цифру на её вес: 4·1 + 6·3 + 0·1 + 1·3 + 2·1 + 3·3 + 4·1 + 5·3 + 6·1 + 7·3 + 8·1 + 9·3.
- Сложите произведения: 4 + 18 + 0 + 3 + 2 + 9 + 4 + 15 + 6 + 21 + 8 + 27 = 117.
- Найдите остаток от деления на 10: 117 mod 10 = 7.
- Вычтите остаток из десяти: 10 − 7 = 3. Если остаток равен нулю, контрольная цифра тоже нулевая.
Итоговый номер — 4601234567893. При сканировании считыватель повторяет расчёт по первым двенадцати цифрам и сравнивает результат с тринадцатой. Совпало — номер уходит в кассовую программу, не совпало — устройство молчит, будто кода нет вовсе.
У родственных символик та же математика, но веса начинаются с другого конца: в EAN-8 и в четырнадцатиразрядных кодах вес 3 достаётся первой цифре. Универсальное правило избавляет от путаницы — вес 3 всегда получает разряд, стоящий непосредственно слева от контрольного, дальше веса чередуются справа налево. При таком счёте дописанные слева нули ничего не меняют, поэтому GTIN-13, дополненный нулём до четырнадцати разрядов, сохраняет прежнюю контрольную цифру.
Какие ошибки схема ловит, а какие пропускает
Контрольная цифра проектировалась под конкретный сценарий — ручной набор номера с этикетки и сбой при оптическом считывании. Отсюда её гарантии.
Любая ошибка в одном разряде обнаруживается всегда. Изменение цифры на величину d меняет сумму на d или на 3d, и ни то, ни другое не делится на 10 при d от 1 до 9, поэтому остаток обязательно сдвинется.
Перестановка двух соседних цифр — вторая по частоте ошибка человека — обнаруживается почти всегда. Разность весов даёт изменение суммы на 2(a − b) по модулю 10, и оно равно нулю ровно тогда, когда цифры отличаются на пять. Пары 0 и 5, 1 и 6, 2 и 7, 3 и 8, 4 и 9, поменянные местами, проходят проверку незамеченными. Это известное ограничение схемы «модуль 10», а не дефект реализации.
Две и более ошибки в разных разрядах могут скомпенсировать друг друга: одна цифра увеличилась на единицу, другая уменьшилась, сумма не изменилась. Вероятность такого совпадения при случайном искажении — примерно один случай из десяти, потому что один десятичный разряд даёт всего десять состояний. Поэтому контрольная цифра остаётся механизмом проверки корректности ввода, а не защитой данных: подобрать поддельный номер с верным контрольным разрядом тривиально. Задачу защиты от намеренной подмены решают криптографические подписи — например, крипто-хвост в кодах маркировки.
Другие схемы контрольных разрядов
Формула «модуль 10 с весами 1 и 3» — лишь одна из семейства. Инженерная логика везде общая: взвешенная сумма разрядов приводится по модулю, а недостающее до нуля значение записывается в конец.
- Алгоритм Луна (ISO/IEC 7812) — банковские карты, IMEI, часть служебных номеров. Каждая вторая цифра справа удваивается, результат больше девяти уменьшается на 9, вся сумма должна делиться на 10. Ловит все одиночные ошибки и все перестановки соседей, кроме пары 09 и 90.
- Модуль 11 — ISBN-10, ИНН, номера страховых свидетельств. Веса убывают линейно, остаток берётся по 11, поэтому в ISBN-10 появляется символ X для значения 10. Схема обнаруживает и перестановки, и большинство двойных ошибок, но требует нецифрового символа либо запрета части номеров.
- Модуль 97 — международный банковский счёт. Две контрольные цифры, весь номер после перестановки блоков и замены букв числами делится на 97, остаток обязан равняться единице. Два разряда вместо одного снижают вероятность пропуска примерно до одной девяносто седьмой.
- Модуль 43 и модуль 103 — контрольные символы в линейных символиках Code 39 и Code 128, где алфавит шире десяти цифр и контроль ведётся по кодовым значениям символов, а не по десятичным цифрам.
Общее свойство всех схем: длина контроля определяет вероятность пропуска. Один десятичный разряд — примерно один случайный номер из десяти пройдёт как валидный, две цифры по модулю 97 — один из девяноста семи. Наращивать защиту дальше в человекочитаемом номере невыгодно: каждая лишняя цифра усложняет диктовку и набор. В машинных каналах вместо контрольной цифры считают контрольную сумму на 16 или 32 бита, где вероятность пропуска падает на порядки.
Практика: печать, ввод и типичные промахи
Контрольная цифра печатается под символом штрихового кода наравне с остальными и входит в состав самого кода, поэтому вводить её вручную при генерации этикетки не нужно — корректный генератор считает её сам. Если сервис требует ровно 12 цифр для EAN-13, значит, он ожидает базу без контрольного разряда; если ровно 13 — проверит введённое и отвергнет неверное. Собрать корректный символ с автоматическим расчётом разряда можно в генераторе штрих-кодов.
Ошибки при ручном расчёте выглядят одинаково у всех, кто делает это впервые:
- контрольная цифра включена в собственный расчёт — считать нужно только по предыдущим разрядам;
- веса отсчитаны слева при работе с кодом другой длины — надёжнее всегда начинать справа, от разряда рядом с контрольным;
- при переходе от тринадцатиразрядного кода к четырнадцатиразрядному добавлена индикаторная цифра, а контрольная оставлена прежней — при добавлении значащего разряда слева её нужно пересчитывать заново, в отличие от дополнения нулями;
- номер скопирован из таблицы, где ведущий ноль потерян при импорте, — тогда сумма считается по сдвинутым весам и не сходится.
Если сканер молчит на конкретной этикетке, причина не всегда в контрольной цифре: чаще виноваты низкий контраст, повреждённые штрихи или отсутствие светлых полей по краям. Разбор причин собран в материале о том, почему штрих-код не сканируется. Смысловая разбивка остальных двенадцати разрядов — префикс организации, номер товара — описана в статье что означают цифры на штрих-коде, а вопрос страны выпуска подробно разобран в разборе префиксов GS1.
Частые вопросы
Почему сканер не выдаёт номер с неверной контрольной цифрой?
Потому что проверка встроена в декодер на уровне символики. Считыватель распознаёт штрихи, собирает тринадцать цифр, пересчитывает контрольный разряд и при несовпадении отбрасывает результат целиком. Такое поведение безопаснее альтернативы: лучше повторное сканирование, чем пробитый на кассе чужой товар из-за одного неверно прочитанного штриха.
Можно ли восстановить стёртую цифру по контрольной?
Да, если известно, какой именно разряд утрачен, а остальные прочитаны верно. Уравнение взвешенной суммы по модулю 10 с одним неизвестным решается однозначно: подставьте цифры от 0 до 9 и найдите ту, при которой проверка сходится. Если позиция потери неизвестна или повреждено несколько разрядов, восстановление невозможно — для этого нужна не проверка, а корректирующий код.
Совпадают ли контрольные цифры EAN-13 и ISBN-13?
Да, полностью. ISBN-13 — это тот же EAN-13 с префиксом 978 или 979, поэтому контрольная цифра считается по схеме модуль 10 с весами 1 и 3. ISBN-10 устроен иначе: там веса от 10 до 2, модуль 11 и возможный символ X в последнем разряде. При конвертации ISBN-10 в ISBN-13 контрольный разряд пересчитывается заново, старый переносить нельзя.
Чем контрольная цифра отличается от контрольной суммы?
Масштабом и назначением. Контрольная цифра — один десятичный разряд, рассчитанный на человеческий ввод и оптическое считывание короткого номера. Контрольная сумма вроде CRC-32 занимает 32 бита и рассчитана на машинный канал: она гарантированно обнаруживает пакеты искажений и даёт вероятность пропуска порядка одной четырёхмиллиардной. В номере на упаковке столько разрядов держать негде.
Есть ли контрольная цифра в QR-коде?
В привычном виде нет. QR-код защищён кодами Рида — Соломона, которые не только обнаруживают повреждение, но и восстанавливают данные — до 30% символа при уровне коррекции H. При этом контрольная цифра может присутствовать внутри содержимого: если в QR записан товарный номер или банковский счёт, его собственный контрольный разряд никуда не девается и проверяется принимающей системой.