sexta-feira, 27 de dezembro de 2002

Função de Checagem de CNPJ


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


Esta matéria foi postada originalmente no ASP4Developers por Francisco Pinto Araujo Junior (site), que na época era "Analista de Sistemas". Hoje, vai saber...

0 comentários: