Programozó versenyek

Magas szintű programozási nyelvek 2, 2015. január 5., H13 ZH

2015. január 5. 13:20 – 2015. január 5. 16:20

Bankkártyaszám

A bankkártyaszám egy 16 tagból álló számsor, melynek első tagja az iparág-azonosító. Így például a 3-mal kezdődnek bizonyos hitelkártyák, mint például az American Express, 4-gyel, illetve 5-tel az általános banki tranzakcióknál és vásárlásoknál használt kártyák, mint a Visa vagy a Mastercard. Az első hat szám (beleértve az előbb említett legelsőt is) a kibocsátónak az azonosítója, míg a rákövetkező, 7–15. pozícióban szereplő, véletlenszerűen generált számok a tulajdonos azonosítására alkalmasak. A számsor utolsó tagja a Luhn-algoritmus kiegészítő, ellenőrző tagja.

A Luhn-algoritmussal lehet tesztelni – többek között – egy bankkártyaszám érvényességét. Az algoritmus lépései a következők:

  1. A legjobboldalibb számjegytől (amely, ugye, az ellenőrző számjegy) bal felé haladva kétszerezzük meg minden második számjegy értékét! Ha a kétszeres szorzat értéke nagyobb 9-nél, akkor összegezzük a szorzat számjegyeit, és ezzel helyettesítsük az eredeti számjegyet! (Ez utóbbi értéket úgy is megkaphatjuk, ha a 9-nél nagyobb számból kivonunk 9-et.)
  2. Adjuk össze az átalakított számsorozat számjegyeit!
  3. Ha az összeg 0-ra végződik, azaz osztható 10-zel, akkor a számsorozat érvényes, egyébként érvénytelen.
Példa számítás egy érvényes bankkártyaszámra
Bankkártyaszám 5 4 2 5 9 0 3 1 4 2 6 5 7 3 5 3
Megduplázott páros pozíciók 10 4 4 5 18 0 6 1 8 2 12 5 14 3 10 3
Számjegyek összege 1 4 4 5 9 0 6 1 8 2 3 5 5 3 1 3 =60

Írjon programot, amely a standard bemenetről soronként egy-egy 16 karakter hosszúságú, kizárólag számjegy karakterekből álló sztringet olvas be állományvégjelig! A program minden egyes beolvasott sztringről döntse el, hogy az érvényes bankkártyaszám-e, és ha igen, akkor egy „YES”, egyébként pedig egy „NO” szót tartalmazó sort írjon a standard kimenetre!

Példa bemenet

  1. 5425903142657353
  2. 5425903142657354
letöltés szöveges állományként

A példa bemenethez tartozó kimenet

  1. YES
  2. NO
letöltés szöveges állományként
Debreceni Egyetem, Informatikai Kar, v. 2019.03.01.