Exercici per identificar la validesa dels números de tarja bancària
mitjançant la rutina de Luhn
per Jordi Binefa
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 |
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