Прескочи към съдържанието

Калкулатор на алгоритъм на Лун - Валидиране на кредитни карти и IMEI

Безплатен калкулатор Лун мод 10 за валидиране на кредитни карти, проверка на IMEI и идентификация. Незабавно валидирайте числа или генерирайте тестови данни онлайн.

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

Действие

Проверете дали вашето число преминава валидирането по модул 10 на Лун

Калкулатор за зареждане...
📚

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

Какво представлява алгоритъмът на Luhn?

Алгоритъмът на Luhn, наричан също алгоритъм mod 10, е формула, която проверява дали низ от цифри може да бъде валиден идентификационен номер. Той се използва за откриване на грешки при въвеждане в номера на кредитни карти, IMEI номера на телефони и други идентификационни кодове, преди те да предизвикат грешка. Инженерът на IBM Ханс Петер Лун описва метода в патент, подаден през 1954 г.

Алгоритъмът не доказва, че даден номер е реален или активен. Той само потвърждава, че цифрите следват очаквания шаблон. Номер на карта може да премине проверката на Luhn и въпреки това да е фалшив, изтекъл или без налични средства.

Как се изчислява контролна сума на Luhn

Проверката се извършва върху цифрите на номера, прочетени отдясно наляво.

  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 е валиден номер според Luhn, докато всяка друга последна цифра от 0 до 9 (с изключение на 8) дава невалиден номер.

Как се използва този калкулатор

Калкулаторът има два режима, избирани с бутоните за действие.

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

Генериране създава номер, който преминава проверката. Всички цифри, които вече са в полето, се запазват като начало на новия номер. Калкулаторът попълва останалата част със случайни цифри и добавя контролната цифра. Резултатът е дълъг 16 цифри, колкото е типичният номер на платежна карта, освен ако въведените цифри не са вече 16 или повече; в такъв случай резултатът е с една цифра по-дълъг от въведения номер.

Интервалите, тиретата и точките във входа се игнорират, така че „4532 0151 1283 0366“ и „4532-0151-1283-0366“ се прочитат по същия начин като цифрите без разделители. Всеки друг знак, например буква, се отхвърля със съобщение за грешка.

Къде се използва алгоритъмът на Luhn

  • Платежни карти. Visa, Mastercard, American Express и други платежни мрежи създават номерата на картите си така, че целият номер да преминава проверката на Luhn. Формулярите за плащане могат да използват това, за да открият грешно въведена цифра, преди да се свържат с платежен оператор.
  • IMEI номера. Идентификаторът с 15 цифри, присвоен на телефони и други клетъчни устройства, включва контролна цифра на Luhn.
  • Канадски номера за социално осигуряване. SIN с 9 цифри използва същата проверка.
  • Национален идентификатор на доставчика в САЩ (NPI). Доставчиците на здравни услуги в Съединените щати получават NPI с 10 цифри, валидиран чрез проверка, основана на Luhn.

Какво не открива алгоритъмът на Luhn

Алгоритъмът винаги открива една погрешно въведена цифра, независимо коя е тя и къде се намира. Той също открива всяка размяна на съседни цифри (например въвеждане на „39“ вместо „93“), с едно изключение: размяна на 0 и 9, които са една до друга, например „09“ да стане „90“.

Той пропуска и три грешки от типа „двойка“, при които повтаряща се двойка цифри се заменя с друга повтаряща се двойка: 22, прочетено като 55, 33, прочетено като 66, и 44, прочетено като 77. Тъй като тези пропуски са известни и ограничени, проверката на Luhn е надеждна за откриване на обичайни грешки при въвеждане, но сама по себе си не се счита за цялостна система за откриване на грешки.

Luhn не е проверка за сигурност

Luhn е създаден за откриване на случайни грешки при въвеждане на данни, а не на измами. Номер, който преминава проверката, е математически правилно структуриран, но това е всичко. Реалната сигурност на плащането зависи от други слоеве, добавени след проверката на Luhn, като CVV код на картата, проверка на адреса и 3-D Secure удостоверяване. Luhn е просто първият и най-евтин филтър, който се изпълнява преди тези по-бавни проверки.

Проверка на номер в 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.

Често задавани въпроси

За какво се използва алгоритъмът на Luhn?

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

Колко точно открива грешки алгоритъмът на Luhn?

Той открива всяка единична грешно въведена цифра и почти всеки случай на размяна на две съседни цифри. Единствената размяна, която пропуска, е на 0 и 9, когато са една до друга. Той пропуска и три конкретни замени от типа „двойка“: 22 вместо 55, 33 вместо 66 и 44 вместо 77.

Означава ли валиден номер според Luhn, че картата е истинска?

Не. Проверката само потвърждава, че цифрите съответстват на очаквания шаблон. Тя не показва дали картата съществува, активна е или има налични средства. За това организациите добавят отделни проверки, например CVV код.

Може ли проверката на Luhn да се извърши без компютър?

Да. Необходими са само удвояване, изваждане и събиране, така че проверката може да се направи на ръка или с обикновен калкулатор. Това е било част от първоначалния замисъл, предназначен за ерата на перфокартите, преди цифровите компютри да станат широко разпространени.

Истински номера на карти ли са генерираните номера?

Не. Генераторът създава само низове от цифри, които преминават проверката на Luhn. Те са предназначени за тестване на формуляри за въвеждане. Нито една банка не ги е издала и те не могат да бъдат използвани за плащане на каквото и да било.

Защо се нарича алгоритъм mod 10?

Защото последната стъпка проверява дали сумата се дели без остатък на 10, което в математиката се записва като „sum mod 10 = 0“. „Mod“ е съкращение от modulo — остатъкът, който остава след деление.

Кой е изобретил алгоритъма на Luhn?

Ханс Петер Лун, инженер в IBM, го описва в патентна заявка, подадена през 1954 г. (патентът е издаден през 1960 г. като патент на САЩ 2 950 048). Той е известен и с ранната си работа върху компютъризираното индексиране на текст.