Luhn

Luhn

Közepes

Bevezetés

A Global Verification Authority nemrég egy kritikus megbízással bízott meg. A városban mindenhol, az online vásárlásoktól a biztonságos bejelentkezésekig, számtalan művelet támaszkodik olyan numerikus azonosítók pontosságára, mint a hitelkártyaszámok, a bankszámlaszámok, a tranzakciós kódok és a követési azonosítók. A Luhn-algoritmus egy egyszerű ellenőrzőösszeg-képlet, amely segít felismerni az elgépelt számokat.

Éppen most érkezett egy adag azonosító az asztalodra. Mindegyiknek át kell mennie a Luhn-teszten, hogy igazoljuk, valódiak. Ha valamelyik nem felel meg, érvénytelenként jelölik meg, így elkerülhetők az olyan hibák, mint a téves tranzakciók vagy a sikertelen számlaellenőrzések.

Gondoskodsz róla, hogy ez rendben megtörténjen? Számos szolgáltatás integritása múlik rajtad.

Utasítások

Állapítsd meg, hogy egy szám érvényes-e a Luhn-formula szerint.

A számot stringként kapod meg.

Egy szám érvényesítése

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 más nem számjegy karakter nem megengedett.

Példák

Érvényes hitelkártyaszám

Az ellenőrizendő szám a 4539 3195 0343 6467.

A Luhn-algoritmus első lépése, hogy a szám végéről indulva megduplázzuk minden második számjegyet, a jobbról számított második számjeggyel kezdve, balra haladva.

4539 3195 0343 6467
↑ ↑  ↑ ↑  ↑ ↑  ↑ ↑  (double these)

Ha egy számjegy megduplázásának eredménye nagyobb, mint 9, akkor az eredményből kivonunk 9-et. Végül ezt kapjuk:

8569 6195 0383 3437

Végül összeadjuk az összes számjegyet. Ha az összeg maradék nélkül osztható 10-zel, akkor az eredeti szám érvényes.

8 + 5 + 6 + 9 + 6 + 1 + 9 + 5 + 0 + 3 + 8 + 3 + 3 + 4 + 3 + 7 = 80

A 80 maradék nélkül osztható 10-zel, tehát a 4539 3195 0343 6467 szám érvényes!

Érvénytelen kanadai SIN

Az ellenőrizendő szám a 066 123 478.

A szám végéről indulunk, és megduplázzuk minden második számjegyet, a jobbról számított második számjeggyel kezdve, balra haladva.

066 123 478
 ↑  ↑ ↑  ↑  (double these)

Ha egy számjegy megduplázásának eredménye nagyobb, mint 9, akkor az eredményből kivonunk 9-et. Végül ezt kapjuk:

036 226 458

Összeadjuk a számjegyeket:

0 + 3 + 6 + 2 + 2 + 6 + 4 + 5 + 8 = 36

A 36 nem osztható maradék nélkül 10-zel, tehát a 066 123 478 szám nem érvényes!

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Factor Exercism

Készen állsz elkezdeni a(z) Luhn feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Factor nyelvet 47 fogalom163 feladat segítségével, valódi emberi mentorálással, mindez ingyen.

Mélyelemzés: Luhn!

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!