Lūna algoritms

Lūna algoritms (, ) jeb Lūna formula (, ) ir vienkārša kontrolsummas formula, ko izmanto, lai pārbaudītu dažādu identifikācijas numuru korektumu. To izmanto, piemēram, maksājumu karšu numuros un IMEI numuros. To radīja IBM zinātnieks Hanss Peters Lūns un to apraksta ASV patents nr. 2950048, pieteikts 1954. gada 6. janvārī, piešķirts 1960. gada 23. augustā.

Algoritms ir neaizsargāts darbs un tiek plaši izmantots arī mūsdienās. Tas nav paredzēts izmantošanai kriptogrāfijā, jo tika izstrādāts, lai aizsargātos pret nejaušām kļūdām, nevis ļaunprātīgiem uzbrukumiem.

 Apraksts 
Formula pārbauda skaitli pret tajā iekļautu kontrolciparu, kas parasti tiek pievienots galā daļējam konta numuram, tādējādi izveidojot pilnu konta numuru. Konta numuram ir jāiztur sekojoša pārbaude:

 No labējā cipara, kas ir kontrolcipars, pārvietojoties pa kreisi, dubulto katra otrā cipara vērtību; ja šīs darbības rezultāts ir lielāks par 9 (piemēram, 8 × 2 = 16), saskaita rezultāta skaitļa abus ciparus (piemēram, 16: 1 + 6 = 7, 18: 1 + 8 = 9).
 Saskaita visus ciparus.
 Ja šīs summas dalījuma ar 10 atlikums ir 0, skaitlis pēc Lūna formulas ir korekts, pretējā gadījumā - nav korekts.

Pieņemsim, ka mums ir konta numurs "7992739871", kuram galā vajag pievienot kontrolciparu, izveidojot galīgo konta numuru pēc šablona 7992739871x.

 Konta numurs 7 9 9 2 7 3 9 8 7 1 x Dubultojam katru otro 7 18 9 4 7 6 9 16 7 2 - Skaitļu summa7994769772=67

Kontrolcipars (x) atbilst dalīšanas ar 10 atlikumam no skaitļu summas, reizinātas ar 9. Tātad, pēc piemēra, 67 × 9 mod 10 = 3, iegūstam galīgo konta numuru "79927398713". Alternatīva metode ir paņemt summas skaitļa (67) labējo ciparu (7) un atņemt to no 10: 10 - 7 = 3.

 Implementācijas 
 C implementācija
 PHP implementācija
 JavaScript implementācija 

Kategorija:Algoritmi