Adott egy szám. Döntsd el, hogy a Luhn-formula szerint érvényes-e vagy sem.
A Luhn-algoritmus egy egyszerű ellenőrzőösszeg-formula, amelyet különféle azonosítószámok érvényesítésére használnak, például hitelkártyaszámokéra és a kanadai társadalombiztosítási számokéra.
A feladat annak ellenőrzése, hogy egy adott string érvényes-e.
Az 1 vagy annál rövidebb stringek nem érvényesek. A bemenetben megengedettek a szóközök, de az ellenőrzés előtt el kell távolítani őket. Minden egyéb, nem számjegyből álló karakter tilos.
4539 3195 0343 6467
A Luhn-algoritmus első lépése, hogy minden második számjegyet megduplázunk, jobbról kezdve. Ezeket duplázzuk meg:
4539 3195 0343 6467
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ (double these)
Ha a duplázás eredménye nagyobb, mint 9, akkor vonj ki 9-et a szorzatból. A duplázás eredménye:
8569 6195 0383 3437
Ezután add össze az összes számjegyet:
8+5+6+9+6+1+9+5+0+3+8+3+3+4+3+7 = 80
Ha az összeg maradék nélkül osztható 10-zel, akkor a szám érvényes. Ez a szám érvényes!
8273 1232 7352 0569
Duplázd meg minden második számjegyet, jobbról kezdve
7253 2262 5312 0539
Add össze a számjegyeket
7+2+5+3+2+2+6+2+5+3+1+2+0+5+3+9 = 57
Az 57 nem osztható maradék nélkül 10-zel, tehát ez a szám nem érvényes.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Haskell nyelvet 107 feladat segítségével, valódi emberi mentorálással, mindez ingyen.
A Luhn 8 különböző változatát járjuk körbe: kezdjük egy nagyon letisztult Ruby-implementációval, megnézünk néhány imperatív és funkcionális megközelítést, végül egy SQLite-változattal zárunk, amelynek megfejtése Eriknek és Jeremynek is némi munkájába került!