Consistência de CNPJ com JavaScript

outubro 16th, 2008 por Daniel Leave a reply »

Algoritmo explicativo para consistir números de CNPJ usando JavaScript. Para usá-lo basta copiar a função “cnpj()” para seu código e usar os métodos de formulário HTML.

// Consistência de CNPJ by Daniel R. Antunes
function cnpj(cnpj){
  // Verifica o formato fornecido
  if (!cnpj.match(/^\d{2}\.\d{3}\.\d{3}\/\d{4}\-\d{2}$/)){
    alert('Formato do CNPJ inválido !\n\nUtilize o formato "nn.nnn.nnn/nnnn-nn"');
    return FALSE;
  }
  // Tira os separadores deixando somente os números
  cnpj=cnpj.replace(/[\.\/\-]/g,'');
  // Cada número/posição do CNPJ será multiplicado pelo correspondente/
  // posição na string 'multipliers'
  var multipliers='543298765432';
  // Cálculo do PRIMEIRO dígito
  //
  // As multiplicações do multiplicando pelo multiplicador são armazenadas
  // no inteiro 'sum'
  var sum=0;
  // Os números do CNPJ serão acumulados na string 'str' para cálculo do
  // segundo dígito
  var str='';
  // Acumulo das multiplicações e dos números/posições do CNPJ
  for (n=0;n<12;n++){
    sum+=(parseInt(cnpj.substr(n,1))*parseInt(multipliers.substr(n,1)));
    str+=cnpj.substr(n,1);
  }
  // O primeiro dígito é o resultado do resto da divisão da soma das
  // multiplicações acumuladas por onze. Se este resto for menor que
  // dois, o dígito é fixado em zero
  var dig1=parseInt(sum%11);
  dig1=(dig1<2?0:11-dig1);
  // Cálculo do SEGUNDO dígito
  //
  // Acrescenta-se o primeiro dígito ao número parcial (sem os dígitos
  // fornecidos) do CNPJ,  acumulado na string 'str' durante o cálculo
  // anterior
  str+=String(dig1);
  // Como acrescentou-se o dígito, é necessário acrescentar uma posição
  // aos multiplicadores
  multipliers='6'+multipliers;
  // As multiplicações do multiplicando pelo multiplicador são armazenadas
  // no inteiro 'sum' novamente
  sum=0;
  // Acumulo das multiplicações no inteiro 'sum'
  for (n=0;n<13;n++)
    sum+=(parseInt(str.substr(n,1))*parseInt(multipliers.substr(n,1)));
  // O segundo dígito é o resultado do resto  da divisão da soma das
  // multiplicações acumuladas por onze. Se este resto for menor que
  // dois, o dígito é fixado em zero
  var dig2=parseInt(sum%11);
  dig2=(dig2<2?0:11-dig2);
  // Compara-se com o CNPJ fornecido
  if (cnpj.substr(-2,2)!=(String(dig1)+String(dig2))){
    alert('CNPJ inválido !');
    return FALSE;
  }
  // Tudo certo!
  return TRUE;
}
Advertisement

Comments are closed.