Перейти до вмісту

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

Безкоштовний калькулятор Луна мод 10 для перевірки кредитних карток, перевірки IMEI та ідентифікації. Миттєва перевірка номерів або генерація тестових даних онлайн.

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

Дія

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

Калькулятор завантаження...
📚

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

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

Алгоритм Луна, також відомий як алгоритм mod 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.

Чи можна виконати перевірку Луна без комп’ютера?

Так. Вона потребує лише подвоєння, віднімання та додавання, тому її можна виконати вручну або за допомогою простого калькулятора. Це було частиною початкового задуму, розрахованого на епоху перфокарт, коли цифрові комп’ютери ще не були поширеними.

Чи є згенеровані номери справжніми номерами карток?

Ні. Генератор створює лише рядки цифр, які проходять перевірку Луна. Вони призначені для тестування форм введення. Жоден банк їх не видавав, і ними не можна платити за будь-що.

Чому це називається алгоритмом mod 10?

Тому що на останньому кроці перевіряють, чи ділиться сума на 10 без остачі, що в математиці записують як «sum mod 10 = 0». «Mod» — це скорочення від modulo, тобто остача, що залишається після ділення.

Хто винайшов алгоритм Луна?

Ганс Петер Лун, інженер IBM, описав його в патентній заявці, поданій 1954 року (патент видано в 1960 році як патент США 2 950 048). Він також відомий ранніми дослідженнями комп’ютеризованого індексування тексту.