UNPKG

documentid-checksum-validator

Version:
51 lines (43 loc) 1.99 kB
// Function to validate the CNPJ in BR 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); exports['default'] = isValidDocId; function isValidDocId(value) { var textFieldValue = value; var valueArray = textFieldValue.split(''); if (valueArray.length < 14 || valueArray.length > 14) { return false; } var multiplier1 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2, 1]; var multiplier2 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2, 1]; var sumValueAlgo1 = 0; var sumValueAlgo2 = 0; var validityAlgo1 = 0; var validityAlgo2 = 0; /* below loop is to store result of the below two equation Consider the CNPJ written as 14 digits as c[1] c[2] c[3] c[4] c[5] c[6] c[7] c[8] c[9] c[10] c[11] c[12] dv[1] dv[2], then equation I: c[1] *6 + c[2] *5 + c[3] *4 + c[4]*3 + c[5] *2 + c[6] *9 + c[7]*8 + c[8]*7 + c[9]*6 + c[10]*5 + c[11]*4 +c[12] *3+ dv[1] *2 + dv[2] equation II: c[1] *5 + c[2] *4 + c[3] *3 + c[4]*2 + c[5] * 9 + c[6] * 8 + c[7]*7 + c[8]*6 + c[9]*5 + c[10]*4 + c[11]*3 +c[12] *2+ dv[1] */ for (var i = 0; i < multiplier1.length; i++) { sumValueAlgo1 += parseInt(valueArray[i], 10) * multiplier1[i]; } for (var j = 0; j < multiplier2.length; j++) { sumValueAlgo2 += parseInt(valueArray[j], 10) * multiplier2[j]; } // get the modulus of 11 with the result from equation 1 and 2 validityAlgo1 = sumValueAlgo1 % 11; validityAlgo2 = sumValueAlgo2 % 11; // return CNPJ validation as true only when Modulus 11 of equation I and II is zero or // 14th digit is 0 and modulus for equation I is 1 and 13th digit is zero and modulus for equation II is 1 if ((validityAlgo1 === 0 || validityAlgo1 === 1 && parseInt(valueArray[13], 10) === 0) && (validityAlgo2 === 0 || validityAlgo2 === 1 && parseInt(valueArray[12], 10) === 0)) { return true; } return false; } module.exports = exports['default'];