documentid-checksum-validator
Version:
checksum validation for government doc ids
51 lines (43 loc) • 1.99 kB
JavaScript
// Function to validate the CNPJ in BR
;
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'];