Função JavaScript para validar CNPJ

Para ajudar o programador, resolvi escrever uma função em JavaScript para validar o CNPJ de uma empresa. O código é 100% livre, portanto sinta-se livre para copiar, modificar ou fazer o que quiser com a função:

function validaCNPJ (cnpj) {
    var b = [ 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 ]
    var c = String(cnpj).replace(/[^\d]/g, '')
    
    if(c.length !== 14)
        return false

    if(/0{14}/.test(c))
        return false

    for (var i = 0, n = 0; i < 12; n += c[i] * b[++i]);
    if(c[12] != (((n %= 11) < 2) ? 0 : 11 - n))
        return false

    for (var i = 0, n = 0; i <= 12; n += c[i] * b[i++]);
    if(c[13] != (((n %= 11) < 2) ? 0 : 11 - n))
        return false

    return true
}
view raw validaCNPJ.js hosted with ❤ by GitHub

Isso resolveu o seu problema? Se sim, lembre-se de deixar um comentário no final do artigo com sua opinião. Abaixo, seguiremos detalhando o funcionamento do código.

Testando a função de validação:

Abaixo podemos testar nossa função de validação. Experimente informar alguns números de CNPJ com ou sem formação, pois a própria função no momento de validar remove os caracteres extras. Tente alguns números para ver o que acontece:

Caso não tenha nenhum CNPJ para testar, você pode gerar um automaticamente no site geradorcnpj.com.

Como funciona a função de validar CNPJ?

Para entender como funciona a função em JavaScript, antes mesmo de saber como validar, primeiramente precisamos entender a composição do CNPJ. O número do CNPJ é composto por três segmentos numéricos:

  1. Número da inscrição
  2. Número de filiais (logo após a barra)
  3. Os últimos dois valores são os dígitos verificadores

Logo, temos o formato CNPJ da seguinte forma:

[inscrição]/[filiais]-[verificadores]

Agora, vamos a validação na função. Primeiramente, definimos os números que irão multiplicar aos dígitos do CNPJ para realizar a verificação:

var b = [ 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 ]

Então, limpamos a string do CNPJ para remover toda formatação. Removemos dessa forma todo e qualquer caractere que não seja numérico:

var c = String(cnpj).replace(/^[^\d]/g, '')

A partir disso, verificamos se o CNPJ contém os 14 dígitos. Se for diferente, a função deve retornar false:

if (c.length !== 14)
  return false

Também verificamos se o CNPJ foi inserido como "000000000/0000-00". Mesmo passando pela lógica do algoritmo isso ainda seria possível, então precisamos eliminar essa possibilidade:

if (/0{14}/.test(c))
  return false

Em seguida, realizamos a primeira verificação dos cálculos com multiplicação. O resultado deve ser igual ao penúltimo número do CNPJ que é o primeiro dígito verificador:

for (var i = 0, n = 0; i < 12; n += c[i] * b[++i]);
  if (c[12] != (((n %= 11) < 2) ? 0 : 11 - n))
    return false

Agora, fazemos a segunda verificação com multiplicação para o segundo dígito verificador, ou seja, o último dígito do CNPJ:

for (var i = 0, n = 0; i <= 12; n += c[i] * b[i++]);
  if (c[13] != (((n %= 11) < 2) ? 0 : 11 - n))
    return false

Por fim, caso o número tenha passado por todas as validações, a função deve retornar true. Dessa forma, ao fim da função, nosso CNPJ é considerado válido:

return true

Você pode conferir detalhadamente o algoritmo que valida a sequência numérica do CNPJ em no site Macoratti.net.


Tags:

  • Validação
  • CNPJ
  • JavaScript

Compartilhar:

    O que achou do artigo?

    Escreva um comentário, deixe-me saber o que achou do artigo. Se tens uma dúvida basta perguntar:

    Resposta ao comentário:
    Loading...