Перейти к содержимому

Калькулятор алгоритма Луна - Проверка кредитных карт и IMEI

Бесплатный калькулятор Луна мод 10 для проверки кредитных карт, проверки IMEI и верификации удостоверений личности. Мгновенная проверка номеров или генерация тестовых данных онлайн.

Калькулятор алгоритма Луна

Действие

Проверить, проходит ли ваше число проверку по алгоритму Луна (mod 10)

Калькулятор загрузки...
📚

Документация

Что такое алгоритм Луна?

Алгоритм Луна, также называемый алгоритмом по модулю 10, — это формула, которая проверяет, может ли последовательность цифр быть действительным идентификационным номером. Его используют для выявления ошибок ввода в номерах кредитных карт, номерах IMEI телефонов и других идентификационных кодах до того, как они вызовут ошибку. Инженер IBM Ханс Петер Лун описал этот метод в патенте, поданном в 1954 году.

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

Как вычислить контрольную сумму Луна

Проверка выполняется над цифрами номера, которые читаются справа налево.

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

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

Проверка номера карты

Возьмём тестовый номер 4532015112830366.

  1. Цифры справа налево: 6, 6, 3, 0, 3, 8, 2, 1, 1, 5, 1, 0, 2, 3, 5, 4
  2. Удваиваем каждую вторую цифру: 6, 12, 3, 0, 3, 16, 2, 2, 1, 10, 1, 0, 2, 6, 5, 8
  3. Вычитаем 9 из каждого результата, превышающего 9: 6, 3, 3, 0, 3, 7, 2, 2, 1, 1, 1, 0, 2, 6, 5, 8
  4. Складываем их: 6+3+3+0+3+7+2+2+1+1+1+0+2+6+5+8 = 50
  5. 50 делится на 10 без остатка, поэтому номер действителен.

Недействительный номер

Возьмём 490154203237517 — номер из 15 цифр в формате, используемом для номеров IMEI.

Выполнение тех же действий даёт сумму 59. Поскольку 59 не делится на 10 без остатка, этот номер недействителен.

Чтобы сделать его действительным, нужно изменить только последнюю цифру. Проверка каждой возможной последней цифры показывает, что последняя цифра 8 увеличивает сумму до 60, которая делится на 10 без остатка. Поэтому 490154203237518 — действительный номер по алгоритму Луна, а любая другая последняя цифра от 0 до 9 (кроме 8) даёт недействительный номер.

Как пользоваться этим калькулятором

Калькулятор имеет два режима, выбираемых кнопками действий.

Проверка проверяет номер по мере его ввода. Нажимать кнопку не нужно. Результат появляется, как только в поле находятся цифры, а пошаговая расшифровка под ним показывает каждую цифру, её вклад после удвоения и свёртки, а также общую сумму.

Генерация создаёт номер, проходящий проверку. Все цифры, уже введённые в поле, сохраняются как начало нового номера. Калькулятор заполняет оставшуюся часть случайными цифрами и добавляет контрольную цифру. Результат содержит 16 цифр — столько же, сколько обычно содержит номер платёжной карты, — если только введённые цифры не содержат уже 16 или больше цифр; в таком случае результат на одну цифру длиннее введённого значения.

Пробелы, дефисы и точки во входных данных игнорируются, поэтому «4532 0151 1283 0366» и «4532-0151-1283-0366» читаются так же, как последовательность цифр без разделителей. Любой другой символ, например буква, отклоняется с сообщением об ошибке.

Где используется алгоритм Луна

  • Платёжные карты. Visa, Mastercard, American Express и другие платёжные системы формируют номера карт так, чтобы весь номер проходил проверку Луна. Формы оплаты могут использовать это для выявления ошибочно введённой цифры до обращения к оператору платежей.
  • Номера IMEI. Идентификатор из 15 цифр, присваиваемый телефонам и другим сотовым устройствам, включает контрольную цифру Луна.
  • Канадские номера социального страхования. Номер SIN из 9 цифр использует такую же проверку.
  • Национальный идентификатор поставщика медицинских услуг США (NPI). Медицинские работники в США получают NPI из 10 цифр, проверяемый с помощью алгоритма на основе алгоритма Луна.

Что не выявляет алгоритм Луна

Алгоритм всегда выявляет одну ошибочно введённую цифру — независимо от того, какая это цифра и где она находится. Он также выявляет все перестановки соседних цифр (например, ввод «39» вместо «93»), кроме одного конкретного случая: перестановки соседних 0 и 9, например превращения «09» в «90».

Он также не выявляет три ошибки с повторяющимися цифрами, при которых одна повторяющаяся пара цифр заменяется другой: 22 читается как 55, 33 — как 66, а 44 — как 77. Поскольку эти исключения известны и немногочисленны, проверка Луна надёжно выявляет обычные ошибки ввода, но сама по себе не считается полной системой обнаружения ошибок.

Алгоритм Луна — не проверка безопасности

Алгоритм Луна разработан для выявления случайных ошибок ввода данных, а не мошенничества. Номер, прошедший проверку, лишь математически корректен. Безопасность реальных платежей обеспечивается другими уровнями, добавляемыми после проверки Луна, например кодом CVV карты, проверкой адреса и аутентификацией 3-D Secure. Алгоритм Луна — это всего лишь первый и самый дешёвый фильтр, применяемый до более медленных проверок.

Проверка номера в JavaScript

1function isValidLuhn(number) {
2  const digits = number.replace(/\D/g, '').split('').map(Number);
3  if (digits.length === 0) return false;
4
5  let sum = 0;
6  let doubleDigit = false;
7  for (let i = digits.length - 1; i >= 0; i--) {
8    let d = digits[i];
9    if (doubleDigit) {
10      d *= 2;
11      if (d > 9) d -= 9;
12    }
13    sum += d;
14    doubleDigit = !doubleDigit;
15  }
16  return sum % 10 === 0;
17}
18

Проверка пустого ввода важна: сумма цифр пустой строки равна 0, а 0 делится на 10 без остатка, поэтому без этой проверки функция сочла бы пустую строку действительным номером. Чтобы найти контрольную цифру, а не проверить её, выполните тот же цикл по цифрам перед контрольной цифрой, но начните удваивание с последней из них, а затем вычислите (10 - sum % 10) % 10.

Часто задаваемые вопросы

Для чего используется алгоритм Луна?

Он проверяет, согласован ли идентификационный номер, например номер кредитной карты, номер IMEI или канадский SIN, сам с собой. Алгоритм выявляет ошибочно введённые или переставленные цифры до того, как они вызовут ошибку обработки.

Насколько хорошо алгоритм Луна выявляет ошибки?

Он выявляет любую одиночную ошибочно введённую цифру и почти любой случай перестановки двух соседних цифр. Единственная перестановка, которую он не выявляет, — это соседние 0 и 9. Он также не выявляет три конкретные замены типа «двойник»: 22 вместо 55, 33 вместо 66 и 44 вместо 77.

Означает ли действительный номер по алгоритму Луна, что карта настоящая?

Нет. Проверка лишь подтверждает, что цифры соответствуют ожидаемому шаблону. Она ничего не говорит о том, существует ли карта, активна ли она и есть ли на ней средства. Для этого организации выполняют отдельные проверки, например проверку кода CVV.

Можно ли выполнить проверку Луна без компьютера?

Да. Для неё нужны только удвоение, вычитание и сложение, поэтому её можно выполнить вручную или с помощью простого калькулятора. Это было частью первоначального замысла, рассчитанного на эпоху перфокарт, когда цифровые компьютеры ещё не получили широкого распространения.

Являются ли сгенерированные номера настоящими номерами карт?

Нет. Генератор создаёт только последовательности цифр, соответствующие проверке Луна. Они предназначены для тестирования форм ввода. Ни один банк их не выпускал, и ими нельзя расплачиваться.

Почему он называется алгоритмом по модулю 10?

Потому что на последнем шаге проверяется, делится ли сумма на 10 без остатка; в математике это записывается как «sum mod 10 = 0». «Mod» — сокращение от modulo, то есть остаток, остающийся после деления.

Кто изобрёл алгоритм Луна?

Ханс Петер Лун, инженер IBM, описал его в патентной заявке, поданной в 1954 году (патент выдан в 1960 году под номером US Patent 2 950 048). Он также известен своими ранними работами по компьютерному индексированию текстов.