Luhnin algoritmi
Luhnin algoritmi on yksinkertainen tarkistussumman laskemiseen käytetty kaava, jota käytetään varmistamaan erilaisia tunnistenumeroita kuten luottokortti- ja IMEI-numeroita. Algoritmin loi IBM:n tutkija Hans Peter Luhn, joka jätti patenttihakemuksen algoritmista 6. tammikuuta 1954. Patentti myönnettiin 23. elokuuta 1960.
Algoritmi on public domainia, ja sitä käytetään tunnistamaan tahattomat numerosarjassa olevat virheet; algoritmia ei ole suunniteltu suojaamaan tahallista hyökkäystä vastaan.
Tarkistusnumeron laskeminen
[muokkaa | muokkaa wikitekstiä]Algoritmi varmistaa numeronsarjan oikeellisuuden erityisen tarkistusnumeron avulla. Yleensä tarkistusnumero liitetään varsinaisen numerojonon perään, jolloin ne yhdessä muodostavat halutun numerosarjan.
Tarkistusnumero lasketaan seuraavasti:
- Alkaen oikealta vasemmalle, kerrotaan järjestyksessä parittomat luvut kahdella ja parilliset yhdellä
- Summataan saatujen tulojen yksittäiset numerot yhteen (16 => 1 + 6 = 7)
- Tarkistusnumero on kokonaisluku, joka pitää lisätä saatuun summaan, jotta se olisi tasan kymmenellä jaollinen
Numerosarja | 2 | 6 | 0 | 5 | 3 | 1 | 7 | 9 | 3 | 1 | 1 | 3 | 8 | 3 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Kerroin | x2 | x2 | x2 | x2 | x2 | x2 | x2 | ||||||||
Tulo | 2 | 12 | 0 | 10 | 3 | 2 | 7 | 18 | 3 | 2 | 1 | 6 | 8 | 6 | |
Summaus | 2+ | 1+2+ | 0+ | 1+0+ | 3+ | 2+ | 7+ | 1+8+ | 3+ | 2+ | 1+ | 6+ | 8+ | 6 | =53 |
Tässä tapauksessa tarkistusnumero on seitsemän ja koko numerosarja 260531793113837.
Numerosarjan tarkistaminen
[muokkaa | muokkaa wikitekstiä]Annettu numerosarja tarkistetaan seuraavasti:
- Alkaen oikealta vasemmalle, kerrotaan järjestyksessä parittomat luvut yhdellä ja parilliset kahdella
- Summataan saatujen tulojen yksittäiset numerot yhteen (16 => 1 + 6 = 7)
- Jos saatu summa on tasan jaollinen kymmenellä, numerosarja on todennäköisesti virheetön
Numerosarja | 2 | 6 | 0 | 5 | 3 | 1 | 7 | 9 | 3 | 1 | 1 | 3 | 8 | 3 | 7 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Kerroin | x2 | x2 | x2 | x2 | x2 | x2 | x2 | |||||||||
Tulo | 2 | 12 | 0 | 10 | 3 | 2 | 7 | 18 | 3 | 2 | 1 | 6 | 8 | 6 | 7 | |
Summaus | 2+ | 1+2+ | 0+ | 1+0+ | 3+ | 2+ | 7+ | 1+8+ | 3+ | 2+ | 1+ | 6+ | 8+ | 6+ | 7 | =60 |