Открыть сервисСервис

Код Луна

Код Луна (также известный как формула Луна, алгоритм Луна или алгоритм модуля 10) — это алгоритм вычисления контрольной цифры номера, используемый для проверки корректности ввода идентификационных номеров, таких как номера кредитных карт, IMEI-коды, номера социального страхования в некоторых странах и другие. Алгоритм предназначен для обнаружения случайных ошибок при ручном вводе (например, перестановки соседних цифр или опечатки в одной цифре), но не обеспечивает криптографической защиты от преднамеренного подбора.

История

Алгоритм был разработан в 1954 году Хансом Питером Луном (Hans Peter Luhn), сотрудником компании IBM. Луна, немецко-американский учёный в области информатики, также известен как создатель термина «информационный поиск» и основоположник ряда методов автоматической индексации текстов. Первоначально алгоритм был запатентован в США (патент US 2950048 A, подан в 1954 году, выдан в 1960 году) и предназначался для использования в механических устройствах для проверки номеров. С развитием электронных платежных систем и появлением пластиковых карт алгоритм получил широкое распространение. В 1960-х годах он был принят в качестве стандарта для проверки номеров кредитных карт, а позже — для других идентификаторов.

Принцип работы

Алгоритм Луна основан на простой арифметической проверке. Он вычисляет контрольную сумму номера, которая должна быть кратна 10. Процесс проверки состоит из следующих шагов:

  1. Начиная с самой правой цифры (контрольной) и двигаясь влево, удваивается значение каждой второй цифры (то есть цифры на чётных позициях, если считать справа налево, начиная с 1).
  2. Если результат удвоения превышает 9, из него вычитается 9 (или, что эквивалентно, складываются цифры полученного числа: например, 16 → 1+6=7).
  3. Все полученные числа (как исходные, так и преобразованные) суммируются.
  4. Если общая сумма кратна 10 (оканчивается на 0), номер считается корректным.

Пример вычисления

Рассмотрим номер карты 4561 2612 1234 5467. Контрольная цифра — 7 (последняя).

  1. Удваиваем каждую вторую цифру справа налево, начиная с первой (счёт справа):
  • 4 (не удваивается) → 4
  • 5 (удваивается, но 5*2=10, 10-9=1) → 1
  • 6 (не удваивается) → 6
  • 4 (удваивается, 4*2=8) → 8
  • 3 (не удваивается) → 3
  • 2 (удваивается, 2*2=4) → 4
  • 2 (не удваивается) → 2
  • 1 (удваивается, 1*2=2) → 2
  • 1 (не удваивается) → 1
  • 2 (удваивается, 2*2=4) → 4
  • 6 (не удваивается) → 6
  • 2 (удваивается, 2*2=4) → 4
  • 1 (не удваивается) → 1
  • 5 (удваивается, 5*2=10, 10-9=1) → 1
  • 4 (не удваивается) → 4
  • 7 (контрольная цифра, не удваивается) → 7
  1. Суммируем все полученные значения: 4+1+6+8+3+4+2+2+1+4+6+4+1+1+4+7 = 60.
  2. 60 кратно 10 — номер корректен.

Применение

Код Луна используется в следующих системах:

Платежные карты

Номера кредитных и дебетовых карт международных платёжных систем (Visa, Mastercard, American Express, Мир и других) содержат контрольную цифру, вычисленную по алгоритму Луна. Это позволяет банковским терминалам и онлайн-формам быстро отсеивать номера, введённые с ошибкой, без обращения к банку-эмитенту.

IMEI

Международный идентификатор мобильного оборудования (IMEI) — 15-значный код, в котором последняя цифра является контрольной, рассчитанной по формуле Луна. Это позволяет операторам связи и производителям проверять корректность ввода IMEI при регистрации устройств в сети или при блокировке украденных телефонов.

Номера социального страхования

В Канаде (Social Insurance Number, SIN) и США (в некоторых контекстах) используется алгоритм Луна для проверки корректности ввода номера. Однако в США для номеров Social Security Number (SSN) применяется другой, более сложный метод проверки.

Другие идентификаторы

Алгоритм применяется в номерах ISIN (International Securities Identification Number) для ценных бумаг, в некоторых штрих-кодах (например, UPC-A), в номерах банковских счетов IBAN (International Bank Account Number) в сочетании с другими алгоритмами, а также в ряде государственных идентификаторов (например, в некоторых странах — в номерах водительских удостоверений).

Ограничения

Алгоритм Луна не является криптостойким. Он предназначен исключительно для обнаружения случайных ошибок ввода. Основные ограничения:

  • Не защищает от намеренного подбора. Злоумышленник, зная алгоритм, может легко подобрать корректный номер, изменив одну цифру.
  • Не обнаруживает все типы ошибок. Алгоритм не гарантирует обнаружение перестановки цифр, если разница между ними кратна 9 (например, 09 → 90). Также он не всегда обнаруживает двойные ошибки (например, 22 → 11).
  • Не проверяет существование номера. Алгоритм лишь подтверждает, что номер соответствует формату, но не гарантирует, что такой номер действительно выдан банком или оператором.

Критика и альтернативы

Несмотря на широкое распространение, алгоритм Луна критикуется за низкую надёжность по сравнению с современными методами контроля целостности данных. Для более чувствительных приложений (например, в криптографии или при проверке целостности файлов) используются хеш-функции (SHA-256, MD5) или контрольные суммы (CRC). В контексте платёжных карт, помимо алгоритма Луна, существуют дополнительные проверки, такие как проверка по префиксу (BIN-код), проверка длины номера и проверка срока действия карты.

В некоторых системах (например, в номерах банковских счетов IBAN) используется более сложный алгоритм, основанный на модуле 97 (ISO 7064), который обеспечивает более высокую вероятность обнаружения ошибок.

Интересные факты

  • Алгоритм Луна запатентован, но патент истёк в 1970-х годах, и алгоритм стал общедоступным.
  • В некоторых странах (например, в Китае) алгоритм Луна используется для проверки номеров удостоверений личности.
  • Алгоритм Луна является частью стандарта ISO/IEC 7812-1, который определяет формат номеров платежных карт.
  • В 2020-х годах с развитием онлайн-торговли и электронных платежей алгоритм Луна остаётся основным методом первичной проверки номеров карт в веб-формах.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru