Este texto é 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 elaboracao de numeros de cc's mas nenhum
e' realmente completo ou explica como extrapolar varios numeros
apartir de um numero base. Chega de falar merda e vamos ao que
interessa.
Para compreender melhor esse esquema vamos usar um numero
correto(claro, ficticio) de um cc qualquer: 4128 7541 3218 0366.
Usaremos esse numero durante toda a primeira parte do texto. Os
quatro primeiros digitos de um cartao de credito indicam o banco
a que pertence o cartao. No nosso número exemplo os quatro
primeiros números sao '4128'. Estes digitos indicam um cartão
do banco CITIBANK. Obvio que um banco nao vai possuir so um grupo
de quatro digitos e sim varios(tipo... o citibank tem o 4128,
4013, 4271, 4556...). Ok, o primeiro numero do cc indica o seu
tipo. Os principais sao:
3 = American Express 4 = Visa 5 = MasterCard 6 = Discover
No nosso caso o cartao e' um belo VISA (numero 4). Agora repare
em todos os digitos que ocupam posicao impar no cartao: 4128 7541
3218 0366 posicao: 1 3 5 7 9 11 13 15
Cada numero que ocupa posicao impar no numero do cartao deve ser
multiplicado por dois. Se o resultado dessa multiplicacao for
menor que nove deixe como esta e passe para o numero seguinte. Se
o o resultado for maior que nove, subtrai-se nove do resultado
obtido. Nos numeros de po- sicao par nao e' necessario qualquer
esquema.
No nosso exemplo:
4 * 2 = 8 ; oito < nove
1 = 1 ; posicao par
2 * 2 = 4 ; quatro < nove
8 = 8 ; posicao par
7 * 2 = 14 ; 14 > 9, portanto, 14 - 9 = 5 5 = 5 ;
posicao par 4 * 2 = 8 ;oito < nove
1 = 1 ; posicao par
3 * 2 = 6 ; seis < nove
2 = 2 ; posicao par
1 * 2 = 2 ; dois < nove
8 = 8 ; posicao par
0 * 2 = 0 ; zero < nove
3 = 3 ; posicao par
6 * 2 = 12 ; 12 > 9, portanto, 12 - 9 = 3
6 = 6 ; posicao par
Ok! O resultado que obtemos apos fazer esse esquema foi:
8148 5581 6228 0336
Agora faca a soma de todos os numeros 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 multiplo de 10 e tambem for
menor que 150, pode ficar tranquilo, o numero e' totalmente
valido. Repare no nosso numero exemplo: 70 e' multiplo 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
(codigo 4128). Beleza! Mas com este esquema e' possivel apenas
verificar se um cartao e' realmente valido, o que nao e' uma
grande ajuda. Porem, vamos agora gerar um numero tendo por base
apenas o codigo do banco.
Vamos gerar, por exemplo, um cartao VISA do citibank:
4271 ???? ???? ????
Escolhemos mais 11 numeros (tem que ser 11 e nao 12), aleatorios
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 verificacao que
esplicamos acima.
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 nao e' multiplo de 10, entao, o
numero deste cartao nao 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 cartao
valido. No caso o numero e' 8. O numero do cartao valido ficaria:
4271 0614 8230 1138
OK! Temos um numero de cartao valido gerado com numeros
aleatorios, 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
numeros que queremos manter:
4271 0614 8230 1138==> Concluimos que voce e' esperto o
bastante para deixar pelo menos o codigo do banco.
Numeros mantidos: 4271 0614 ???? ????
Bem, agora o processo e' escolher outros numeros aleatorios entre
0 e 9 para formar o numero, lembrando que o ultimo digito deve
ser deixado em branco para validarmos o numero apos terminado o
esquema.