~~ CdH ~~

tertium datur

terça-feira, 13 de dezembro de 2011

Gerador de cartão

Gerador simples de cartões, geralmente de crédito, que utilizam o algoritmo Luhn. O código fonte também está no post para quem quer estudar.

Sites de fonte de conhecimento:
http://www.merriampark.com/anatomycc.htm
http://bin-iin.com/MasterCard-BIN-List.html
http://www.compago.it/ajax/ID-13742.HeadA.Hack_25.html

Modo de usar: Insira os primeiros 6 dígitos oficiais de um cartão (caso sejam 4, insira outros 2 aleatórios) e o tamanho do código que será gerado (geralmente 16).

--

Digitos:
Tamanho:
Cartão gerado:

Código fonte (javascript):
Spoiler:
function creditgen(numero, tamanho)
{
    if (isNaN(numero) || numero.length != 6)
        return -1;
    else if (tamanho <= 6)
        return -2;
   
    var soma = 0;
    var card = "";
   
    // Faz a soma dos 6 primeiros dígitos.
    {
        soma += Number(numero.charAt(0) * 2 >= 10 ? numero.charAt(0) * 2 - 9 : numero.charAt(0) * 2);

        soma += Number(numero.charAt(2) * 2 >= 10 ? numero.charAt(2) * 2 - 9 : numero.charAt(2) * 2);
       
        soma += Number(numero.charAt(4) * 2 >= 10 ? numero.charAt(4) * 2 - 9 : numero.charAt(4) * 2);
       
        soma += Number(numero.charAt(1)) + Number(numero.charAt(3)) + Number(numero.charAt(5));
       
        card = numero;
    }

    var i = 6;
   
    // Gera valores aleatórios até n-1.
    {   
        if ((Number(tamanho)-1) > i)
            while (i < (Number(tamanho)-1))
            {
                card += Math.floor((Math.random()*100)%10);
               
                if (i%2)
                    soma += Number(card.charAt(i));
                else
                    soma += Number(card.charAt(i) * 2 >= 10 ? card.charAt(i) * 2 - 9 : card.charAt(i) * 2);
                   
                i++;
            }
    }
   
    // Cálculo do "check digit".
    {
        var check = soma;
       
        while (check%10 != 0)
            check++;
       
        check -= soma;
       
        card += check;
    }
   
    return card;
}

function gerar(numero, tamanho)
{
    var creditogerado;
   
    if ((creditogerado = creditgen(numero, tamanho)) == -1)
        alert("Deve ser número de 6 dígitos.");
    else if(creditogerado == -2)
        alert("Tamanho tem que ser maior do que 6.");
    else
        return creditogerado;
}
--

*Obs: Esse post não tem como objetivo incentivar a fraude de uso de cartões online, somente ensina o funcionamento do algoritmo Luhn.

Nenhum comentário:

Postar um comentário

FAÇA COMENTÁRIOS CONSTRUTIVOS!

Salvar página como PDF

Ainda não implementado!