// -------------------------------------------------------------------------------------
// Função para validar Dígito de CPF e CNPJ
// --------------------------------------------------------------------------------------
// onde num=número do cnpj ou cpf, tipo= 1=cnpj 2=cpf
//
// Obs: o índice da função substr() começa de 0; diferente do vb func Mid que começa 1
// -------------------------------------------------------------------------------------
function valida_Cnpj_Cpf ( num,tipo)
// -------------------------------------------------------------------------------------
{

var mtotal;
var mdc_cpf;
var B;
var C;
var D;
var F;
var G;
var H;
var mtotalString;
var digito;
var igual ;
mtotalString = "";


// >>>>>>>>>>  CONF=0

// tipo 1 => CNPJ
// --------------
if ( tipo == "1")
{  
  if (num.length != 14)
  {
		alert("O CNPJ não foi verificado por não ter 14 dígitos");
		return false;
	}
	else
	{
    // testa se todos os dígitos são numéricos e se válidos guarda em um array
    // o índice do array começa com 0 , por isso declarou c/15 p/ indexar de 0,1 .. 14
    // ------------------------------------------------------------------------------
    cnpjArray = new Array(15);
		for (F=1;F<15;F++)
		{
      if (isNaN(num.substr((F-1),1)))
      {
				alert("O CNPJ deve ser numérico.");
				return false;
			}
			else
			{
			
			  // guarda no array o valor númerico de cada dígito
			  // -----------------------------------------------
			  digito = parseInt(num.substr((F-1),1));
			  cnpjArray[F]= digito;
			  
			}//fim-if
		}// fim-for
		
		if(parseInt(num,10)==0)
		{
		    alert("Número do CNPJ inválido.");
		    return false;
		}
    
    // testa se todos os números são iguais
    // ------------------------------------
    igual = true;
    for (F=0;F<14;F++)
		{
        if ( (num.substr(F,1)) != (num.substr(F+1,1)) )
       { 
          igual = false ; 
       }
    }// fim-for
    if (igual)  
    {
       alert("Número do CNPJ inválido.1");
			 return false;
    }//fim-if



    B=  (cnpjArray[1]*5)+(cnpjArray[2]*4)+(cnpjArray[3]*3)+(cnpjArray[4]*2)+(cnpjArray[5]*9)+
        (cnpjArray[6]*8)+(cnpjArray[7]*7)+(cnpjArray[8]*6)+(cnpjArray[9]*5)+(cnpjArray[10]*4)+
        (cnpjArray[11]*3)+(cnpjArray[12]*2);		
		
		C= B % 11;
		D= 11 - C	;	
		if ((D == 10) || (D == 11))
		{
		  D=0;
		}
    
    // testa o 1# dígito verificador
    // ---------------------------------
    if (D != parseInt(num.substr(12,1)))
    {
        alert("Número do CNPJ inválido");
        return false;
    }

    F= (cnpjArray[1]*6)+(cnpjArray[2]*5)+(cnpjArray[3]*4)+(cnpjArray[4]*3)+(cnpjArray[5]*2)+
       (cnpjArray[6]*9)+(cnpjArray[7]*8)+(cnpjArray[8]*7)+(cnpjArray[9]*6)+(cnpjArray[10]*5)+
       (cnpjArray[11]*4)+(cnpjArray[12]*3)+(cnpjArray[13]*2);

		G= F % 11;
		H=11-G;
		
		if ((H == 10)||(H==11))
		{
			H = 0;
		}//fim-se
		
		if (H != parseInt(num.substr(13,1)))
		{
			alert("Número do CNPJ inválido");
			return false;
		} //fim-se
	}// fim-se
} //fim-se
else
{ 
  // ------------------------------------------------------------------------------
  // trata tipo= 2 >> CPF 
  // ------------------------------------------------------------------------------
  
  if (tipo =="2")
  {
    if (num.length != 11)
    {
			alert("O CPF deve ter 11 dígitos.");
			return false;
		}
		else
		{

			for (F=0;F<11;F++)
			{
        if (isNaN(num.substr(F,1)))
        {
					alert("O CPF deve ser numérico.");
					return false;
        }//fim-if
      }// fim-for

		  if(parseInt(num,10)==0)
		  {
		    alert("Número do CPF inválido.");
		    return false;
		  }
		  
      // testa se todos os números são iguais
      // ------------------------------------
      igual = true;
      for (F=0;F<10;F++)
			{
        if ( (num.substr(F,1)) != (num.substr(F+1,1)) )
        { 
           igual = false ; 
        }
      }// fim-for
      if (igual)  
      {
					alert("Número do CPF inválido.");
					return false;
      }//fim-if
		  

		  

			mtotal =0;
			mtotal = mtotal + (parseInt(num.substr(8,1))*2);
			mtotal = mtotal + (parseInt(num.substr(7,1))*3);
			mtotal = mtotal + (parseInt(num.substr(6,1))*4);
			mtotal = mtotal + (parseInt(num.substr(5,1))*5);
			mtotal = mtotal + (parseInt(num.substr(4,1))*6);
			mtotal = mtotal + (parseInt(num.substr(3,1))*7);
			mtotal = mtotal + (parseInt(num.substr(2,1))*8);
			mtotal = mtotal + (parseInt(num.substr(1,1))*9);
			mtotal = mtotal + (parseInt(num.substr(0,1))*10);
			mtotal = 11 - (mtotal % 11);

      mtotalString = mtotal.toString();
      
			if ( mtotal > 9)
			{
				mdc_cpf = "0";
			}
			else
			{			                
				mdc_cpf = mtotalString ;
			}

			mtotal = 0;
			mtotal = mtotal + (parseInt(mdc_cpf)*2);
			mtotal = mtotal + (parseInt(num.substr(8,1))*3);
			mtotal = mtotal + (parseInt(num.substr(7,1))*4);
			mtotal = mtotal + (parseInt(num.substr(6,1))*5);
			mtotal = mtotal + (parseInt(num.substr(5,1))*6);
			mtotal = mtotal + (parseInt(num.substr(4,1))*7);
			mtotal = mtotal + (parseInt(num.substr(3,1))*8);
			mtotal = mtotal + (parseInt(num.substr(2,1))*9);
			mtotal = mtotal + (parseInt(num.substr(1,1))*10);
			mtotal = mtotal + (parseInt(num.substr(0,1))*11);
			mtotal = 11 - (mtotal % 11);

      mtotalString = mtotal.toString();
      if ( mtotal > 9 )
      {
				mdc_cpf = mdc_cpf + "0";
			}
			else
			{
				mdc_cpf = mdc_cpf + mtotalString;
		  }
            
      if ( mdc_cpf != num.substr(9,2) )
      {
				alert ("Número do CPF inválido.");
				return false;
			}//fim-se
		}//fim-se
	}//fim-se
}//fim-se

// passou por tudo é válido
return true;
}//fim-func
//----------------------------------------------------------

