Luhn-algoritmin Laskuri - Luottokorttien ja IMEI-numeroiden Vahvistus
Ilmainen Luhn mod 10 -laskuri luottokorttien vahvistamiseen, IMEI-tarkistuksiin ja henkilöllisyyden todentamiseen. Vahvista numerot tai luo testidataa välittömästi verkossa.
Luhn-algoritmin Laskuri
Tarkista, läpäiseekö numerosi Luhn mod 10 -vahvistuksen
Dokumentaatio
Mikä on Luhn-algoritmi?
Luhn-algoritmi, jota kutsutaan myös modulo 10 -algoritmiksi, on kaava, jolla tarkistetaan, voisiko numerosarja olla kelvollinen tunnistenumero. Sitä käytetään havaitsemaan luottokorttinumeroiden, puhelinten IMEI-numeroiden ja muiden tunnuskoodien kirjoitusvirheitä ennen kuin ne aiheuttavat virheen. IBM:n insinööri Hans Peter Luhn kuvasi menetelmän patenttihakemuksessa, joka jätettiin vuonna 1954.
Algoritmi ei todista, että numero on todellinen tai aktiivinen. Se vain vahvistaa, että numerot noudattavat odotettua kaavaa. Korttinumero voi läpäistä Luhn-tarkistuksen ja olla silti väärennetty, vanhentunut tai katteeton.
Luhn-tarkistesumman laskeminen
Tarkistus tehdään numeron numeroille lukemalla ne oikealta vasemmalle.
- Aloita oikealta toisesta numerosta ja kerro joka toinen numero kahdella.
- Jos numeron kaksinkertaistamisen tulos on suurempi kuin 9, vähennä siitä 9. (Tämä vastaa tuloksen kahden numeron yhteenlaskua, joten 16 muuttuu muotoon 1 + 6 = 7 tai vastaavasti 16 − 9 = 7.)
- Laske yhteen kaikki numerot: kaksinkertaistetut numerot korjauksen jälkeen sekä ennallaan jätetyt numerot.
- Jos kokonaissumma on jaollinen luvulla 10, numero on kelvollinen. Muussa tapauksessa se on virheellinen.
Kun yritys antaa uusia tunnistenumeroita, se käyttää samoja vaiheita käänteisessä järjestyksessä. Se valitsee kaikki numerot viimeistä lukuun ottamatta, suorittaa tarkistuksen ja valitsee sitten viimeisen ”tarkistenumeron” niin, että kokonaissumma on jaollinen luvulla 10.
korttinumeron kelvollisuuden tarkistaminen
Käytetään testinumerona 4532015112830366.
- Numerot oikealta vasemmalle: 6, 6, 3, 0, 3, 8, 2, 1, 1, 5, 1, 0, 2, 3, 5, 4
- Kaksinkertaista joka toinen numero: 6, 12, 3, 0, 3, 16, 2, 2, 1, 10, 1, 0, 2, 6, 5, 8
- Vähennä luvusta 9 kaikki tulokset, jotka ovat suurempia kuin 9: 6, 3, 3, 0, 3, 7, 2, 2, 1, 1, 1, 0, 2, 6, 5, 8
- Laske ne yhteen: 6+3+3+0+3+7+2+2+1+1+1+0+2+6+5+8 = 50
- 50 on jaollinen luvulla 10, joten numero on kelvollinen.
virheellinen numero
Käytetään lukua 490154203237517, joka on IMEI-numeroissa käytettävän muotoinen 15-numeroinen luku.
Samojen vaiheiden suorittaminen tuottaa summaksi 59. Koska 59 ei ole jaollinen luvulla 10, numero on virheellinen.
Jotta numerosta tulee kelvollinen, vain viimeinen numero täytyy vaihtaa. Kaikkien mahdollisten viimeisten numeroiden kokeileminen osoittaa, että viimeinen numero 8 kasvattaa summan arvoon 60, joka on jaollinen luvulla 10. Siksi 490154203237518 on kelvollinen Luhn-numero, kun taas kaikki muut viimeiset numerot 0–9 (lukuun ottamatta numeroa 8) tuottavat virheellisen numeron.
Laskurin käyttö
Laskurissa on kaksi tilaa, jotka valitaan Toiminto-painikkeilla.
Tarkista tarkistaa numeron kirjoittamisen aikana. Painiketta ei tarvitse painaa. Tulos näkyy heti, kun kentässä on numeroita, ja sen alla oleva vaiheittainen erittely luettelee kunkin numeron, sen kaksinkertaistamisen ja muunnoksen jälkeisen vaikutuksen sekä kokonaissumman.
Luo muodostaa tarkistuksen läpäisevän numeron. Kentässä jo olevat numerot säilytetään uuden numeron alkuna. Laskuri täyttää loput satunnaisilla numeroilla ja lisää tarkistenumeron. Tulos on 16 numeroa pitkä, mikä vastaa tavallisen maksukorttinumeron pituutta, paitsi jos annetut numerot ovat jo 16 numeroa pitkiä tai pidempiä; tällöin tulos on yhden numeron pidempi kuin annettu numero.
Syötteen välilyönnit, viivat ja pisteet ohitetaan, joten ”4532 0151 1283 0366” ja ”4532-0151-1283-0366” tulkitaan samalla tavalla kuin pelkät numerot. Kaikki muut merkit, kuten kirjaimet, hylätään virheilmoituksen kera.
Missä Luhn-algoritmia käytetään
- Maksukortit. Visa, Mastercard, American Express ja muut maksujärjestelmät muodostavat korttinumerot niin, että koko numero läpäisee Luhn-tarkistuksen. Maksulomakkeet voivat sen avulla havaita väärin kirjoitetun numeron ennen yhteydenottoa maksunkäsittelijään.
- IMEI-numerot. Puhelimille ja muille matkapuhelinverkon laitteille annettu 15-numeroinen tunniste sisältää Luhn-tarkistenumeron.
- Kanadan sosiaalivakuutusnumerot. 9-numeroinen SIN käyttää samaa tarkistusta.
- Yhdysvaltojen kansallinen terveydenhuollon palveluntarjoajan tunniste (NPI). Yhdysvaltojen terveydenhuollon palveluntarjoajille annetaan 10-numeroinen NPI, joka validoidaan Luhniin perustuvalla tarkistuksella.
Mitä Luhn-algoritmi ei havaitse
Algoritmi havaitsee aina yhden väärin kirjoitetun numeron riippumatta siitä, mikä numero on kyseessä tai missä kohdassa se esiintyy. Se havaitsee myös kaikki vierekkäisten numeroiden vaihtamiset, kuten ”39” numeron ”93” sijaan, yhtä tapausta lukuun ottamatta: vierekkäisten 0- ja 9-numeroiden vaihtamista, esimerkiksi kun ”09” muuttuu muotoon ”90”.
Se ei myöskään havaitse kolmea ”kaksoisvirhettä”, joissa toistuva numeropari korvataan toisella toistuvalla parilla: 22 tulkitaan muotoon 55, 33 tulkitaan muotoon 66 ja 44 tulkitaan muotoon 77. Koska nämä puutteet tunnetaan ja ovat rajallisia, Luhn-tarkistus soveltuu tavallisten kirjoitusvirheiden havaitsemiseen, mutta sitä ei yksinään pidetä täydellisenä virheiden havaitsemisjärjestelmänä.
Luhn-tarkistus ei ole turvatarkistus
Luhn suunniteltiin havaitsemaan tahattomia tietojensyöttövirheitä, ei petoksia. Tarkistuksen läpäisevä numero on vain matemaattisesti oikean muotoinen. Todellinen maksamisen turvallisuus perustuu muihin Luhn-tarkistuksen jälkeen lisättyihin kerroksiin, kuten kortin CVV-koodiin, osoitteen vahvistamiseen ja 3-D Secure -todennukseen. Luhn on vain ensimmäinen ja edullisin suodatin, jota käytetään ennen hitaampia tarkistuksia.
Numeron tarkistaminen JavaScriptillä
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}
18Tyhjän syötteen tarkistus on tärkeä: tyhjän merkkijonon numerolukujen summa on 0, ja 0 on
jaollinen luvulla 10, joten ilman tarkistusta funktio pitäisi mitä tahansa
kelvollisena numerona. Jos tarkistenumero halutaan löytää sen sijaan, että yksi testataan, suorita sama silmukka
tarkistenumeroa edeltäville numeroille, mutta aloita kaksinkertaistaminen niistä viimeisestä,
ja laske sitten (10 - sum % 10) % 10.
Usein kysyttyä
Mihin Luhn-algoritmia käytetään?
Sillä tarkistetaan, ovatko tunnistenumeron, kuten luottokorttinumeron, IMEI-numeron tai Kanadan SIN-numeron, numerot keskenään johdonmukaisia. Se havaitsee väärin kirjoitetut tai vaihtuneet numerot ennen kuin ne aiheuttavat käsittelyvirheen.
Kuinka tarkasti Luhn-algoritmi havaitsee virheitä?
Se havaitsee kaikki yksittäiset kirjoitusvirheet ja lähes kaikki tapaukset, joissa kaksi vierekkäistä numeroa on vaihdettu keskenään. Ainoa vaihtaminen, jota se ei havaitse, on vierekkäisten 0- ja 9-numeroiden vaihtaminen. Se ei myöskään havaitse kolmea tiettyä ”kaksoiskorvausta”: 22 luvun 55 sijaan, 33 luvun 66 sijaan ja 44 luvun 77 sijaan.
Tarkoittaako kelvollinen Luhn-numero, että kortti on aito?
Ei. Tarkistus vahvistaa vain, että numerot noudattavat odotettua kaavaa. Se ei kerro, onko kortti olemassa, aktiivinen tai katteellinen. Yritykset tekevät sitä varten erillisiä tarkistuksia, kuten CVV-koodin tarkistuksen.
Voiko Luhn-tarkistuksen tehdä ilman tietokonetta?
Kyllä. Se vaatii vain kertomista kahdella, vähennyslaskua ja yhteenlaskua, joten sen voi tehdä käsin tai yksinkertaisella laskimella. Tämä kuului alkuperäiseen suunnitteluun, joka oli tarkoitettu reikäkorttien aikakaudelle ennen digitaalisten tietokoneiden yleistymistä.
Ovatko luodut numerot oikeita korttinumeroita?
Eivät. Generaattori tuottaa vain numerosarjoja, jotka läpäisevät Luhn-tarkistuksen. Ne on tarkoitettu syöttölomakkeiden testaamiseen. Mikään pankki ei ole myöntänyt niitä, eikä niitä voi käyttää mihinkään maksamiseen.
Miksi sitä kutsutaan modulo 10 -algoritmiksi?
Koska viimeisessä vaiheessa tarkistetaan, onko summa tasan jaollinen luvulla 10, mikä kirjoitetaan matematiikassa muodossa ”summa mod 10 = 0”. ”Mod” on lyhenne sanasta modulo, joka tarkoittaa jakolaskusta jäävää jakojäännöstä.
Kuka keksi Luhn-algoritmin?
IBM:n insinööri Hans Peter Luhn kuvasi algoritmin patenttihakemuksessa, joka jätettiin vuonna 1954 (patentti myönnettiin vuonna 1960 nimellä US Patent 2 950 048). Hänet tunnetaan myös tietokoneistetun tekstin indeksoinnin varhaisesta kehitystyöstä.