/*--------------------------------------------------------------------------------------------------

   utval001 - Funções para validações especiais genéricas para os sistemas

   Funções:
       utval001_cpf(cpf)   - Valida dígitos de controle do CPF
       utval001_cnpj(cnpj) - Valida dígitos do controle do CNPJ

----------------------------------------------------------------------------------------------------

   Função......: utval001_cpf
   Responsável.: Kleber
   Data........: 19/11/2003
   Descrição...: Valida dígitos de controle do CPF.
   Entrada.....: CPF com 11 dígitos numéricos (0 a 9) sem caracteres de edição.

   Como usar...: Chamar função na validação do campo.
                 Testar se retorna falso (digito com erro) ou verdadeiro (cpf válido).

--------------------------------------------------------------------------------------------------*/
function utval001_cpf(cpf)
{
   var dig1 = 1;
   var dig2 = 0;

   for (i = 0; i < 10; i++)                    // testa se tem todos os números iguais
       if (cpf.charAt(i) != cpf.charAt(i+1))   // ex: 222.222.222/22
           dig1 = 0;

   if (dig1 == 1)                              // se tem todos iguais então é inválido
       return false;

   for ((i = 0, x = 10); x >= 2; i++) dig1 += cpf.charAt(i) * x--;  // acumula multiplicações
   for ((i = 0, x = 11); x >= 2; i++) dig2 += cpf.charAt(i) * x--;  // para o 1º e 2º dígitos

   dig1 = ( ((dig1 % 11) <= 1) ? 0 : 11 - (dig1 % 11) );   // calcula dígitos
   dig2 = ( ((dig2 % 11) <= 1) ? 0 : 11 - (dig2 % 11) );

   return ( (dig1 + "" + dig2) == cpf.substr(9 , 2 ) );    // retorna se dígitos estão certos
}

/*--------------------------------------------------------------------------------------------------

   Função......: utval001_cnpj
   Responsável.: Kleber
   Data........: 19/11/2003
   Descrição...: Valida dígitos de controle do CNPJ.
   Entrada.....: CNPJ com 14 dígitos numéricos (0 a 9) sem caracteres de edição.

   Como usar...: Chamar função na validação do campo.
                 Testar se retorna falso (digito com erro) ou verdadeiro (CNPJ válido).

--------------------------------------------------------------------------------------------------*/
function utval001_cnpj(cnpj)
{
   var dig1 = 0;
   var dig2 = 0;
   var mult = "6543298765432";

   for (var i=0; i <=11; i++) dig1 += mult.charAt(i + 1) * cnpj.charAt(i);
   for (    i=0; i <=12; i++) dig2 += mult.charAt(i)     * cnpj.charAt(i);

   dig1 = ( ((dig1 % 11) <= 1) ? 0 : 11 - (dig1 % 11) );
   dig2 = ( ((dig2 % 11) <= 1) ? 0 : 11 - (dig2 % 11) );

   return ( (dig1 + "" + dig2) == cnpj.substr( 12, 2 ) );
}


