Skip to content

Instantly share code, notes, and snippets.

@tiagofrancafernandes
Last active October 18, 2024 01:17
Show Gist options
  • Save tiagofrancafernandes/70d9d497addfc4d21eb0f9b05d3a7a1b to your computer and use it in GitHub Desktop.
Save tiagofrancafernandes/70d9d497addfc4d21eb0f9b05d3a7a1b to your computer and use it in GitHub Desktop.
Validar CPF e CNPJ

Validar CPF e CNPJ

Se alguém precisar validar CPF ou CNPJ. Deixei em português para ficar fácil de ser compreendido

Todo

  • ✅ 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment