var comPontos = true;

function random(n)
{
    return Math.round(Math.random() * n);
}

function mod(dividendo,divisor)
{
    return Math.round(dividendo - (Math.floor(dividendo/divisor)*divisor));
}

function formataCPF(cpf, formata)
{
    if (formata) {
        var parte1 = cpf.substring(0, 3);
        var parte2 = cpf.substring(3, 6);
        var parte3 = cpf.substring(6, 9);
        var parte4 = cpf.substring(9, 12);
        cpf = parte1+'.'+parte2+'.'+parte3+'-'+parte4;
    }
    return cpf;
}

function formataCNPJ(cnpj, formata)
{
    if (formata) {
        var parte1 = cnpj.substring(0, 2);
        var parte2 = cnpj.substring(2, 5);
        var parte3 = cnpj.substring(5, 8);
        var parte4 = cnpj.substring(8, 12);
        var parte5 = cnpj.substring(12, 15);
        cnpj = parte1+'.'+parte2+'.'+parte3+'/'+parte4+'-'+parte5;
    }
    return cnpj;
}

function GeraCPF()
{
    var n = 9;
    var n1 = random(n);
    var n2 = random(n);
    var n3 = random(n);
    var n4 = random(n);
    var n5 = random(n);
    var n6 = random(n);
    var n7 = random(n);
    var n8 = random(n);
    var n9 = random(n);

    // cria DV 1
    d1 = n9*2 + n8*3 + n7*4 + n6*5 + n5*6 + n4*7 + n3*8 + n2*9 + n1*10;
    d1 = 11 - (mod(d1, 11));
    d1 = (d1 >= 10) ? 0 : d1;

    // cria DV 2
    d2 = d1*2 + n9*3 + n8*4 + n7*5 + n6*6 + n5*7 + n4*8 + n3*9 + n2*10 + n1*11;
    d2 = 11 - (mod(d2, 11));
    d2 = (d2 >= 10) ? 0 : d2;

    cpf     = ''+n1+n2+n3+n4+n5+n6+n7+n8+n9+d1+d2;
    retorno = (comPontos) ? formataCPF(cpf, true) : formataCPF(cpf, false);

    return retorno;
}

function GeraCNPJ()
{
    var n = 9;
    var n1  = random(n);
    var n2  = random(n);
    var n3  = random(n);
    var n4  = random(n);
    var n5  = random(n);
    var n6  = random(n);
    var n7  = random(n);
    var n8  = random(n);
    var n9  = 0;
    var n10 = 0;
    var n11 = 0;
    var n12 = 1;

    // cria DV 1
    d1 = n12*2 + n11*3 + n10*4 + n9*5 + n8*6 + n7*7 + n6*8 + n5*9 + n4*2 + n3*3 + n2*4 + n1*5;
    d1 = 11 - (mod(d1, 11));
    d1 = (d1 >= 10) ? 0 : d1;

    // cria DV 2
    d2 = d1*2 + n12*3 + n11*4 + n10*5 + n9*6 + n8*7 + n7*8 + n6*9 + n5*2 + n4*3 + n3*4 + n2*5 + n1*6;
    d2 = 11 - (mod(d2, 11));
    d2 = (d2 >= 10) ? 0 : d2;

    cnpj    = ''+n1+n2+n3+n4+n5+n6+n7+n8+n9+n10+n11+n12+d1+d2;
    retorno = (comPontos) ? formataCNPJ(cnpj, true) : formataCNPJ(cnpj, false);

    return retorno;
}

function geraNumero()
{
    rd = document.getElementById("cpf");
    pt = document.getElementById("ponto");

    comPontos = pt.checked;

    document.getElementById("numero").value = (rd.checked) ? GeraCPF() : GeraCNPJ();
}