Programozó versenyek

Magas szintű programozási nyelvek 1, egyéni verseny, 2015. április 12.

2015. április 12. 10:00 – 2015. április 12. 15:00

Hitelkártyaszámok

Manapság mindennapos dologgá vált hitelkártyával fizetni internetes vásárlások után. Mivel azonban a hitelkártyaszámok viszonylag hosszúak, könnyű elrontani őket a begépelésükkor. Hogy gyorsan felismerhetők legyenek az elgépelésből eredő hibák, a legtöbb e-kereskedelemmel foglalkozó weboldal valamilyen ellenőrző összegen alapuló algoritmust használ a hitelkártyaszámok ellenőrzésére.

Ilyen például a népszerű Luhn-algoritmus, amely képes felismerni az egyjegyű hibákat, valamint több gyakori többjegyű hibát is:

  1. Az utolsó előtti számjegytől kezdve, visszafelé haladva duplázzuk meg minden második számjegyet.
  2. Adjuk össze az így kapott számok számjegyeit, majd adjuk hozzá az eredményhez az eredeti kártyaszámban található meg nem duplázott számjegyek összegét.
  3. Ha a végösszeg 0-ra végződik, a hitelkártyaszám érvényes, különben érvénytelen.

Vegyük például az 5181 2710 9900 0012 számot:

  1. Megduplázva a megfelelő számjegyeket (5181 2710 9900 0012) az alábbi értékeket kapjuk: 10, 16, 4, 2, 18, 0, 0, 2.
  2. Ha összeadjuk ezen értékek számjegyeit, az eredmény (1+0) + (1+6) + 4 + 2 + (1+8) + 0 + 0 + 2 = 25. A meg nem duplázott számjegyek összege 1+1+7+0+9+0+0+2 = 20, a végösszeg tehát 20+25=45.
  3. A 45 nem 0-ra végződik, ez a kártyaszám tehát érvénytelen.

Ebben a feladatban egy olyan programot kell írnod, amely hitelkártyaszámok érvényességét ellenőrzi a Luhn-algoritmus segítségével.

A bemenet specifikációja

A bemenet egy N egész számmal kezdődik, amelyet N sor követ, mindegyikben egy-egy hitelkártyaszámmal. Minden hitelkártyaszám 16 decimális számjegyből áll, négyesével csoportosítva, a csoportokat egy-egy szóközzel elválasztva.

A kimenet specifikációja

Minden hitelkártyaszámra egy sort kell a kimenetre írni, amely a „Valid” sztringet tartalmazza, ha a kártyaszám érvényes, különben pedig az „Invalid” sztringet.

Példa bemenet

  1. 2
  2. 5181 2710 9900 0012
  3. 5181 2710 9900 0017
letöltés szöveges állományként

A példa bemenethez tartozó kimenet

  1. Invalid
  2. Valid
letöltés szöveges állományként
Debreceni Egyetem, Informatikai Kar, v. 2024.09.30.