function validaCPF_CNPJ(str){
	var ret = isCPF(str) || isCNPJ(str);
	alert('['+str+'], valido:'+ret);
}

 
function isCPF(CPF)
{
   CPF = CPF.replace(".", "");
   CPF = CPF.replace("-", "");

   if (CPF.length != 11 || CPF == "00000000000" || CPF == "11111111111" ||
       CPF == "22222222222" || CPF == "33333333333" || CPF == "44444444444" ||
       CPF == "55555555555" || CPF == "66666666666" || CPF == "77777777777" ||
       CPF == "88888888888" || CPF == "99999999999")
      return false;
	  
   soma = 0;

   for (i=0; i < 9; i ++)
      soma += parseInt(CPF.charAt(i)) * (10 - i);

   resto = 11 - (soma % 11);

   if (resto == 10 || resto == 11)
      resto = 0;

   if (resto != parseInt(CPF.charAt(9)))
      return false;

   soma = 0;

   for (i = 0; i < 10; i ++)
      soma += parseInt(CPF.charAt(i)) * (11 - i);

   resto = 11 - (soma % 11);
   if (resto == 10 || resto == 11)
      resto = 0;

   if (resto != parseInt(CPF.charAt(10)))
      return false;
   return true;
}

function isCNPJ( 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 );
}

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 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;
}
