Algoritmo de Luhn
![](http://178.128.105.246/cars-http-upload.wikimedia.org/wikipedia/commons/thumb/4/41/Napis_na_voze_20080506.jpg/220px-Napis_na_voze_20080506.jpg)
La Algoritmo de Luhn aŭ formulo de Luhn, ankaŭ konata kiel algoritmo "modulo 10" aŭ "mod 10", nomita laŭ ĝia kreinto, Hans Peter Luhn inĝeniero ĉe IBM, estas simpla kontrolcifera formulo uzata por validigi diversajn identigajn numerojn, kiel tiujn de kreditkartoj, poŝtelefonoj (numeroj IMEI, SIM-kartoj), malsanokosta asekuro en Usono, Kanado, Grekio, k.a., identigaj numeroj de Sud-Afriko, de Israelo kaj enketaj kodoj aperantaj sur kvitancoj de McDonald's, Taco Bell kaj Tractor Supply. Ĝi estas priskribita en la usona patento n-ro 2.950.048, prezentita la 6-an de januaro 1954 kaj atribuita la 23-an de aŭgusto 1960.
Algoritmo
[redakti | redakti fonton]Priskribo
[redakti | redakti fonton]La algoritmo procedas en tri etapoj.
- La algoritmo multobligas per du ĉiun duan ciferon, komencante per la antaŭlasta kaj irante de dekstre maldekstren. Se la duoblo de cifero estas pli granda ol naŭ (ekzemple 2 × 8 = 16), tiam ĝi devas esti reduktita al cifero inter 1 kaj 9 prenante ĝian reston en la eŭklida divido per 9. Estas 2 manieroj fari ĉi tion (por la sama rezulto):
- Aŭ ni adicias la ciferojn konsistigantajn la duoblon. En la ekzemplo de la cifero 8, 2 × 8 = 16, tiam ni adicias la ciferojn 1 + 6 = 7.
- Aŭ ni subtrahas 9 de la duoblo. Kun la sama ekzemplo, 16 - 9 = 7.
- La sumo de ĉiuj akiritaj ciferoj estas farita.
- La rezulto estas dividita per 10. Se la resto de la divido estas nul, tiam la originala nombro validas.
Ekzemplo
[redakti | redakti fonton]Ni konsideru la identigon de la numero 972-487-086. La unua etapo estas duobligi ĉiun duan ciferon de la antaŭlasta ĝis la komenco, kaj adicii ĉiujn ciferojn, duobligitajn aŭ ne (se cifero estas pli granda ol 9, ni subtrahas 9, do la 3-a linio). La sekva tabelo montras ĉi tiun etapon (koloraj linioj indikas duobligitajn ciferojn):
Ciferoj | Sumo | ||||||||
---|---|---|---|---|---|---|---|---|---|
9 | 7 | 2 | 4 | 8 | 7 | 0 | 8 | 6 | |
9 | 14 | 2 | 8 | 8 | 14 | 0 | 16 | 6 | |
9 | 5 | 2 | 8 | 8 | 5 | 0 | 7 | 6 | 50 |
La sumo, egala al 50, estas dividita per 10: la resto estas 0, do la nombro validas.
Se erare oni inversigis du ciferojn, la kontrolcifero de Luhn fariĝas malĝusta (krom se ĉi tiuj du ciferoj estas 0 kaj 9):
Ciferoj | Sumo | ||||||||
---|---|---|---|---|---|---|---|---|---|
9 | 2 | 7 | 4 | 8 | 7 | 0 | 8 | 6 | |
9 | 4 | 7 | 8 | 8 | 14 | 0 | 16 | 6 | |
9 | 4 | 7 | 8 | 8 | 5 | 0 | 7 | 6 | 54 |
La sumo ne estas dividebla per 10 do la nombro ne validas.