UNPKG

@thalonbr/docbr

Version:

Uma biblioteca leve e moderna para **validação de documentos brasileiros** (CPF e CNPJ), com suporte total a **CNPJ alfanumérico**, conforme especificações da Receita Federal para 2026.

41 lines (40 loc) 1.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isValidCPF = isValidCPF; const string_utils_1 = require("../utils/string.utils"); function calculateCPFDigit(cpfBase) { if (cpfBase.length !== 9) return null; const digits = cpfBase.split('').map(d => parseInt(d, 10)); // Primeiro dígito const sum1 = digits.reduce((acc, num, idx) => acc + num * (10 - idx), 0); const rest1 = sum1 % 11; const digit1 = rest1 < 2 ? 0 : 11 - rest1; // Segundo dígito const digitsWithFirst = [...digits, digit1]; const sum2 = digitsWithFirst.reduce((acc, num, idx) => acc + num * (11 - idx), 0); const rest2 = sum2 % 11; const digit2 = rest2 < 2 ? 0 : 11 - rest2; return `${digit1}${digit2}`; } /** * Valida se um CPF (com dígitos ou sem) é válido. * @param cnpj - string contendo CPF * @returns boolean indicando validade do CPF */ function isValidCPF(cpf) { if (!cpf) throw new Error('Forneça um CPF'); let parsedCPF = cpf.replace(/[.\-]/g, ''); if (parsedCPF.length !== 11) { parsedCPF = (0, string_utils_1.fillStringWithZero)(parsedCPF, 11); } if (/^(\d)\1{10}$/.test(parsedCPF)) return false; const cpfBase = parsedCPF.slice(0, 9); const checkedDigitExpected = parsedCPF.slice(9); const calculatedDigit = calculateCPFDigit(cpfBase); if (calculateCPFDigit === null) throw new Error('Não foi possível calcular o dígito verificador!'); return checkedDigitExpected === calculatedDigit; }