//=============== FUNÇÕES DE VALIDAÇÃO DURANTE A DIGITAÇÃO ================================================

/*----------------------------------------------------------------------------------------------------
Não deixa o cara digitar nada além de números, e formata o campo como um CPF
----------------------------------------------------------------------------------------------------*/
function fnCPF(fld, milSep, decSep, e) {
   var sep = 0;
   var key = '';
   var i = j = 0;
   var len = len2 = 0;
   var strCheck = '0123456789';
   var aux = aux2 = '';
   var whichCode = (window.Event) ? e.which : e.keyCode;
   if (whichCode == 13) return true;  // Enter
   key = String.fromCharCode(whichCode);  // Get key value from key code
   if (strCheck.indexOf(key) == -1) return false;  // Not a valid key
   len = fld.value.length;
   if (len >= 14) return false;
   for(i = 0; i < len; i++)
   if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break;
   aux = '';
   for(; i < len; i++)
   if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i);
   aux += key;
   len = aux.length;
   if (len == 0) fld.value = '';
   if (len == 1) fld.value = '0'+ decSep + '0' + aux;
   if (len == 2) fld.value = '0'+ decSep + aux;
   if (len > 2) {
      aux2 = '';
      for (j = 0, i = len - 3; i >= 0; i--) {
         if (j == 3) {
            aux2 += milSep;
            j = 0;
         }
         aux2 += aux.charAt(i);
         j++;
      }
      fld.value = '';
      len2 = aux2.length;
      for (i = len2 - 1; i >= 0; i--)
      fld.value += aux2.charAt(i);
      fld.value += decSep + aux.substr(len - 2, len);
   }
   return false;
}

/*----------------------------------------------------------------------------------------------------
Não deixa o cara digitar nada além de números, e formata o campo como um CNPJ
----------------------------------------------------------------------------------------------------*/
function fnCNPJ(fld, e) {
   var decSep = "-";
   var milSep = "/";
   var sep = 0;
   var key = '';
   var i = j = 0;
   var len = len2 = 0;
   var strCheck = '0123456789';
   var aux = aux2 = '';
   var whichCode = (window.Event) ? e.which : e.keyCode;
   if (whichCode == 13) return true;  // Enter
   key = String.fromCharCode(whichCode);  // Get key value from key code
   if (strCheck.indexOf(key) == -1) return false;  // Not a valid key
   len = fld.value.length;
   if (len >= 19) return false;
   for(i = 0; i < len; i++) if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break;
   aux = '';
   for(; i < len; i++) if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i);
   aux += key;
   len = aux.length;
   if (len == 0) fld.value = '';
   if (len == 1) fld.value = '0'+ decSep + '0' + aux;
   if (len == 2) fld.value = '0'+ decSep + aux;
   if (len > 2) {
      aux2 = '';
      total = 4;
      for (j = 0, i = len - 3; i >= 0; i--) {
         if (j == total) {
            aux2 += milSep;
            j = 0;
            milSep = ".";
            total  = 3;
         }
         aux2 += aux.charAt(i);
         j++;
      }
      fld.value = '';
      len2 = aux2.length;
      for (i = len2 - 1; i >= 0; i--)
      fld.value += aux2.charAt(i);
      fld.value += decSep + aux.substr(len - 2, len);
   }
   return false;
}

/*----------------------------------------------------------------------------------------------------
Não deixa o cara digitar nada além de números, e formata o campo como um RG
----------------------------------------------------------------------------------------------------*/
function fnRG(fld, e) {
   var decSep = "-";
   var milSep = ".";
   var sep = 0;
   var key = '';
   var i = j = 0;
   var len = len2 = 0;
   var strCheck = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
   var aux = aux2 = '';
   var whichCode = (window.Event) ? e.which : e.keyCode;
   if (whichCode == 13) return true;  // Enter
   key = String.fromCharCode(whichCode).toUpperCase();  // Get key value from key code
   if (strCheck.indexOf(key) == -1) return false;  // Not a valid key
   len = fld.value.length;
   if (len >= 13) return false;
   for(i = 0; i < len; i++) if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break;
   aux = '';
   for(; i < len; i++) if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i);
   aux += key;
   len = aux.length;
   if (len == 0) fld.value = '';
   if (len == 1) fld.value = '0'+ decSep + aux;
   if (len > 1) {
      aux2 = '';
      for (j = 0, i = len - 2; i >= 0; i--) {
         if (j == 3) {
            aux2 += milSep;
            j = 0;
         }
         aux2 += aux.charAt(i);
         j++;
      }
      fld.value = '';
      len2 = aux2.length;
      for (i = len2 - 1; i >= 0; i--)
      fld.value += aux2.charAt(i);
      fld.value += decSep + aux.substr(len - 1, len);
   }
   return false;
}

/*----------------------------------------------------------------------------------------------------
Valida o número de CPF digitado
----------------------------------------------------------------------------------------------------*/
function ValidaCPF(CPF) {
   var strCpf = TiraLixoNumero(CPF,11);
	var strDvCpf = strCpf.substr(9,2);
	strCpf = strCpf.substr(0,9);
	if(!TestaCPF(strCpf, strDvCpf) )
	{
		alert ("CPF inválido!");
		return false;
	}
	return strCpf+strDvCpf;
}

/*----------------------------------------------------------------------------------------------------
Prepara o número do CPF digitado para ser verificado função chamada por TestaCPF
----------------------------------------------------------------------------------------------------*/
function TiraLixoNumero( strNumero , iTamanhoFinal ) 
{
	var iTamanhoInicial = strNumero.length;
	var i = iTamanhoInicial;
	var strNumeroAux = '';
		
	// Faz loop tirando lixo
	while (i != 0)
	{ 
		i--;
		if (isDigit(strNumero.charAt(i)))	
		{
			strNumeroAux = strNumero.charAt(i) + strNumeroAux;
		}
	}
		
	// se tamanho final = -1 retorna o numero limpo sem se preocupar com tamanho
	if (iTamanhoFinal == -1)
	{
		return strNumeroAux;
	}
		
	iTamanhoInicial = strNumeroAux.length;
		
	// se tamanho final menor do que o inicial trunca posicoes mais a esquerda
	if (iTamanhoFinal < iTamanhoInicial)
	{
		return strNumeroAux.substr(iTamanhoInicial-iTamanhoFinal,iTamanhoFinal);
	}

	// se tamanho final maior do que o inicial completa com zeros
	i = iTamanhoFinal-iTamanhoInicial;
	while (i != 0)
	{ 
		i--;
		strNumeroAux = "0" + strNumeroAux;
	}
    return strNumeroAux;
}

/*----------------------------------------------------------------------------------------------------
Testa o número de CPF para verificar se é válido (função chamada por ValidaCPF()
----------------------------------------------------------------------------------------------------*/
function TestaCPF( strNroCpf, strDv )
{
	var Dv1 = 0;
	var i = strNroCpf.length;
	var iFator = 2;
		
	while (i != 0)
	{ 
		i--;
		Dv1 += strNroCpf.charAt(i)*iFator;
			
		iFator++;
	}
	Dv1 = 11 - (Dv1 % 11);
	if (Dv1 > 9)
	{
		Dv1 = 0;
	}
	if (strDv.charAt(0) != Dv1) 
	    return false;				
	  
	var Dv2 = Dv1 * 2;
	iFator = 3;
	i = strNroCpf.length;
	  
	while (i != 0)
	{ 
		i--;
		Dv2 += strNroCpf.charAt(i)*iFator;
			
		iFator++;
	}

	Dv2 = 11 - (Dv2 % 11);
	if (Dv2 > 9)
	{
		Dv2 = 0;
	}
		
  	if (strDv.charAt(1) != Dv2) 
	{
		return false;
	}
		
	return true;
}

/*

A função checkCNPJ() faz a checagem do CNPJ. Retorna true se estiver ok, ou false, caso contrário.
 
   function getNumber( number , len )
   {
      var result = '';
      var num, i;
 
      for ( i = 0 ; i < number.length ; i++ )
      {
         try
         {
            num = parseInt( number.substring( i, i + 1 ) );
            result += num;
         }
         catch (exception)
         { }
      }
      if ( result.length != len )
      {
         // Complet with zeros
         result = '000000000000000' + result;
         var newLen = result.length;
         result = result.substring ( newLen - len , newLen );
      }
      return result;
   }
   
   function check1( value )
   {
      var count = 1;
      var len = value.length;
      var first;
      if ( len > 1 )
      {
         first = value.charAt( 0 );
      }
      else
      {
         return false;
      }
      for ( var i = 1; i < value.length ; i++ )
      {
         if ( value.charAt( i ) == first )
         {
            count++;
         }
      }
 
      if ( count == len )
      {
         return false;
      }
      
      return true;
   }
   
 
   function checkCNPJ( cnpj ) 
   { 
      var cnpjCalc; 
      var cnpjAdd; 
      var i; 
      var cnpjDigit; 
   
      cnpj = getNumber( cnpj , 14 );
      
      check1( cnpj );
 
      // Get only numeric digits
      cnpjCalc = cnpj.substring( 0 , 12 );
      
      // First part of digit verification
      cnpjAdd = 0; 
      for( i = 0 ; i < 4 ; i++ ) 
      { 
         cnpjAdd += parseInt( cnpjCalc.substring( i , i + 1 ) ) * (5 - i); 
      } 
 
      for( i = 0 ; i < 8 ; i++ ) 
      { 
         cnpjAdd += parseInt( cnpjCalc.substring( i + 4 , i + 4 + 1 ) ) * (9 - i); 
      } 
      
      // Fisrt digit
      cnpjDigit = 11 - (cnpjAdd % 11); 
       
      if ( cnpjDigit == 10 || cnpjDigit == 11 ) 
      { 
         cnpjCalc += '0'; 
      } 
      else 
      { 
         cnpjCalc += cnpjDigit; 
      } 
      
      // Second part of digit verification
      cnpjAdd = 0; 
      for ( i = 0 ; i < 5 ; i++ ) 
      { 
         cnpjAdd += parseInt( cnpjCalc.substring( i , i + 1 ) ) * (6 - i); 
      } 
      for ( i = 0 ; i < 8 ; i++ ) 
      { 
         cnpjAdd += parseInt( cnpjCalc.substring( i + 5, i + 5 + 1 ) ) * (9 - i); 
      } 
      
      // Second digit
      cnpjDigit = 11 - (cnpjAdd % 11); 
      if ( cnpjDigit == 10 || cnpjDigit == 11 ) 
      { 
         cnpjCalc += '0'; 
      } 
      else 
      { 
         cnpjCalc += cnpjDigit; 
      } 
      
      return ( cnpj == cnpjCalc ); 
   }
 
-- 
Francisco Pinto Araújo Júnior
Diretor de Tecnologia - Softexport Informática
Msc. Ciência da Computação
SCPJ2
Fone/Fax: +55 85 458 1947
pinto@softexport.com.br
www.softexport.com.br


*/
