Como validar CPF/CNPJ em JavaScript

O CPF (Cadastro de Pessoas Físicas), é composto de 11 números. Os 8 primeiros são gerados de modo aleatório e o nono dígito informa a região fiscal responsável pela inscrição. Por fim, os dois últimos números são dígitos verificadores, calculados de acordo com um algoritmo definido pela Receita Federal e publicamente conhecido.

Formato: 123.456.789-09

O CNPJ (Cadastro Nacional da Pessoa Jurídica) é composto de 14 números. Os 8 primeiros identificam a empresa e os 4 seguintes formam um sufixo que identifica um endereço de atividade da pessoa jurídica. Os dois últimos números são dígitos verificadores, calculados de acordo com um algoritimo.

Formato: 12.345.678/0001-91

Algoritmo em JavaScript

A função abaixo, recebe uma string cpf/cnpj, devidamente formatado e realiza sua verificação com base nos dígitos verificadores. Ela retorna true para um cpf/cnpj válido e false para um cpf/cnpj inválido.

function validaCpfCnpj(val) {
    if (val.length == 14) {
        var cpf = val.trim();
     
        cpf = cpf.replace(/\./g, '');
        cpf = cpf.replace('-', '');
        cpf = cpf.split('');
        
        var v1 = 0;
        var v2 = 0;
        var aux = false;
        
        for (var i = 1; cpf.length > i; i++) {
            if (cpf[i - 1] != cpf[i]) {
                aux = true;   
            }
        } 
        
        if (aux == false) {
            return false; 
        } 
        
        for (var i = 0, p = 10; (cpf.length - 2) > i; i++, p--) {
            v1 += cpf[i] * p; 
        } 
        
        v1 = ((v1 * 10) % 11);
        
        if (v1 == 10) {
            v1 = 0; 
        }
        
        if (v1 != cpf[9]) {
            return false; 
        } 
        
        for (var i = 0, p = 11; (cpf.length - 1) > i; i++, p--) {
            v2 += cpf[i] * p; 
        } 
        
        v2 = ((v2 * 10) % 11);
        
        if (v2 == 10) {
            v2 = 0; 
        }
        
        if (v2 != cpf[10]) {
            return false; 
        } else {   
            return true; 
        }
    } else if (val.length == 18) {
        var cnpj = val.trim();
        
        cnpj = cnpj.replace(/\./g, '');
        cnpj = cnpj.replace('-', '');
        cnpj = cnpj.replace('/', ''); 
        cnpj = cnpj.split(''); 
        
        var v1 = 0;
        var v2 = 0;
        var aux = false;
        
        for (var i = 1; cnpj.length > i; i++) { 
            if (cnpj[i - 1] != cnpj[i]) {  
                aux = true;   
            } 
        } 
        
        if (aux == false) {  
            return false; 
        }
        
        for (var i = 0, p1 = 5, p2 = 13; (cnpj.length - 2) > i; i++, p1--, p2--) {
            if (p1 >= 2) {  
                v1 += cnpj[i] * p1;  
            } else {  
                v1 += cnpj[i] * p2;  
            } 
        } 
        
        v1 = (v1 % 11);
        
        if (v1 < 2) { 
            v1 = 0; 
        } else { 
            v1 = (11 - v1); 
        } 
        
        if (v1 != cnpj[12]) {  
            return false; 
        } 
        
        for (var i = 0, p1 = 6, p2 = 14; (cnpj.length - 1) > i; i++, p1--, p2--) { 
            if (p1 >= 2) {  
                v2 += cnpj[i] * p1;  
            } else {   
                v2 += cnpj[i] * p2; 
            } 
        }
        
        v2 = (v2 % 11); 
        
        if (v2 < 2) {  
            v2 = 0;
        } else { 
            v2 = (11 - v2); 
        } 
        
        if (v2 != cnpj[13]) {   
            return false; 
        } else {  
            return true; 
        }
    } else {
        return false;
    }
 }

10 comentários em “Como validar CPF/CNPJ em JavaScript”

  1. Muito obrigado por ter postado esse código, me adiantou um bom trabalho. Mas tive que alterar coisas pequenas.
    na linha 3 ta faltando o o parêntese, era pra tá:
    var cpf = val.trim();
    E como o js tava me retornando um objeto, adicionei:
    var val = val.value;
    Daí tudo correu tranquilo.
    Muito obrigado, novamente!

    1. Olá Erica, primeiramente obrigado pelo comentário. Bom no caso você refere-se ao software Acrobat da Adobe? Este código foi escrito em JavaScript, creio que se este software Acrobat gerar seus formulários em HTML, deve ser possível utilizar o JavaScript também. Assim este código também funcionaria em seus formulários.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *