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; } }
Olá,
Muito bom, me ajudou bastante.
Só um detalhe em “var cpf = val.trim” = “var cpf = val.trim();”
Olá, bom dia. Muito obrigado, realizei a correção no código.
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!
Bom dia, muito obrigado pelo feedback, realizei a correção na função trim.
Na linha 3, está faltando fechar o () da função trim()
Bom dia, muito obrigado pelo aviso, realizei a correção.
Olá!! Esse código funciona nos formulários dentro do Acrobat?
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.
qual seria o input para o html ?
Olá Gustavo, primeiramente obrigado pelo comentário. Você pode utilizar o método HTML DOM getElementById, para obter o CPF/CNPJ do formulário HTML com o JavaScript. Após isto passe o CPF/CNPJ como parâmetro para a função validaCpfCnpj.
Salvou meu restinho de noite.
Top…
Parabéns.