//***INICIO[consistecpf]***

/*
 * Nome:         ConsisteCPF
 * Autor:        7COMm/Fábrica de Softwares - Thiago Rosa
 * Data:         24/05/2002
 * Descricao:    Verifica se é um número de CPF válido. 
 *               Verificamos se o CPF digitado está correto, de acordo com seus
 *                       dígitos verificadores
 * Entrada:      intNumeroCPF: CPF a ser testado sem a formatacao de / e -
 * Saída:        true (válido) ou false (inválido)
 * Funções Uti.: TrocaListaCaracterPorString() e CalculaDigitoMod11()

 * Autor:        7COMm/Fábrica de softwares - Renato C. Castelo
 * Data:         13/11/2002
 * Descrição:    Adequação ao novo padrão e testes.
 */
function ConsisteCPF(intNumeroCPF) {
	var intDigitoCPF;
		
	//retira os caracteres '.','/' e '-' da string
	intNumeroCPF = TrocaListaCaracterPorString(intNumeroCPF, "\./\-", "", "i")
	//separa o dígito verificador
	intDigitoCPF = intNumeroCPF.substr(intNumeroCPF.length-2);				
	//separa o número sem dígito verificador
	intNumeroCPF = intNumeroCPF.substring(0, intNumeroCPF.length-2);
	
	//calcula o dígito verificador e verifica se é igual ao recebido
	if ( CalculaDigitoMod11(intNumeroCPF, 1) == intDigitoCPF ) {
		return true;
	} else {
		return false;
	}	
}

//***FIM[consistecpf]***


//***INICIO[calculadigitomod11]***

/*
 * Nome:        CalculaDigitoMod11
 * Autor:       7COMm/Fábrica de Softwares - Autor: Desconhecido 
 * Data:        Data: ??/??/????    
 * Descrição:   Calcula os Dígitos de Controle Módulo 11 para o número 
 *              informado
 * Entrada:     intNumero - número para o qual será gerado o digito
 *              intTipo - Indicador do tipo de documento no intNumero
 *                1 -> CPF    [999.999.999-99]
 *                2 -> CNPJ   [99.999.999/9999-99]
 *                3 -> Conta Corrente e Agencia da CAIXA
 *                4 -> Habilitação / Bloqueto
 * Saída:       Dígitos de Controle Módulo 11 
 * Observação:  O intNumero deve conter apenas caracter de 0 à 9
 
 * Autor:       7COMm/Fábrica de Softwares - Autor: Juliana Ferris
 * Data:        10/01/2002
 * Descrição:   Revisão de Padrões e Testes
 
 * Autor:       7COMm/Fábrica de Softwares - Autor: Fernando Vieira
 * Data:        15/01/2002
 * Descrição:   Revisão de Padrões e Testes
 */
function CalculaDigitoMod11 (intNumero, intTipo) {
    var intLimiteMult;         // Limite de Multiplos
    var intTamDigito;          // Tamanho do digito verificador
    var intCont1, intCont2;    // Contadores Auxiliares
    var intSoma, intMult;      // Variável auxiliar para os calculos
    var strTipo;               // Para transformar o intTipo para string 
                               // evitando assim problemas na utilizaçào do 
                               // swicth

    strTipo = intTipo.toString();

    // Verifica qual é o tipo de documento
    switch (strTipo) {
        case "1" :    // CPF   999.999.999-99
            intLimiteMult = 12;
            intTamDigito = 2;
            break;
        case "2" :    // CNPJ  99.999.999/9999-99
            intLimiteMult = 9;
            intTamDigito = 2;
            break;
        case "3" :    // Conta Corrente e Agencia da CAIXA
            intLimiteMult = 9;
            intTamDigito = 1;
            break;
        case "4" :    // Habilitação / Bloqueto
            intLimiteMult = 9;
            intTamDigito = 1;
            break;
    }

    // Gera o digito verificador
    for(intCount2 = 1; intCount2 <= intTamDigito; intCount2++) {
        intSoma = 0;
        intMult = 2;

        for(intCount1 = intNumero.length - 1; intCount1 >= 0; intCount1--) {
            intSoma+= (intMult * parseInt(intNumero.charAt(intCount1)));
            if ( ++intMult > intLimiteMult ) {
                intMult = 2;
            }
        }

        intNumero += ((intSoma * 10) % 11) % 10;
    }

    // Retorna apenas os digitos
    return intNumero.substr( intNumero.length - intTamDigito, intTamDigito );
}
//***FIM[calculadigitomod11]***

