@mquiuqui/doc-validator
Version:
Validador de documentos brasileiros (CPF, CNPJ, etc)
28 lines (27 loc) • 1.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isValidCNPJ = isValidCNPJ;
exports.formatCNPJ = formatCNPJ;
function isValidCNPJ(cnpj) {
cnpj = cnpj.replace(/[^\d]+/g, '');
if (cnpj.length !== 14 || /^(\d)\1+$/.test(cnpj))
return false;
const calcCheckDigit = (cnpj, pos) => {
const weight = pos === 12 ? [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] : [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
const sum = cnpj
.slice(0, pos)
.split('')
.reduce((acc, digit, i) => acc + parseInt(digit) * weight[i], 0);
const rest = sum % 11;
return rest < 2 ? 0 : 11 - rest;
};
const digit1 = calcCheckDigit(cnpj, 12);
const digit2 = calcCheckDigit(cnpj, 13);
return cnpj.endsWith(`${digit1}${digit2}`);
}
function formatCNPJ(cnpj) {
const digits = cnpj.replace(/[^\d]+/g, '');
if (digits.length !== 14)
return cnpj;
return `${digits.slice(0, 2)}.${digits.slice(2, 5)}.${digits.slice(5, 8)}/${digits.slice(8, 12)}-${digits.slice(12, 14)}`;
}