Carders  
 
COMPREENDENDO O ALGORITMO DE CARTÕES DE CRÉDITO
Este artigo é dirigido mais a programadores que algum dia sonharam em
desenvolver um prog do tipo do Cmaster ou Credit Wizard. Muitos textos
tentam explicar o algoritmo usado para a elaboração de números de cc's
mas nenhum e' realmente completo ou explica como extrapolar vários nu-
meros apartir de um numero base. Chega de falar merda e vamos ao que
interessa.

Para compreender melhor esse esquema vamos usar um numero correto (cla-
ro, fictício) de um cc qualquer: 4128 7541 3218 0366. Usaremos esse
numero durante toda a primeira parte do texto.
Os quatro primeiros dígitos de um cartão de credito indicam o banco a
que pertence o cartão. No nosso numero exemplo os quatro primeiros nu-
meros são '4128'. Estes dígitos indicam um cartão do banco CITIBANK.
Obvio que um banco não vai possuir só um grupo de quatro dígitos e sim
vários(tipo... o citibank tem o 4128, 4013, 4271, 4556...).
Ok, o primeiro numero do cc indica o seu tipo. Os principais são:

3 = American Express
4 = Visa
5 = MasterCard
6 = Discover

No nosso caso o cartão e' um belo VISA (numero 4). Agora repare em todos
os dígitos que ocupam posição impar no cartão:

4128 7541 3218 0366
/ | | | | | | \
posição: 1 3 5 7 9 11 13 15

Cada numero que ocupa posição impar no numero do cartão deve ser multiplicado por dois. Se o resultado dessa multiplicação for menor que nove
deixe como esta e passe para o numero seguinte. Se o  resultado for
maior que nove, subtrai-se nove do resultado obtido. Nos números de posição par não e' necessário qualquer esquema.

No nosso exemplo:

4 * 2 = 8 ; oito < nove
1 = 1 ; posição par
2 * 2 = 4 ; quatro < nove
8 = 8 ; posição par
7 * 2 = 14 ; 14 > 9, portanto, 14 - 9 = 5
5 = 5 ; posição par
4 * 2 = 8 ; oito < nove
1 = 1 ; posição par
3 * 2 = 6 ; seis < nove
2 = 2 ; posição par
1 * 2 = 2 ; dois < nove
8 = 8 ; posição par
0 * 2 = 0 ; zero < nove
3 = 3 ; posição par
6 * 2 = 12 ; 12 > 9, portanto, 12 - 9 = 3
6 = 6 ; posição par

Ok! O resultado que obtemos após fazer esse esquema foi:

8148 5581 6228 0336

Agora faca a soma de todos os números obtidos:

8+1+4+8 + 5+5+8+1 + 6+2+2+8 + 0+3+3+6 = 70

Paulada! Se o resultado da soma for múltiplo de 10 e também for menor
que 150, pode ficar tranqüilo, o numero e' totalmente valido. Repare
no nosso numero exemplo: 70 e' múltiplo de 10 e e' menor que 150 (ohhh!)
Conclui-se que o numero de cc que usamos como exemplo e' um numero VISA
valido pertencente ao Citibank (código 4128).
Beleza! Mas com este esquema e' possível apenas verificar se um cartão
e' realmente valido, o que não e' uma grande ajuda. Porem, vamos agora
gerar um numero tendo por base apenas o código do banco.

Vamos gerar, por exemplo, um cartão VISA do citibank:

4271 ???? ???? ????

Escolhemos mais 11 números (tem que ser 11 e não 12), aleatórios entre
0 e 9:

4271 0614 8230 113?

O passo seguinte e' tornar este numero um numero de cc valido. Como?
Usando aquele simples processo de verificação:

4 * 2 = 8 ; oito < nove
2 = 2 ; posição par
7 * 2 = 14 ; 14 > 9, portanto, 14 - 9 = 5
1 = 1 ; posição par
0 * 2 = 0 ; zero < nove
6 = 6 ; posição par
1 * 2 = 2 ; dois < nove
4 = 4 ; posição par
8 * 2 = 16 ; 16 > 9, portanto, 16 - 9 = 7
2 = 2 ; posição par
3 * 2 = 6 ; seis < nove
0 = 0 ; posição par
1 * 2 = 2 ; dois < nove
1 = 1 ; posição par
3 * 2 = 6 ; seis < nove
? = ? ; Verificar depois

Novo numero: 8251 0624 7260 216?
Fazendo a soma obtemos:

8+2+5+1 + 0+6+2+4 + 7+2+6+0 + 2+1+6+? = 52

Porra, 52 e' menor que 150 mas não e' múltiplo de 10, enato, o numero
deste cartão não e' valido, correto? Nahh, ainda podemos validar este
numero. Como? Se ainda temos um digito para colocar no numero certamente
colocaremos um numero que torne o cartão valido. No caso o numero e' 8.
O numero do cartão valido ficaria:

4271 0614 8230 1138

OK! Temos um numero de cartão valido gerado com números aleatórios, mas
corretamente validado. Agora vamos extrapolar, ou seja, obter outros nu-
meros apartir de um numero base. O nosso numero e' 4271 0614 8230 1138.
Primeiramente escolhemos os números que queremos manter:

4271 0614 8230 1138
|||| |||| ==> Concluímos que você e' esperto o bastante para deixar pelo
menos o código do banco.

Números mantidos: 4271 0614 ???? ????

Bem, agora o processo e' escolher outros números aleatórios entre 0 e 9
para formar o numero, lembrando que o ultimo digito deve ser deixado em
branco para validarmos o numero após terminado o esquema.


Voltar