Algoritmo de Luhn

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  kaj atribuita la .

 Algoritmo 
 Priskribo 
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 
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 Sumo9  7  2  4  8  7  0  8  69  14  2  8  8  14  0  16  69  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 Sumo9      4  8  7  0  8  69      8  8  14  0  16  69      8  8  5  0  7  6  
La sumo ne estas dividebla per 10 do la nombro ne validas.

 Vidu ankaŭ 
 PESEL
 UIC-Landokodoj

Kategorio:Teoria komputiko
Kategorio:Aŭtentigaj sistemoj