br-validation
Version:
Funções úteis para validação e formatação de dados brasileiros
44 lines (43 loc) • 1.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const cnpjValidator = (cnpj) => {
const cnpjNumbers = cnpj.replace(/[^\d]+/g, '');
if (cnpjNumbers.length != 14 ||
cnpjNumbers == '00000000000000' ||
cnpjNumbers == '11111111111111' ||
cnpjNumbers == '22222222222222' ||
cnpjNumbers == '33333333333333' ||
cnpjNumbers == '44444444444444' ||
cnpjNumbers == '55555555555555' ||
cnpjNumbers == '66666666666666' ||
cnpjNumbers == '77777777777777' ||
cnpjNumbers == '88888888888888' ||
cnpjNumbers == '99999999999999') {
return false;
}
const cnpjNumbersArray = cnpjNumbers.split('').map(number => parseInt(number));
const firstDigit = cnpjNumbersArray[12];
const secondDigit = cnpjNumbersArray[13];
const firstDigitCalc = cnpjNumbersArray
.slice(0, 12)
.reduce((acc, number, index) => {
const multiplier = index < 4 ? index + 5 : index - 3;
return acc + number * multiplier;
}, 0);
const firstDigitCalcRest = 11 - (firstDigitCalc % 11);
const firstDigitCalcResult = firstDigitCalcRest === 10 || firstDigitCalcRest === 11
? 0
: firstDigitCalcRest;
const secondDigitCalc = cnpjNumbersArray
.slice(0, 13)
.reduce((acc, number, index) => {
const multiplier = index < 5 ? index + 6 : index - 2;
return acc + number * multiplier;
}, 0);
const secondDigitCalcRest = 11 - (secondDigitCalc % 11);
const secondDigitCalcResult = secondDigitCalcRest === 10 || secondDigitCalcRest === 11
? 0
: secondDigitCalcRest;
return (firstDigit === firstDigitCalcResult && secondDigit === secondDigitCalcResult);
};
exports.default = cnpjValidator;