Kalkulator Luhnov algoritma - Preverjanje veljavnosti kreditnih kartic in IMEI
Brezplačni kalkulator Luhn mod 10 za preverjanje veljavnosti kreditnih kartic, preverjanje IMEI in identifikacijo. Trenutno preverjanje številk ali generiranje testnih podatkov na spletu.
Kalkulator Luhnovega algoritma
Preverite, ali vaša številka prestane Luhnovo mod 10 preverjanje
Dokumentacija
Kaj je Luhnov algoritem?
Luhnov algoritem, imenovan tudi algoritem mod 10, je formula za preverjanje, ali bi bil niz števk lahko veljavna identifikacijska številka. Uporablja se za odkrivanje tipkarskih napak v številkah kreditnih kartic, številkah IMEI v telefonih in drugih identifikacijskih kodah, preden povzročijo napako. Inženir pri IBM Hans Peter Luhn je metodo opisal v patentu, vloženem leta 1954.
Algoritem ne dokazuje, da je številka resnična ali aktivna. Potrdi le, da števke sledijo pričakovanemu vzorcu. Številka kartice lahko prestane Luhnovo preverjanje, vendar je še vedno ponarejena, potekla ali brez kritja.
Kako izračunati Luhnovo kontrolno vsoto
Preverjanje se izvede nad števkami številke, prebranimi od desne proti levi.
- Začnite z drugo števko z desne in podvojite vsako drugo števko.
- Če pri podvojitvi števke dobite število, večje od 9, od njega odštejte 9. (To je enako seštevanju obeh števk dobljenega rezultata, zato 16 postane 1 + 6 = 7 oziroma enakovredno 16 − 9 = 7.)
- Seštejte vse števke: podvojene števke po prilagoditvi in števke, ki so ostale nespremenjene.
- Če je skupna vsota deljiva z 10, je številka veljavna. Sicer je neveljavna.
Ko podjetje izda nove identifikacijske številke, uporabi iste korake v obratnem vrstnem redu. Izbere vse števke razen zadnje, izvede preverjanje in nato izbere končno »kontrolno števko«, tako da je skupna vsota deljiva z 10.
Primer izračuna: preverjanje številke kartice
Vzemimo preizkusno številko 4532015112830366.
- Števke od desne proti levi: 6, 6, 3, 0, 3, 8, 2, 1, 1, 5, 1, 0, 2, 3, 5, 4
- Podvojite vsako drugo števko: 6, 12, 3, 0, 3, 16, 2, 2, 1, 10, 1, 0, 2, 6, 5, 8
- Od vsakega rezultata, večjega od 9, odštejte 9: 6, 3, 3, 0, 3, 7, 2, 2, 1, 1, 1, 0, 2, 6, 5, 8
- Seštejte jih: 6+3+3+0+3+7+2+2+1+1+1+0+2+6+5+8 = 50
- 50 je deljivo z 10, zato je številka veljavna.
Primer izračuna: neveljavna številka
Vzemimo 490154203237517, 15-mestno številko v obliki, ki se uporablja pri številkah IMEI.
Enaki koraki dajo vsoto 59. Ker 59 ni deljivo z 10, je ta številka neveljavna.
Če jo želimo spremeniti v veljavno številko, je treba spremeniti le zadnjo števko. Preizkus vseh možnih zadnjih števk pokaže, da končna števka 8 poveča vsoto na 60, ki je deljiva z 10. Zato je 490154203237518 veljavna Luhnova številka, vse druge zadnje števke od 0 do 9 (razen 8) pa ustvarijo neveljavno številko.
Kako uporabljati ta kalkulator
Kalkulator ima dva načina, ki ju izberete z gumboma za dejanja.
Preverjanje preveri številko med vnašanjem. Pritisk gumba ni potreben. Rezultat se prikaže takoj, ko polje vsebuje števke, razčlenitev po korakih pod njim pa navede vsako števko, vrednost, ki jo prispeva po podvojitvi in zmanjšanju, ter skupno vsoto.
Ustvarjanje sestavi številko, ki prestane preverjanje. Vse števke, ki so že v polju, ostanejo na začetku nove številke. Kalkulator preostanek zapolni z naključnimi števkami in doda kontrolno števko. Rezultat ima 16 števk, kar je dolžina običajne številke plačilne kartice, razen če so vnesene števke že dolge 16 ali več; v tem primeru je rezultat za eno števko daljši od vnesenega .
Presledki, vezaji in pike v vnosu se prezrejo, zato se »4532 0151 1283 0366« in »4532-0151-1283-0366« prebereta enako kot gole števke. Vsak drug znak, na primer črka, je zavrnjen s sporočilom o napaki.
Kje se uporablja Luhnov algoritem
- Plačilne kartice. Visa, Mastercard, American Express in druga plačilna omrežja oblikujejo številke kartic tako, da celotna številka prestane Luhnovo preverjanje. Plačilni obrazci lahko tako zaznajo napačno vneseno števko, še preden vzpostavijo stik z obdelovalcem plačil.
- Številke IMEI. Identifikator s 15 števkami, dodeljen telefonom in drugim mobilnim napravam, vključuje Luhnovo kontrolno števko.
- Kanadske številke socialnega zavarovanja. Kanadska SIN z 9 števkami uporablja isto preverjanje.
- Ameriški nacionalni identifikator zdravstvenega izvajalca (NPI). Zdravstveni izvajalci v Združenih državah prejmejo NPI z 10 števkami, preverjen z Luhnovim preverjanjem.
Česa Luhnov algoritem ne zazna
Algoritem vedno zazna eno samo napačno vneseno števko, ne glede na to, katera števka je to ali kje se pojavi. Zazna tudi vsako zamenjavo sosednjih števk (na primer vnos »39« namesto »93«), razen v enem posebnem primeru: zamenjave sosednjih števk 0 in 9, na primer »09« postane »90«.
Prav tako ne zazna treh napak zamenjave ponovljenega para, pri katerih je ponovljeni par števk nadomeščen z drugim ponovljenim parom: 22 prebran kot 55, 33 prebran kot 66 in 44 prebran kot 77. Ker so te vrzeli znane in omejene, je Luhnovo preverjanje zanesljivo za odkrivanje običajnih tipkarskih napak, vendar se samo po sebi ne šteje za popoln sistem za zaznavanje napak.
Luhn ni varnostno preverjanje
Luhn je bil zasnovan za odkrivanje nenamernih napak pri vnosu podatkov, ne za preprečevanje goljufij. Številka, ki prestane preverjanje, je le matematično pravilno oblikovana. Resnična varnost plačil je odvisna od drugih ravni, dodanih po Luhnovem preverjanju, kot so koda CVV na kartici, preverjanje naslova in preverjanje pristnosti 3-D Secure. Luhn je preprosto prvi in najcenejši filter, ki se izvede pred temi počasnejšimi preverjanji.
Preverjanje številke 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}
18Zaščita pred praznim vnosom je pomembna: prazni niz ima vsoto števk 0, 0 pa je
deljivo z 10, zato bi brez te zaščite funkcija prazni vnos napačno razglasila za
veljavno številko. Če želite namesto preverjanja poiskati kontrolno števko, izvedite isto zanko
nad števkami pred kontrolno števko, vendar začnite podvajati pri njihovi zadnji števki,
nato pa uporabite (10 - sum % 10) % 10.
Pogosta vprašanja
Za kaj se uporablja Luhnov algoritem?
Preverja, ali je identifikacijska številka, na primer številka kreditne kartice, številka IMEI ali kanadska SIN, notranje skladna. Zazna napačno vnesene ali zamenjane števke, preden povzročijo napako pri obdelavi.
Kako natančen je Luhnov algoritem pri odkrivanju napak?
Zazna vsako posamezno napačno vneseno števko in skoraj vsak primer zamenjave dveh sosednjih števk. Edina zamenjava, ki je ne zazna, sta sosednji števki 0 in 9. Prav tako ne zazna treh posebnih zamenjav ponovljenih parov: 22 namesto 55, 33 namesto 66 in 44 namesto 77.
Ali veljavna Luhnova številka pomeni, da je kartica resnična?
Ne. Preverjanje potrdi le, da se števke ujemajo s pričakovanim vzorcem. Ne pove ničesar o tem, ali kartica obstaja, je aktivna ali ima kritje. Podjetja za to dodajo ločena preverjanja, na primer kodo CVV.
Ali je Luhnovo preverjanje mogoče izvesti brez računalnika?
Da. Potrebne so le operacije podvajanja, odštevanja in seštevanja, zato ga je mogoče izvesti ročno ali s preprostim kalkulatorjem. To je bil del prvotne zasnove za obdobje luknjanih kartic, preden so bili digitalni računalniki razširjeni.
Ali so ustvarjene številke resnične številke kartic?
Ne. Ustvarjalnik proizvaja le nize števk, ki prestanejo Luhnovo preverjanje. Namenjene so preizkušanju vnosnih obrazcev. Nobena banka jih ni izdala in z njimi ni mogoče plačevati.
Zakaj se imenuje algoritem mod 10?
Ker zadnji korak preveri, ali je vsota brez ostanka deljiva z 10, kar se v matematiki zapiše kot »sum mod 10 = 0«. »Mod« je okrajšava za modulo, ostanek, ki ostane po deljenju.
Kdo je izumil Luhnov algoritem?
Hans Peter Luhn, inženir pri IBM, ga je opisal v patentni prijavi, vloženi leta 1954 (podeljeni leta 1960 kot ameriški patent 2.950.048). Znan je tudi po zgodnjem delu na računalniškem indeksiranju besedil.