Kalkulačka Luhnova algoritmu - Ověření kreditní karty a IMEI
Bezplatná kalkulačka Luhn mod 10 pro ověřování kreditních karet, kontrolu IMEI a ověřování identifikačních čísel. Okamžitě ověřte čísla nebo generujte testovací data online.
Kalkulačka Luhnova algoritmu
Zkontrolovat, zda vaše číslo projde ověřením Luhn mod 10
Dokumentace
Co je Luhnův algoritmus?
Luhnův algoritmus, nazývaný také algoritmus modulo 10, je vzorec, který ověřuje, zda by řetězec číslic mohl být platným identifikačním číslem. Používá se k odhalení překlepů v číslech platebních karet, číslech IMEI telefonů a dalších identifikačních kódech ještě předtím, než způsobí chybu. Metodu popsal inženýr IBM Hans Peter Luhn v patentu podaném v roce 1954.
Algoritmus nedokazuje, že číslo skutečně existuje nebo je aktivní. Pouze potvrzuje, že číslice odpovídají očekávanému vzoru. Číslo karty může kontrolou podle Luhna projít, a přesto být falešné, prošlé nebo bez prostředků.
Jak vypočítat kontrolní součet podle Luhna
Kontrola pracuje s číslicemi čísla, které se čtou zprava doleva.
- Začněte druhou číslicí zprava a zdvojnásobte každou druhou číslici.
- Pokud zdvojnásobením číslice vznikne číslo větší než 9, odečtěte od něj 9. (Je to totéž jako sečíst dvě číslice výsledku, takže 16 se stane 1 + 6 = 7, případně ekvivalentně 16 − 9 = 7.)
- Sečtěte všechny číslice: zdvojené číslice po úpravě i číslice, které zůstaly beze změny.
- Pokud je celkový součet dělitelný 10, je číslo platné. Jinak je neplatné.
Když organizace vydává nová identifikační čísla, používá stejné kroky obráceně. Vybere všechny číslice kromě poslední, provede kontrolu a poté zvolí poslední „kontrolní číslici“ tak, aby byl celkový součet dělitelný 10.
Praktický příklad: ověření čísla karty
Vezměme testovací číslo 4532015112830366.
- Číslice zprava doleva: 6, 6, 3, 0, 3, 8, 2, 1, 1, 5, 1, 0, 2, 3, 5, 4
- Zdvojnásobte každou druhou číslici: 6, 12, 3, 0, 3, 16, 2, 2, 1, 10, 1, 0, 2, 6, 5, 8
- Od každého výsledku většího než 9 odečtěte 9: 6, 3, 3, 0, 3, 7, 2, 2, 1, 1, 1, 0, 2, 6, 5, 8
- Sečtěte je: 6+3+3+0+3+7+2+2+1+1+1+0+2+6+5+8 = 50
- 50 je dělitelné 10, takže číslo je platné.
Praktický příklad: neplatné číslo
Vezměme 490154203237517, což je 15místné číslo ve formátu používaném pro čísla IMEI.
Provedení stejných kroků dá součet 59. Protože 59 není dělitelné 10, je toto číslo neplatné.
Aby se stalo platným, stačí změnit poslední číslici. Vyzkoušení všech možných posledních číslic ukáže, že poslední číslice 8 zvýší součet na 60, které je dělitelné 10. 490154203237518 je tedy platné číslo podle Luhna, zatímco každá jiná poslední číslice od 0 do 9 (kromě 8) vytvoří neplatné číslo.
Jak tuto kalkulačku používat
Kalkulačka má dva režimy, které se volí tlačítky Akce.
Ověřit kontroluje číslo během jeho zadávání. Není třeba stisknout žádné tlačítko. Výsledek se zobrazí, jakmile pole obsahuje číslice, a podrobný rozpis krok za krokem pod ním uvádí každou číslici, její hodnotu po zdvojnásobení a úpravě a celkový součet.
Generovat vytvoří číslo, které kontrolou projde. Všechny číslice již zadané v poli se zachovají jako začátek nového čísla. Kalkulačka doplní zbytek náhodnými číslicemi a připojí kontrolní číslici. Výsledek má 16 číslic, což odpovídá typickému číslu platební karty, pokud zadané číslice nejsou již dlouhé 16 nebo více; v takovém případě je výsledek o jednu číslici delší než zadaný řetězec.
Mezera, pomlčky a tečky ve vstupu se ignorují, takže „4532 0151 1283 0366“ a „4532-0151-1283-0366“ se načtou stejně jako samotné číslice. Jakýkoli jiný znak, například písmeno, je odmítnut chybovým hlášením.
Kde se Luhnův algoritmus používá
- Platební karty. Visa, Mastercard, American Express a další karetní sítě vytvářejí čísla karet tak, aby celé číslo prošlo kontrolou podle Luhna. Platební formuláře tak mohou zachytit chybně zadanou číslici ještě před kontaktováním zpracovatele platby.
- Čísla IMEI. 15místný identifikátor přidělený telefonům a dalším mobilním zařízením obsahuje kontrolní číslici podle Luhna.
- Kanadská čísla sociálního pojištění. 9místné SIN používá stejnou kontrolu.
- Národní identifikátor poskytovatele zdravotní péče v USA (NPI). Poskytovatelé zdravotní péče ve Spojených státech získávají 10místný NPI ověřovaný kontrolou založenou na Luhnově algoritmu.
Co Luhnův algoritmus neodhalí
Algoritmus vždy odhalí jedinou chybně zadanou číslici bez ohledu na to, o kterou číslici jde nebo kde se nachází. Odhalí také každou záměnu sousedních číslic, například zadání „39“ místo „93“, s jedinou výjimkou: záměnou sousedících číslic 0 a 9, například změnou „09“ na „90“.
Neodhalí ani tři „dvojité“ chyby, při nichž je opakovaná dvojice číslic nahrazena jinou opakovanou dvojicí: 22 přečtené jako 55, 33 přečtené jako 66 a 44 přečtené jako 77. Protože jsou tyto mezery známé a omezené, je kontrola podle Luhna spolehlivá při odhalování běžných překlepů, ale sama o sobě se nepovažuje za úplný systém detekce chyb.
Luhnova kontrola není bezpečnostní kontrola
Luhnův algoritmus byl navržen k odhalování náhodných chyb při zadávání údajů, nikoli podvodů. Číslo, které kontrolou projde, je pouze matematicky správně utvořené. Skutečná bezpečnost plateb závisí na dalších vrstvách přidaných po kontrole podle Luhna, například na kódu CVV karty, ověření adresy a autentizaci 3-D Secure. Luhnova kontrola je jednoduše první a nejlevnější filtr, který se provádí před těmito pomalejšími kontrolami.
Ověření čísla v JavaScriptu
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}
18Ošetření prázdného vstupu je důležité: prázdný řetězec má součet číslic 0 a 0 je
dělitelné 10, takže bez této kontroly by funkce považovala prázdný vstup za
platné číslo. Chcete-li místo testování najít kontrolní číslici, spusťte stejnou smyčku
nad číslicemi před kontrolní číslicí, ale zdvojnásobování začněte u poslední z nich,
a poté použijte (10 - sum % 10) % 10.
Často kladené otázky
K čemu se Luhnův algoritmus používá?
Ověřuje, zda je identifikační číslo, například číslo platební karty, číslo IMEI nebo kanadské SIN, vnitřně konzistentní. Odhaluje chybně zadané nebo prohozené číslice ještě předtím, než způsobí chybu při zpracování.
Jak přesný je Luhnův algoritmus při odhalování chyb?
Odhalí každou jednotlivou chybně zadanou číslici a téměř každý případ záměny dvou sousedních číslic. Jediná záměna, kterou neodhalí, je záměna sousedících číslic 0 a 9. Neodhalí také tři konkrétní „dvojité“ záměny: 22 místo 55, 33 místo 66 a 44 místo 77.
Znamená platné číslo podle Luhna, že karta je skutečná?
Ne. Kontrola pouze potvrzuje, že číslice odpovídají očekávanému vzoru. Neříká nic o tom, zda karta existuje, je aktivní nebo má prostředky. Organizace k tomu přidávají samostatné kontroly, například kontrolu kódu CVV.
Lze kontrolu podle Luhna provést bez počítače?
Ano. Vyžaduje pouze zdvojnásobování, odčítání a sčítání, takže ji lze provést ručně nebo s jednoduchou kalkulačkou. To bylo součástí původního návrhu, určeného pro éru děrných štítků, kdy digitální počítače ještě nebyly běžné.
Jsou generovaná čísla skutečnými čísly karet?
Ne. Generátor vytváří pouze řetězce číslic, které projdou kontrolou podle Luhna. Mají sloužit k testování vstupních formulářů. Žádná banka je nevydala a nelze je použít k placení.
Proč se nazývá algoritmus modulo 10?
Protože poslední krok ověřuje, zda je součet beze zbytku dělitelný 10, což se v matematice zapisuje jako „součet modulo 10 = 0“. „Mod“ je zkráceně modulo, tedy zbytek po dělení.
Kdo vynalezl Luhnův algoritmus?
Hans Peter Luhn, inženýr společnosti IBM, jej popsal v patentové přihlášce podané v roce 1954 (udělené v 1960 jako americký patent 2 950 048). Je znám také svou ranou prací na počítačovém indexování textu.