Алгоритм модуля 10
Алгоритм модуля 10 (также известный как алгоритм Лу́на, формула Луна) — это контрольная сумма, используемая для проверки корректности ввода или передачи последовательностей цифр, чаще всего номеров банковских карт, IMEI-кодов, номеров социального страхования и некоторых других идентификаторов. Алгоритм не предназначен для защиты от злонамеренных подделок, а лишь позволяет выявить случайные ошибки (например, опечатки, перестановки соседних цифр) и обеспечивает определённую степень валидации на этапе ввода данных.
История
Алгоритм был разработан в 1954 году инженером IBM Гансом Петером Луном (Hans Peter Luhn) и запатентован в 1960 году (патент США № 2 950 048). Первоначально он предназначался для проверки номеров в системах механической обработки данных, но наибольшее распространение получил в банковской сфере, где используется для валидации номеров платёжных карт международных платёжных систем (Visa, Mastercard, American Express и других). В 1980-х годах алгоритм был стандартизирован в рамках ISO/IEC 7812-1, регламентирующего структуру идентификационных номеров эмитентов платёжных карт.
Принцип работы
Алгоритм модуля 10 основан на вычислении контрольной цифры, которая добавляется в конец последовательности цифр (или проверяется как последняя цифра). Процесс проверки состоит из нескольких шагов:
- Нумерация позиций: Цифры нумеруются справа налево, начиная с 1. Контрольная цифра (самая правая) занимает позицию 1.
- Удвоение цифр на чётных позициях: Каждая цифра, стоящая на чётной позиции (2, 4, 6 и т.д.), умножается на 2.
- Суммирование цифр: Если результат удвоения даёт двузначное число (10 и более), его цифры складываются (например, 16 → 1+6=7). Все цифры (включая неудвоенные на нечётных позициях) суммируются.
- Проверка на делимость: Полученная сумма должна делиться на 10 без остатка. Если это так, номер считается корректным.
Пример вычисления контрольной цифры
Допустим, требуется сгенерировать номер с контрольной цифрой для последовательности 7992739871 (10 цифр). Необходимо добавить 11-ю цифру (контрольную).
- Записываем последовательность, начиная с контрольной цифры (пока неизвестна, обозначим X):
X 1 7 8 9 3 7 2 9 9 7 Позиции (справа налево): 1:X, 2:1, 3:7, 4:8, 5:9, 6:3, 7:7, 8:2, 9:9, 10:9, 11:7.
- Удваиваем цифры на чётных позициях (2, 4, 6, 8, 10):
- Позиция 2 (1): 1×2 = 2
- Позиция 4 (8): 8×2 = 16 → 1+6 = 7
- Позиция 6 (3): 3×2 = 6
- Позиция 8 (2): 2×2 = 4
- Позиция 10 (9): 9×2 = 18 → 1+8 = 9
- Суммируем все полученные значения и цифры на нечётных позициях (1, 3, 5, 7, 9, 11):
- Нечётные (без контрольной): 7 (поз. 11) + 9 (поз. 9) + 7 (поз. 7) + 9 (поз. 5) + 7 (поз. 3) = 39
- Чётные (после преобразования): 2 + 7 + 6 + 4 + 9 = 28
- Общая сумма: 39 + 28 = 67
- Для того чтобы общая сумма делилась на 10, контрольная цифра (X) должна быть такой, чтобы (67 + X) mod 10 = 0. Следовательно, X = 3 (так как 67+3=70).
Итоговый номер: 79927398713.
Применение
Банковские карты
Основная область применения — проверка номеров платёжных карт. Номер карты (PAN — Primary Account Number) обычно состоит из 16 цифр, последняя из которых является контрольной, рассчитанной по алгоритму Луна. Это позволяет платёжным системам и терминалам отсеивать заведомо неверные номера на этапе ввода, не обращаясь к эмитенту.
IMEI-коды
Международный идентификатор мобильного оборудования (IMEI) состоит из 15 цифр, последняя из которых также вычисляется по алгоритму модуля 10. Это позволяет операторам связи и производителям проверять корректность кода при регистрации устройства в сети.
Номера социального страхования (США)
Хотя формально алгоритм не является обязательным для всех номеров SSN, некоторые государственные учреждения используют его для проверки вводимых данных.
Другие идентификаторы
Алгоритм применяется в номерах некоторых банковских счетов (например, в Канаде), в номерах ISIN (международный идентификационный код ценных бумаг) и в ряде систем учёта транспортных средств.
Ограничения и уязвимости
Алгоритм модуля 10 не является криптостойким. Он не предназначен для защиты от преднамеренных подделок, а лишь для обнаружения случайных ошибок. Основные ограничения:
- Не обнаруживает все ошибки: Алгоритм не гарантирует выявление двойных ошибок (например, замена двух цифр) или перестановки цифр, если она происходит на одинаковых позициях (например, 09 → 90, если обе цифры находятся на нечётных позициях).
- Не защищает от подбора: Злоумышленник, зная алгоритм, может легко сгенерировать номер, проходящий проверку, но не являющийся действительным (например, номер, не выпущенный ни одним банком).
- Зависимость от длины: Алгоритм чувствителен к длине последовательности. Для номеров разной длины (например, 15 или 16 цифр) контрольная цифра рассчитывается по-разному.
Критика
Основная критика алгоритма связана с его недостаточной надёжностью для современных требований безопасности. В банковской сфере он используется только как первичный фильтр, а основная проверка подлинности карты осуществляется через эмитента с использованием CVV/CVC-кодов и протоколов 3D-Secure. В некоторых системах (например, в российских номерах СНИЛС) применяются более сложные алгоритмы контрольных сумм, обеспечивающие большую устойчивость к ошибкам.
Источники
- Патент США № 2 950 048 «Computer for Verifying Numbers», 1960.
- ISO/IEC 7812-1:2017 «Identification cards — Identification of issuers — Part 1: Numbering system».
- Luhn, Hans Peter. «A Computer for Verifying Numbers». IBM Journal of Research and Development, vol. 4, no. 1, 1960.
- Стандарт IMEI: 3GPP TS 23.003 «Numbering, addressing and identification».
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →