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;
}