Exercici per identificar la validesa dels números de tarja bancària mitjançant la rutina de Luhn

 

per Jordi Binefa

http://www.binefa.net

 

 

 

1)       Dibuixar el diàleg anomenant la classe relacionada CNum

 

 

 

 

 

 

 

 

 

 

i anomeneu la variable de la casella de l’esquerra com m_0, la següent m_1, i així fins arribar a m_15. Totes aquestes variables han de ser de tipus int i amb un valor mínim de 0 i màxim de 9.

 

2)       Crear una nova persiana al menú dit “&Número” i que pengi d’ell “&Comprova”. Amb el ClassWizard relacionar el menú amb la funció membre de la classe view onNmeroComprova().

 

3)       A la classe view introduïu una variable membre anomenada int array[15] i que el constructor de la classe l’inicialitzi amb els valors presents a la figura de la pregunta 1.

 

4)       Omple la funció onNmeroComprova() que crida el diàlog present a la classe CNum. Inicialitzant el diàleg amb els valors presents a la variable membre array. I si es selecciona OK els valors del diàleg s’han d’emmagatzemar a array, corresponent array[0] el valor de la casella de l’esquerra i array[15] el valor de la casella de la dreta . Posa a  l’última línia d’aquesta funció la instrucció Invalidate().

 

5)       Presenta a pantalla, mitjançant la funció OnDraw(), el número de la tarja.

 

6)       Presenta a pantalla, mitjançant la funció OnDraw(), si es correcte o no el número de tarja entrat presentant el dígit de comprovació seguint la rutina de Luhn (Està explicada al revers del full). I si és correcte o no

 

7)       Presenta a pantalla, mitjançant la funció OnDraw(), el tipus de tarja.

 

Tipus de tarja

Números inicials

Nombre de números

American Express

34, 37

15

Diners Club

38

14

Discover

6011

16

EnRoute

2014, 2149

15

JCB

3

16

JCB

2131, 1800

15

Master Card

51, 52, 53, 54, 55

16

Visa

4

13, 16

Citibank Visa

4820, 4128

16

 

 

 


Rutina de Luhn per a trobar el dígit de comprovació

 

La rutina de Luhn , també anomenada Modulo-10, consisteix en pendre els primers 15 números amb pesos 212121212121212. És a dir que, el primer número el multiplicarem per 2, el segon per 1, el tercer per 2, ... Si alguna de les multiplicacions dóna un número de dos dígits llavors els haurem de sumar per tenir un número d’una xifra.

 

Algoritme:

                 

1.        Multiplicar cada número de la tarja per llur pes, i si algún número és superior a 10 sumar llurs dígits.

2.        Sumar els 15 resultats

3.        Trobar el múltiple de 10 immediatament superior de l’anterior resultat

4.        Restar al número aconseguit al pas 3 el del pas 2.

 

El resultat és el dígit de comprovació. (Que ha de coincidir amb el número que està més a la dreta).

 

 

Exemple :

 

          5  3  2  1     0  0  4  6     7   3  2  2     9  8  1 X             número

          2  1  2  1     2  1  2  1     2   1  2  1     2  1  2              x pes

         10 3  4  1     0  0  8  6    14  3  4  2    18 8  2

 

          1+3+4+1 + 0+0+8+6 + 5+3+4+2 + 9+8+2 = 56

 

         el múltiple de 10 immediatament superior a 56 és el 60. La resta del múltiple immediatament superior i l’autosuma amb pesos dóna el dígit de verificació. En aquest cas és 4 (60-56).

 

Números de tarja per fer proves :

5 3 2 1  0 0 4 6  7 3 2 2   9 8 1 4,     4 2 1 1  5 8 2 2  2 5 1 1  8 8 2 1,    4 9 9 2  7 3 9 8  7 1 6 3   7 8 9 3

 

Exemple de resultat de l’aplicació :

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Font de la informació :

http://www.csensors.com/booklan.html

http://www.beachnet.com/~hstiles/cardtype.html

http://euro.ecom.cmu.edu/resources/elibrary/everycc.htm

http://www.eng2.uconn.edu/cse/Courses/CSE208W/CreditCard/

http://www.totse.com/en/bad_ideas/scams_and_rip_offs/cardalgo.html

http://www.redleif.com/vb/example_source/general/ex_ccvalidate.html