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

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

function somaAlgarismo(numero)
{
    switch (numero) {
        case 10:
            return 1;
            break;
        case 12:
            return 3;
            break;
        case 14:
            return 5;
            break;
        case 16:
            return 7;
            break;
        case 18:
            return 9;
            break;
        case 20:
            return 2;
            break;
    }
}

function modulo10(s)
{
    tamanho = s.length - 1;
    soma = 0;
    peso = 2

    for (var i = tamanho; i >= 0; i--) {
        total = s.substr(i, 1) * peso;

        if (total > 9) {
            soma = soma + 1 + (total - 10);
        } else {
            soma = soma + total;
        }

        if (peso == 1) {
            peso = 2;
        } else {
            peso = 1;
        }
    }

    dv = 10 - mod(soma, 10);
    if (dv == 10) {
        dv = 0;
    }

    return dv;
}

/*
function modulo11($s) {
    $soma = 0;
    $fator = 2;

    for ($i = strlen($s); $i > 0; $i--) {
        $ca = (integer) substr($s, $i-1, 1);
        $soma += $ca * $fator;
        $fator++;

        if ($fator == 10) {
            $fator = 2;
        }
    }

    $dv = 11 - ($soma % 11);

    if($dv >= 10) {
        $dv = 0;
    }

    return (string) $dv;
}

function modulo10($s)
{
    $qtd_char = strlen($s) - 1;
    $soma = 0;
    $peso = 2;

    for ($i = $qtd_char; $i > 0; $i--) {
        $total = substr($s, $i, 1) * $peso;

        if ($total > 9) {
            $soma = $soma + 1 + ($total - 10);
        } else {
            $soma = $soma + $total;
        }

        if ($peso == 1) {
            $peso = 2;
        } else {
            $peso = 1;
        }
    }

    $dv = 10 - ($soma % 10);
    if ($dv == 10) {
        $dv = 0;
    }

    return $dv;
}
*/

function geraCMC7()
{
    var n = 9;

    // segunda parte do cmc7
    var CMC72_1  = random(n);
    var CMC72_2  = random(n);
    var CMC72_3  = random(n);
    var CMC72_4  = random(n);
    var CMC72_5  = random(n);
    var CMC72_6  = random(n);
    var CMC72_7  = random(n);
    var CMC72_8  = random(n);
    var CMC72_9  = random(n);
    var CMC72_10 = 5;

    var CMC72 = ''+CMC72_1+CMC72_2+CMC72_3+CMC72_4+CMC72_5+CMC72_6+CMC72_7+CMC72_8+CMC72_9+CMC72_10;

    var CMC72_DV = modulo10(CMC72);

    // primeira parte do cmc7
    var CMC71_1  = random(n);
    var CMC71_2  = random(n);
    var CMC71_3  = random(n);
    var CMC71_4  = random(n);
    var CMC71_5  = random(n);
    var CMC71_6  = random(n);
    var CMC71_7  = random(n);
    var CMC71_DV = CMC72_DV;

    var CMC71 = ''+CMC71_1+CMC71_2+CMC71_3+CMC71_4+CMC71_5+CMC71_6+CMC71_7+CMC72_DV;
    var tempCMC71 = ''+CMC71_1+CMC71_2+CMC71_3+CMC71_4+CMC71_5+CMC71_6+CMC71_7;

    var CMC71_DV = modulo10(tempCMC71);

    // terceira parte do cmc7
    var CMC73_1  = CMC71_DV;
    var CMC73_2  = random(n);
    var CMC73_3  = random(n);
    var CMC73_4  = random(n);
    var CMC73_5  = random(n);
    var CMC73_6  = random(n);
    var CMC73_7  = random(n);
    var CMC73_8  = random(n);
    var CMC73_9  = random(n);
    var CMC73_10 = random(n);
    var CMC73_11 = random(n);

    var tempCMC73 = ''+CMC73_1+CMC73_2+CMC73_3+CMC73_4+CMC73_5+CMC73_6+CMC73_7+CMC73_8+CMC73_9+CMC73_10+CMC73_11;

    var CMC73_DV = modulo10(tempCMC73);

    var CMC73 = ''+tempCMC73+CMC73_DV;

    var numero = ''+CMC71+' '+CMC72+' '+CMC73;

    document.getElementById("numero").value = numero;
}

function geraNumero()
{
    var n = 9;

    // segunda parte do cmc7
    var CMC7_2_1  = random(n);
    var CMC7_2_2  = random(n);
    var CMC7_2_3  = random(n);
    var CMC7_2_4  = random(n);
    var CMC7_2_5  = random(n);
    var CMC7_2_6  = random(n);
    var CMC7_2_7  = random(n);
    var CMC7_2_8  = random(n);
    var CMC7_2_9  = random(n);
    var CMC7_2_10 = 5;

    CMC72_1 = 2 * CMC7_2_10;
    if (CMC72_1 >= 10){
        CMC72_1 = somaAlgarismo(CMC72_1);
    }
    CMC72_2 = 1 * CMC7_2_9;
    if (CMC72_2 >= 10){
        CMC72_2 = somaAlgarismo(CMC72_2);
    }
    CMC72_3 = 2 * CMC7_2_8;
    if (CMC72_3 >= 10){
        CMC72_3 = somaAlgarismo(CMC72_3);
    }
    CMC72_4 = 1 * CMC7_2_7;
    if (CMC72_4 >= 10){
        CMC72_4 = somaAlgarismo(CMC72_4);
    }
    CMC72_5 = 2 * CMC7_2_6;
    if (CMC72_5 >= 10){
        CMC72_5 = somaAlgarismo(CMC72_5);
    }
    CMC72_6 = 1 * CMC7_2_5;
    if (CMC72_6 >= 10){
        CMC72_6 = somaAlgarismo(CMC72_6);
    }
    CMC72_7 = 2 * CMC7_2_4;
    if (CMC72_7 >= 10){
        CMC72_7 = somaAlgarismo(CMC72_7);
    }
    CMC72_8 = 1 * CMC7_2_3;
    if (CMC72_8 >= 10){
        CMC72_8 = somaAlgarismo(CMC72_8);
    }
    CMC72_9 = 2 * CMC7_2_2;
    if (CMC72_9 >= 10){
        CMC72_9 = somaAlgarismo(CMC72_9);
    }
    CMC72_10 = 1 * CMC7_2_1;
    if (CMC72_10 >= 10){
        CMC72_10 = somaAlgarismo(CMC72_10);
    }

    CMC72_DV = CMC72_1 + CMC72_2 + CMC72_3 + CMC72_4 + CMC72_5 + CMC72_6 + CMC72_7 + CMC72_8 + CMC72_9 + CMC72_10;

    CMC72_DV = 10 - mod(CMC72_DV, 10);
    if (CMC72_DV == 10) {
        CMC72_DV = 0 ;
    }

    // primeira parte do cmc7
    var CMC7_1_1  = random(n);
    var CMC7_1_2  = random(n);
    var CMC7_1_3  = random(n);
    var CMC7_1_4  = random(n);
    var CMC7_1_5  = random(n);
    var CMC7_1_6  = random(n);
    var CMC7_1_7  = random(n);
    var CMC7_1_DV = CMC72_DV;

    CMC71_1 = 2 * CMC7_1_7;
    if (CMC71_1 >= 10) {
        CMC71_1 = somaAlgarismo(CMC71_1);
    }
    CMC71_2 = 1 * CMC7_1_6;
    if (CMC71_2 >= 10) {
        CMC71_2 = somaAlgarismo(CMC71_2);
    }
    CMC71_3 = 2 * CMC7_1_5;
    if (CMC71_3 >= 10) {
        CMC71_3 = somaAlgarismo(CMC71_3);
    }
    CMC71_4 = 1 * CMC7_1_4;
    if (CMC71_4 >= 10) {
        CMC71_4 = somaAlgarismo(CMC71_4);
    }
    CMC71_5 = 2 * CMC7_1_3;
    if (CMC71_5 >= 10) {
        CMC71_5 = somaAlgarismo(CMC71_5);
    }
    CMC71_6 = 1 * CMC7_1_2;
    if (CMC71_6 >= 10) {
        CMC71_6 = somaAlgarismo(CMC71_6);
    }
    CMC71_7 = 2 * CMC7_1_1;
    if (CMC71_7 >= 10) {
        CMC71_7 = somaAlgarismo(CMC71_7);
    }

    CMC71_DV = CMC71_1 + CMC71_2 + CMC71_3 + CMC71_4 + CMC71_5 + CMC71_6 + CMC71_7;

    CMC71_DV = 10 - mod(CMC71_DV, 10);
    if (CMC71_DV == 10) {
        CMC71_DV = 0 ;
    }

    // terceira parte do cmc7
    var CMC7_3_1   = CMC71_DV;
    var CMC7_3_2   = random(n);
    var CMC7_3_3   = random(n);
    var CMC7_3_4   = random(n);
    var CMC7_3_5   = random(n);
    var CMC7_3_6   = random(n);
    var CMC7_3_7   = random(n);
    var CMC7_3_8   = random(n);
    var CMC7_3_9   = random(n);
    var CMC7_3_10  = random(n);
    var CMC7_3_11  = random(n);

    CMC73_1 = 2 * CMC7_3_11;
    if (CMC73_1 >= 10){
        CMC73_1 = somaAlgarismo(CMC73_1);
    }
    CMC73_2 = 1 * CMC7_3_10;
    if (CMC73_2 >= 10){
        CMC73_2 = somaAlgarismo(CMC73_2);
    }
    CMC73_3 = 2 * CMC7_3_9;
    if (CMC73_3 >= 10){
        CMC73_3 = somaAlgarismo(CMC73_3);
    }
    CMC73_4 = 1 * CMC7_3_8;
    if (CMC73_4 >= 10){
        CMC73_4 = somaAlgarismo(CMC73_4);
    }
    CMC73_5 = 2 * CMC7_3_7;
    if (CMC73_5 >= 10){
        CMC73_5 = somaAlgarismo(CMC73_5);
    }
    CMC73_6 = 1 * CMC7_3_6;
    if (CMC73_6 >= 10){
        CMC73_6 = somaAlgarismo(CMC73_6);
    }
    CMC73_7 = 2 * CMC7_3_5;
    if (CMC73_7 >= 10){
        CMC73_7 = somaAlgarismo(CMC73_7);
    }
    CMC73_8 = 1 * CMC7_3_4;
    if (CMC73_8 >= 10){
        CMC73_8 = somaAlgarismo(CMC73_8);
    }
    CMC73_9 = 2 * CMC7_3_3;
    if (CMC73_9 >= 10){
        CMC73_9 = somaAlgarismo(CMC73_9);
    }
    CMC73_10 = 1 * CMC7_3_2;
    if (CMC73_10 >= 10){
        CMC73_10 = somaAlgarismo(CMC73_10);
    }

    CMC73_DV = CMC73_1 + CMC73_2 + CMC73_3 + CMC73_4 + CMC73_5 + CMC73_6 + CMC73_7 + CMC73_8 + CMC73_9 + CMC73_10;

    CMC73_DV = 10 - mod(CMC73_DV, 10);
    if (CMC73_DV == 10){
        CMC73_DV = 0 ;
    }

    var cmc7_1 = ''+CMC7_1_1+CMC7_1_2+CMC7_1_3+CMC7_1_4+CMC7_1_5+CMC7_1_6+CMC7_1_7+CMC7_1_DV;
    var cmc7_2 = ''+CMC7_2_1+CMC7_2_2+CMC7_2_3+CMC7_2_4+CMC7_2_5+CMC7_2_6+CMC7_2_7+CMC7_2_8+CMC7_2_9+CMC7_2_10;
    var cmc7_3 = ''+CMC7_3_1+CMC7_3_2+CMC7_3_3+CMC7_3_4+CMC7_3_5+CMC7_3_6+CMC7_3_7+CMC7_3_8+CMC7_3_9+CMC7_3_10+CMC7_3_11+CMC73_DV;

    var numero = ''+cmc7_1+' '+cmc7_2+' '+cmc7_3;

    document.getElementById("numero").value = numero;
}