Se alguém precisar validar CPF ou CNPJ. Deixei em português para ficar fácil de ser compreendido
- ✅ Versão JS
- ⬜ Versão PHP
- ⬜ Versão Shell Script
- ⬜ Versão Vue.js
function validarCPF(cpf) {
if (isNaN(cpf)) {
return false;
}
cpf = ['string', 'number'].includes(typeof cpf) ? `${cpf}` : '';
// Remove caracteres não numéricos
cpf = cpf.replace(/[^\d]+/g, '');
// Verifica se o CPF tem 11 dígitos
if (cpf.length !== 11) return false;
// Verifica se todos os dígitos são iguais (ex: 111.111.111-11)
if (/^(\d)\1+$/.test(cpf)) return false;
// Função para calcular o dígito verificador
const calcularDigito = (cpf, fatorInicial) => {
let soma = 0;
for (let i = 0; i < fatorInicial - 1; i++) {
soma += parseInt(cpf.charAt(i)) * (fatorInicial - i);
}
const resto = soma % 11;
return resto < 2 ? 0 : 11 - resto;
};
// Calcula e verifica os dois dígitos verificadores
const digito1 = calcularDigito(cpf, 10);
const digito2 = calcularDigito(cpf, 11);
return digito1 === parseInt(cpf.charAt(9)) && digito2 === parseInt(cpf.charAt(10));
}
// validarCPF('numero do cpf aqui');
function validarCNPJ(cnpj) {
cnpj = ['string', 'number'].includes(typeof cnpj) ? `${cnpj}` : '';
// Remove caracteres não numéricos
cnpj = cnpj.replace(/[^\d]+/g, '');
// Verifica se o CNPJ tem 14 dígitos
if (cnpj.length !== 14) return false;
// Verifica se todos os dígitos são iguais (ex: 11.111.111/1111-11)
if (/^(\d)\1+$/.test(cnpj)) return false;
// Função para calcular o dígito verificador
const calcularDigito = (cnpj, posicoes) => {
let soma = 0;
let pos = posicoes - 7;
for (let i = posicoes; i >= 1; i--) {
soma += cnpj.charAt(posicoes - i) * pos--;
if (pos < 2) pos = 9;
}
const resto = soma % 11;
return resto < 2 ? 0 : 11 - resto;
};
// Calcula e verifica os dois dígitos verificadores
const digito1 = calcularDigito(cnpj, 12);
const digito2 = calcularDigito(cnpj, 13);
return digito1 === parseInt(cnpj.charAt(12)) && digito2 === parseInt(cnpj.charAt(13));
}
// // Exemplos de uso
// console.log(validarCNPJ('12.345.678/0001-95')); // false
// console.log(validarCNPJ('11.444.777/0001-61')); // true