Luhni algoritmi kalkulaator - Krediitkaardi ja IMEI kontrollimine
Tasuta Luhni mod 10 kalkulaator krediitkaardi valideerimiseks, IMEI kontrollimiseks ja ID tõendamiseks. Kontrollige numbreid koheselt või genereerige testnumbreid veebis.
Luhni algoritmi kalkulaator
Kontrollige, kas teie number läbib Luhni mod 10 valideerimise
Dokumentatsioon
Mis on Luhni algoritm?
Luhni algoritm, mida nimetatakse ka mod 10 algoritmiks, on valem, millega kontrollitakse, kas numbrijada võiks olla kehtiv identifitseerimisnumber. Seda kasutatakse krediitkaardinumbrite, telefonide IMEI-numbrite ja muude tunnuskoodide sisestusvigade tuvastamiseks enne, kui need põhjustavad tõrke. IBMi insener Hans Peter Luhn kirjeldas seda meetodit patendis, mille taotlus esitati aastal 1954.
Algoritm ei tõesta, et number on päris või aktiivne. See kinnitab ainult, et numbrid järgivad eeldatud mustrit. Kaardinumber võib Luhni kontrolli läbida, kuid olla siiski võlts, aegunud või kasutamata vahenditega.
Kuidas arvutada Luhni kontrollsummat
Kontroll tehakse numbri numbrite põhjal, lugedes neid paremalt vasakule.
- Alustades paremalt teisest numbrist, kahekordista üle ühe iga numbrit.
- Kui numbri kahekordistamisel saadakse 9-st suurem arv, lahuta sellest 9. (See on sama mis tulemuse kahe numbri liitmine, seega 16 muutub kujule 1 + 6 = 7 või samaväärselt 16 − 9 = 7.)
- Liida kokku kõik numbrid: nii kahekordistatud numbrid pärast korrigeerimist kui ka muutmata jäänud numbrid.
- Kui kogusumma jagub 10-ga, on number kehtiv. Vastasel juhul on see kehtetu.
Kui ettevõte väljastab uusi tunnusnumbreid, kasutab ta samu samme vastupidises järjekorras. Ta valib kõik numbrid peale viimase, teeb kontrolli ja valib seejärel viimase kontrollnumbri nii, et kogusumma jaguks 10-ga.
Läbitöötatud näide: kaardinumbri valideerimine
Võtame testarvu 4532015112830366.
- Numbrid paremalt vasakule: 6, 6, 3, 0, 3, 8, 2, 1, 1, 5, 1, 0, 2, 3, 5, 4
- Kahekordista iga teist numbrit: 6, 12, 3, 0, 3, 16, 2, 2, 1, 10, 1, 0, 2, 6, 5, 8
- Lahuta 9 igast tulemusest, mis on suurem kui 9: 6, 3, 3, 0, 3, 7, 2, 2, 1, 1, 1, 0, 2, 6, 5, 8
- Liida need kokku: 6+3+3+0+3+7+2+2+1+1+1+0+2+6+5+8 = 50
- 50 jagub 10-ga, seega on number kehtiv.
Läbitöötatud näide: kehtetu number
Võtame numbri 490154203237517, 15-kohalise arvu IMEI-numbrite kasutatavas vormingus.
Samade sammude tegemisel saadakse summaks 59. Kuna 59 ei jagu 10-ga, on see number kehtetu.
Selle kehtivaks muutmiseks tuleb muuta ainult viimast numbrit. Kõigi võimalike viimaste numbrite katsetamine näitab, et viimane number 8 annab summaks 60, mis jagub 10-ga. Seega on 490154203237518 kehtiv Luhni number, samas kui kõik muud viimased numbrid 0 kuni 9 (välja arvatud 8) annavad kehtetu numbri.
Kuidas seda kalkulaatorit kasutada
Kalkulaatoril on kaks režiimi, mida saab valida toimingunuppudega.
Validate kontrollib sisestatud numbrit. Nuppu pole vaja vajutada. T ulemus kuvatakse kohe, kui väljal on numbrid, ja selle all olev üksikasjalik jaotus loetleb iga numbri, selle panuse pärast kahekordistamist ja korrigeerimist ning kogusumma.
Generate koostab kontrolli läbiva numbri. Kõik juba väljal olevad numbrid säilitatakse uue numbri algusena. Kalkulaator täidab ülejäänud osa juhuslike numbritega ja lisab kontrollnumbri. Tulemuses on 16 numbrit, mis vastab tüüpilise maksekaardinumbri pikkusele, välja arvatud juhul, kui sisestatud numbrid on juba vähemalt 16 numbrit pikad; sel juhul on tulemus sisendist ühe numbri võrra pikem.
Sisendis olevad tühikud, sidekriipsud ja punktid jäetakse tähelepanuta, seega loetakse „4532 0151 1283 0366” ja „4532-0151-1283-0366” samamoodi nagu paljaid numbreid. Kõik muud märgid, näiteks tähed, lükatakse veateatega tagasi.
Kus Luhni algoritmi kasutatakse
- Maksekaardid. Visa, Mastercard, American Express ja muud maksevõrgud koostavad kaardinumbrid nii, et kogu number läbiks Luhni kontrolli. Kassavormid saavad selle abil tuvastada valesti sisestatud numbri enne makseteenuse töötleja poole pöördumist.
- IMEI-numbrid. Telefonidele ja muudele mobiilseadmetele määratud 15-kohaline tunnus sisaldab Luhni kontrollnumbrit.
- Kanada sotsiaalkindlustusnumbrid. 9-kohalises SIN-is kasutatakse sama kontrolli.
- USA riiklik teenuseosutaja tunnus (NPI). Ameerika Ühendriikide tervishoiuteenuse osutajad saavad 10-kohalise NPI, mille puhul kasutatakse Luhni algoritmil põhinevat kontrollsummat.
Mida Luhni algoritm ei tuvasta
Algoritm tuvastab alati ühe valesti sisestatud numbri, olenemata sellest, milline number see on või kus see paikneb. Samuti tuvastab see kõik kõrvutiste numbrite vahetamised (näiteks „39” sisestamise „93” asemel), välja arvatud ühe konkreetse juhu: kõrvuti asuvate 0 ja 9 vahetamine, näiteks „09” muutmine kujule „90”.
Samuti ei tuvasta see kolme „kaksikviga”, mille korral korduv numbripaar asendatakse teise korduva paariga: 22 loetakse kui 55, 33 loetakse kui 66 ja 44 loetakse kui 77. Kuna need piirangud on teada ja kitsalt määratletud, sobib Luhni kontroll tavaliste sisestusvigade tuvastamiseks, kuid seda ei käsitleta iseseisva täieliku veatuvastussüsteemina.
Luhn ei ole turvakontroll
Luhn loodi juhuslike andmesisestusvigade, mitte pettuse tuvastamiseks. Kontrolli läbinud number on matemaatiliselt korrektne, ei midagi enamat. Tegelik makseturvalisus sõltub pärast Luhni kontrolli lisanduvatest kihtidest, näiteks kaardi CVV-koodist, aadressi kontrollimisest ja 3-D Secure’i autentimisest. Luhn on lihtsalt esimene ja odavaim filter, mida rakendatakse enne neid aeglasemaid kontrolle.
Numbri valideerimine JavaScriptis
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}
18Tühja sisendi kontroll on oluline: tühja sõne numbrisumma on 0 ja 0
jagub 10-ga, mistõttu loeks funktsioon ilma selle kontrollita täiesti tühja sisendi
kehtivaks numbriks. Kontrollnumbri testimise asemel selle leidmiseks käivita sama tsükkel
kontrollnumbrile eelnevate numbrite kohal, alustades kahekordistamist nende viimase
numbri juurest, seejärel arvuta (10 - sum % 10) % 10.
Korduma kippuvad küsimused
Milleks Luhni algoritmi kasutatakse?
See kontrollib, kas identifitseerimisnumber, näiteks krediitkaardinumber, IMEI-number või Kanada SIN, on sisemiselt kooskõlaline. See tuvastab valesti sisestatud või ümber paigutatud numbrid enne, kui need põhjustavad töötlemisvea.
Kui täpselt tuvastab Luhni algoritm vigu?
See tuvastab iga üksiku valesti sisestatud numbri ja peaaegu kõik juhud, kus kaks kõrvutist numbrit on vahetatud. Ainus vahetamine, mida see ei tuvasta, on kõrvuti asuvate 0 ja 9 vahetamine. Samuti ei tuvasta see kolme kindlat „kaksikasendust”: 22 asemel 55, 33 asemel 66 ja 44 asemel 77.
Kas kehtiv Luhni number tähendab, et kaart on päris?
Ei. Kontroll kinnitab ainult, et numbrid sobivad eeldatud mustriga. See ei ütle midagi selle kohta, kas kaart on olemas, aktiivne või rahaliste vahenditega. Ettevõtted kasutavad selleks eraldi kontrolle, näiteks CVV-koodi kontrolli.
Kas Luhni kontrolli saab teha arvutita?
Jah. Selleks on vaja ainult kahekordistamist, lahutamist ja liitmist, seega saab seda teha käsitsi või lihtsa kalkulaatoriga. See oli algse kavandi osa ja mõeldud perfokaartide ajastusse, mil digitaalarvutid polnud veel laialt levinud.
Kas genereeritud numbrid on päris kaardinumbrid?
Ei. Generaator koostab ainult numbrijadasid, mis läbivad Luhni kontrolli. Need on mõeldud sisestusvormide testimiseks. Ükski pank ei ole neid väljastanud ja neid ei saa millegi eest tasumiseks kasutada.
Miks nimetatakse seda mod 10 algoritmiks?
Sest viimases etapis kontrollitakse, kas summa jagub jäägita 10-ga; matemaatikas kirjutatakse see kujul „sum mod 10 = 0”. „Mod” on lühend sõnast modulo, mis tähendab pärast jagamist järele jäävat jääki.
Kes leiutas Luhni algoritmi?
IBMi insener Hans Peter Luhn kirjeldas seda patenditaotluses, mis esitati aastal 1954 (patent anti aastal 1960 kui USA patent 2 950 048). Teda tuntakse ka arvutipõhise teksti indekseerimise varase arendajana.