Preskočiť na obsah

Kalkulačka Luhn algoritmu - Overenie kreditnej karty a IMEI

Bezplatná kalkulačka Luhn mod 10 pre overenie kreditnej karty, kontrolu IMEI a overenie identity. Okamžité overenie čísel alebo generovanie testovacích údajov online.

Kalkulačka Luhn algoritmu

Akcia

Skontrolovať, či vaše číslo prejde Luhn mod 10 validáciou

Kalkulačka načítavania...
📚

Dokumentácia

Čo je Luhnov algoritmus?

Luhnov algoritmus, nazývaný aj algoritmus modulo 10, je vzorec, ktorý overuje, či by reťazec číslic mohol byť platným identifikačným číslom. Používa sa na zachytenie preklepov v číslach platobných kariet, číslach IMEI v telefónoch a iných identifikačných kódoch skôr, než spôsobia chybu. Inžinier IBM Hans Peter Luhn túto metódu opísal v patente podanom v roku 1954.

Algoritmus nedokazuje, že číslo je skutočné alebo aktívne. Iba potvrdzuje, že číslice zodpovedajú očakávanému vzoru. Číslo karty môže vyhovieť Luhnovej kontrole a napriek tomu byť falošné, exspirované alebo bez dostatočných prostriedkov.

Ako vypočítať kontrolný súčet podľa Luhnovho algoritmu

Kontrola pracuje s číslicami čísla, ktoré sa čítajú sprava doľava.

  1. Začnite druhou číslicou sprava a zdvojnásobte každú druhú číslicu.
  2. Ak zdvojnásobením číslice vznikne číslo väčšie ako 9, odčítajte od neho 9. (Je to rovnaké ako sčítanie dvoch číslic výsledku, takže 16 sa zmení na 1 + 6 = 7, prípadne ekvivalentne 16 − 9 = 7.)
  3. Sčítajte všetky číslice: zdvojnásobené číslice po úprave aj číslice, ktoré zostali nezmenené.
  4. Ak je celkový súčet deliteľný 10, číslo je platné. Ak nie, je neplatné.

Keď spoločnosť vydáva nové identifikačné čísla, používa rovnaké kroky v opačnom poradí. Vyberie všetky číslice okrem poslednej, vykoná kontrolu a potom zvolí poslednú „kontrolnú číslicu“ tak, aby bol celkový súčet deliteľný 10.

Príklad výpočtu: overenie čísla karty

Vezmime testovacie číslo 4532015112830366.

  1. Číslice sprava doľava: 6, 6, 3, 0, 3, 8, 2, 1, 1, 5, 1, 0, 2, 3, 5, 4
  2. Zdvojnásobte každú druhú číslicu: 6, 12, 3, 0, 3, 16, 2, 2, 1, 10, 1, 0, 2, 6, 5, 8
  3. Odčítajte 9 od každého výsledku väčšieho ako 9: 6, 3, 3, 0, 3, 7, 2, 2, 1, 1, 1, 0, 2, 6, 5, 8
  4. Sčítajte ich: 6+3+3+0+3+7+2+2+1+1+1+0+2+6+5+8 = 50
  5. 50 je deliteľné 10, takže číslo je platné.

Príklad výpočtu: neplatné číslo

Vezmime číslo 490154203237517, ktoré má 15 číslic vo formáte používanom pri číslach IMEI.

Rovnaký postup dá súčet 59. Keďže 59 nie je deliteľné 10, toto číslo je neplatné.

Ak ho chceme zmeniť na platné číslo, treba zmeniť iba poslednú číslicu. Vyskúšanie všetkých možných posledných číslic ukáže, že posledná číslica 8 zvýši súčet na 60, ktoré je deliteľné 10. 490154203237518 je teda platné Luhnovo číslo, zatiaľ čo každá iná posledná číslica od 0 po 9 (okrem 8) vytvorí neplatné číslo.

Ako používať túto kalkulačku

Kalkulačka má dva režimy, ktoré sa vyberajú tlačidlami akcií.

Overiť kontroluje číslo počas zadávania. Nie je potrebné stlačiť žiadne tlačidlo. Výsledok sa zobrazí hneď, ako pole obsahuje číslice, a podrobný rozpis krok za krokom pod ním uvádza každú číslicu, hodnotu, ktorou prispeje po zdvojnásobení a úprave, aj celkový súčet.

Generovať vytvorí číslo, ktoré prejde kontrolou. Všetky číslice, ktoré už sú v poli, zostanú na začiatku nového čísla. Kalkulačka doplní zvyšok náhodnými číslicami a pripojí kontrolnú číslicu. Výsledok má 16 číslic, čo je dĺžka typického čísla platobnej karty, pokiaľ zadané číslice nemajú už 16 alebo viac; v takom prípade bude výsledok o jednu číslicu dlhší než zadané číslice.

Medzery, pomlčky a bodky vo vstupe sa ignorujú, takže „4532 0151 1283 0366“ a „4532-0151-1283-0366“ sa čítajú rovnako ako samotné číslice. Akýkoľvek iný znak, napríklad písmeno, sa odmietne a zobrazí sa chybové hlásenie.

Kde sa používa Luhnov algoritmus

  • Platobné karty. Visa, Mastercard, American Express a ďalšie siete vytvárajú čísla kariet tak, aby celé číslo prešlo Luhnovou kontrolou. Formuláre pri platbe ju môžu použiť na zachytenie preklepu ešte pred kontaktovaním spracovateľa platby.
  • Čísla IMEI. Identifikátor s 15 číslicami pridelený telefónom a iným mobilným zariadeniam obsahuje Luhnovu kontrolnú číslicu.
  • Kanadské čísla sociálneho poistenia. SIN s 9 číslicami používa rovnakú kontrolu.
  • Národný identifikátor poskytovateľa v USA (NPI). Poskytovatelia zdravotnej starostlivosti v Spojených štátoch dostávajú NPI s 10 číslicami, ktorý sa overuje kontrolou založenou na Luhnovom algoritme.

Čo Luhnov algoritmus nezachytí

Algoritmus vždy zachytí jednu nesprávne zadanú číslicu bez ohľadu na to, ktorá číslica to je a kde sa nachádza. Zachytí aj každú zámenu susedných číslic (napríklad zadanie „39“ namiesto „93“) okrem jedného konkrétneho prípadu: zámeny 0 a 9, ktoré sú vedľa seba, napríklad keď sa „09“ zmení na „90“.

Nezachytí ani tri chyby, pri ktorých sa opakovaná dvojica číslic nahradí inou opakovanou dvojicou: 22 prečítané ako 55, 33 prečítané ako 66 a 44 prečítané ako 77. Keďže tieto medzery sú známe a obmedzené, Luhnova kontrola je spoľahlivá pri zachytávaní bežných preklepov, ale sama sa nepovažuje za úplný systém detekcie chýb.

Luhnova kontrola nie je bezpečnostná kontrola

Luhnov algoritmus bol navrhnutý na odhaľovanie náhodných chýb pri zadávaní údajov, nie na odhaľovanie podvodov. Číslo, ktoré kontrolou prejde, je iba matematicky správne vytvorené. Skutočná bezpečnosť platieb závisí od ďalších vrstiev pridaných po Luhnovej kontrole, napríklad od kódu CVV na karte, overenia adresy a autentifikácie 3-D Secure. Luhnova kontrola je jednoducho prvý a najlacnejší filter, ktorý sa vykoná pred týmito pomalšími kontrolami.

Overenie čísla v JavaScripte

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

Kontrola prázdneho vstupu je dôležitá: prázdny reťazec má súčet číslic 0 a 0 je deliteľné 10, takže bez tejto kontroly by funkcia považovala prázdny vstup za platné číslo. Ak chcete nájsť kontrolnú číslicu namiesto overenia čísla, spustite rovnakú slučku nad číslicami pred kontrolnou číslicou, ale začnite zdvojnásobovať pri poslednej z nich, a potom použite (10 - sum % 10) % 10.

Často kladené otázky

Na čo sa používa Luhnov algoritmus?

Overuje, či je identifikačné číslo, napríklad číslo platobnej karty, číslo IMEI alebo kanadské SIN, vnútorne konzistentné. Zachytáva nesprávne zadané alebo prehodené číslice skôr, než spôsobia chybu pri spracovaní.

Ako presne Luhnov algoritmus zachytáva chyby?

Zachytí každú nesprávne zadanú číslicu a takmer každý prípad zámeny dvoch susedných číslic. Jediná zámena, ktorú nezachytí, je zámena 0 a 9 nachádzajúcich sa vedľa seba. Nezachytí ani tri konkrétne „dvojité“ zámeny: 22 namiesto 55, 33 namiesto 66 a 44 namiesto 77.

Znamená platné Luhnovo číslo, že karta je skutočná?

Nie. Kontrola iba potvrdzuje, že číslice zodpovedajú očakávanému vzoru. Nehovorí nič o tom, či karta existuje, je aktívna alebo obsahuje prostriedky. Na tento účel podniky pridávajú samostatné kontroly, napríklad overenie kódu CVV.

Dá sa Luhnova kontrola vykonať bez počítača?

Áno. Vyžaduje iba zdvojnásobovanie, odčítanie a sčítanie, takže ju možno vykonať ručne alebo pomocou jednoduchej kalkulačky. Bolo to súčasťou pôvodného návrhu, určeného pre éru diernych štítkov pred rozšírením digitálnych počítačov.

Sú generované čísla skutočnými číslami kariet?

Nie. Generátor vytvára iba reťazce číslic, ktoré spĺňajú Luhnovu kontrolu. Sú určené na testovanie vstupných formulárov. Žiadna banka ich nevydala a nemožno ich použiť na platby.

Prečo sa nazýva algoritmus modulo 10?

Pretože posledný krok overuje, či je súčet bezo zvyšku deliteľný 10, čo sa v matematike zapisuje ako „sum mod 10 = 0“. „Mod“ je skrátené slovo modulo, teda zvyšok po delení.

Kto vynašiel Luhnov algoritmus?

Hans Peter Luhn, inžinier v IBM, ho opísal v patentovej prihláške podanej v roku 1954 (udelený v 1960 ako patent USA č. 2 950 048). Je známy aj ranou prácou na počítačovom indexovaní textu.