Skip to content

Commit

Permalink
Company national code validation is added.
Browse files Browse the repository at this point in the history
  • Loading branch information
jmosawy committed Dec 14, 2017
1 parent 7aab86b commit 7a3c4c7
Show file tree
Hide file tree
Showing 4 changed files with 254 additions and 3 deletions.
21 changes: 21 additions & 0 deletions national/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,25 @@ National.prototype.isNationalCodeValid = function (nationalCode) {
return Number(nationalCode.charAt(9)) === (11 - r);
}

/**
* Check if the entered Iranian company national code is valid.
* @param {string} companyNationalCode
* @returns {boolean}
*/
National.prototype.isCompanyNationalCodeValid = function (companyNationalCode) {
if ((companyNationalCode.length !== 11) || (isNaN(Number(companyNationalCode)))) {
return false;
}

const ratios = [29, 27, 23, 19, 17, 29, 27, 23, 19, 17];
const baseNumber = Number(companyNationalCode.charAt(9)) + 2;
let sumOfMultipliedNumber = 0;
for (i = 0; i < 10; i += 1) {
sumOfMultipliedNumber += (Number(companyNationalCode.charAt(i)) + baseNumber) * ratios[i];
}

const r = (sumOfMultipliedNumber % 11) === 10 ? 0 : (sumOfMultipliedNumber % 11);
return (r === Number(companyNationalCode.charAt(10)));
}

module.exports = new National();
221 changes: 219 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ircheck",
"version": "0.3.0",
"version": "0.3.5",
"description": "Node.js validation library for Iranian developers",
"main": "index.js",
"scripts": {
Expand Down
13 changes: 13 additions & 0 deletions test/national-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,17 @@ describe('National Tools', () => {
expect(National.isNationalCodeValid('04120128431')).to.be.equal(false);
});
});

describe('isCompanyNationalCodeValid', () => {
it('should be valid company national code', () => {
expect(National.isCompanyNationalCodeValid('10380284790')).to.be.equal(true);
expect(National.isCompanyNationalCodeValid('14007259837')).to.be.equal(true);
expect(National.isCompanyNationalCodeValid('14007256420')).to.be.equal(true);
});
it('should not be valid company national code', () => {
expect(National.isCompanyNationalCodeValid('1038028479')).to.be.equal(false);
expect(National.isCompanyNationalCodeValid('14006259837')).to.be.equal(false);
expect(National.isCompanyNationalCodeValid('14007256429')).to.be.equal(false);
});
});
});

0 comments on commit 7a3c4c7

Please sign in to comment.