Калкулатор на алгоритъм на Лун - Валидиране на кредитни карти и IMEI
Безплатен калкулатор Лун мод 10 за валидиране на кредитни карти, проверка на IMEI и идентификация. Незабавно валидирайте числа или генерирайте тестови данни онлайн.
Калкулатор на алгоритъм на Лун
Проверете дали вашето число преминава валидирането по модул 10 на Лун
Документация
Какво представлява алгоритъмът на Лун?
Алгоритъмът на Лун, наричан още алгоритъм по модул 10, е формула, която проверява дали даден низ от цифри може да бъде валиден идентификационен номер. Използва се за улавяне на грешки при въвеждане в номера на кредитни карти, IMEI номера на телефони и други идентификационни кодове, преди да са довели до проблем. Инженерът на IBM Ханс Петер Лун описва метода в патент, подаден през 1954 г..
Алгоритъмът не доказва, че даден номер е реален или активен. Той само потвърждава, че цифрите следват очаквания шаблон. Номер на карта може да премине проверката на Лун и въпреки това да е фалшив, изтекъл или без налични средства.
Как се изчислява контролна сума на Лун
Проверката се извършва върху цифрите на номера, прочетени отдясно наляво.
- Започвайки с втората цифра отдясно, удвоете всяка втора цифра.
- Ако удвояването на цифра даде число, по-голямо от 9, извадете 9 от него. (Това е същото като да съберете двете цифри на получения резултат, така че 16 става 1 + 6 = 7, или еквивалентно 16 − 9 = 7.)
- Съберете всички цифри: удвоените, след корекцията, и тези, които са останали непроменени.
- Ако общата сума се дели без остатък на 10, номерът е валиден. В противен случай е невалиден.
Когато организация издава нови идентификационни номера, тя използва същите стъпки в обратен ред. Взема всички цифри без последната, извършва проверката и след това избира последната „контролна цифра“, така че общата сума да се дели без остатък на 10.
проверка на номер на карта
Нека разгледаме тестовия номер 4532015112830366.
- Цифри отдясно наляво: 6, 6, 3, 0, 3, 8, 2, 1, 1, 5, 1, 0, 2, 3, 5, 4
- Удвоете всяка втора цифра: 6, 12, 3, 0, 3, 16, 2, 2, 1, 10, 1, 0, 2, 6, 5, 8
- Извадете 9 от всеки резултат, по-голям от 9: 6, 3, 3, 0, 3, 7, 2, 2, 1, 1, 1, 0, 2, 6, 5, 8
- Съберете ги: 6+3+3+0+3+7+2+2+1+1+1+0+2+6+5+8 = 50
- 50 се дели без остатък на 10, затова номерът е валиден.
Пример с изчисления: невалиден номер
Нека разгледаме 490154203237517, номер с 15 цифри във формата, използвана за IMEI номера.
Прилагането на същите стъпки дава сума 59. Тъй като 59 не се дели без остатък на 10, този номер е невалиден.
За да стане валиден, трябва да се промени само последната цифра. Изпробването на всяка възможна последна цифра показва, че последна цифра 8 увеличава сумата до 60, което се дели без остатък на 10. Следователно 490154203237518 е валиден номер според Лун, докато всяка друга последна цифра от 0 до 9 (с изключение на 8) дава невалиден номер.
Къде се използва алгоритъмът на Лун
- Платежни карти. Visa, Mastercard, American Express и други платежни мрежи създават номерата на картите си така, че целият номер да преминава проверката на Лун. Формулярите за плащане могат да използват това, за да открият грешно въведена цифра, преди да се свържат с платежен оператор.
- IMEI номера. 15-цифреният идентификатор, присвоен на телефони и други клетъчни устройства, включва контролна цифра по Лун.
- Канадски номера за социално осигуряване. SIN с 9 цифри използва същата проверка.
- Национален идентификатор на доставчик в САЩ (NPI). Доставчиците на здравни услуги в Съединените щати получават 10-цифрен NPI, валидиран с проверка на базата на Лун.
Какво не открива алгоритъмът на Лун
Алгоритъмът винаги открива една погрешно въведена цифра, независимо коя е тя и къде се намира. Той също открива всяка размяна на съседни цифри (например въвеждане на „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 let sum = 0;
4 let doubleDigit = false;
5 for (let i = digits.length - 1; i >= 0; i--) {
6 let d = digits[i];
7 if (doubleDigit) {
8 d *= 2;
9 if (d > 9) d -= 9;
10 }
11 sum += d;
12 doubleDigit = !doubleDigit;
13 }
14 return sum % 10 === 0;
15}
16Често задавани въпроси
За какво се използва алгоритъмът на Luhn?
Той проверява дали идентификационен номер, например номер на кредитна карта, IMEI номер или канадски SIN, е вътрешно съгласуван. Открива грешно въведени или разменени цифри, преди те да предизвикат грешка при обработката.
Колко точно открива грешки алгоритъмът на Luhn?
Той открива всяка единична грешно въведена цифра и почти всеки случай на размяна на две съседни цифри. Единствената размяна, която пропуска, е на 0 и 9, когато са една до друга. Той пропуска и три конкретни замени от типа „двойка“: 22 вместо 55, 33 вместо 66 и 44 вместо 77.
Означава ли валиден номер според Luhn, че картата е истинска?
Не. Проверката само потвърждава, че цифрите съответстват на очаквания шаблон. Тя не показва дали картата съществува, активна е или има налични средства. За това организациите добавят отделни проверки, например CVV код.
Може ли проверката на Luhn да се извърши без компютър?
Да. Необходими са само удвояване, изваждане и събиране, така че проверката може да се направи на ръка или с обикновен калкулатор. Това е било част от първоначалния замисъл, предназначен за ерата на перфокартите, преди цифровите компютри да станат широко разпространени.
Защо се нарича алгоритъм mod 10?
Защото последната стъпка проверява дали сумата се дели без остатък на 10, което в математиката се записва като „sum mod 10 = 0“. „Mod“ е съкращение от modulo — остатъкът, който остава след деление.
Кой е изобретил алгоритъма на Luhn?
Ханс Петер Лун, инженер в IBM, го описва в патентна заявка, подадена през 1954 г. (патентът е издаден през 1960 г. като патент на САЩ 2 950 048). Той е известен и с ранната си работа върху компютъризираното индексиране на текст.
Източници
- Ханс Петер Лун (IBM). Computer for Verifying Numbers, патент на САЩ 2 950 048. Патент на САЩ 2 950 048 в Google Patents — патентът на Лун, подаден на 6 януари 1954 г., издаден на 23 август 1960 г.
- 3GPP / ETSI. TS 123 003: Numbering, addressing and identification. ETSI TS 123 003 V17.8.0 — контролната цифра на IMEI се изчислява по формулата на Лун.
- Центрове за здравноосигурителни програми Medicare и Medicaid (CMS). Requirements for National Provider Identifier (NPI) and NPI Check Digit. Изисквания на CMS към контролната цифра на NPI — контролната цифра на NPI използва формулата на Лун по модул 10, прилагана и за номерата на издателите на карти.