From 8ac7de8784f668abf12ba7718fd601a0ceb559d4 Mon Sep 17 00:00:00 2001 From: Justin Wernick Date: Tue, 6 Jun 2023 22:35:10 +0200 Subject: Reindent files to 2 spaces --- south-african-id-parser.js | 212 ++++++++++++++++++++++----------------------- test/test.js | 126 +++++++++++++-------------- 2 files changed, 169 insertions(+), 169 deletions(-) diff --git a/south-african-id-parser.js b/south-african-id-parser.js index b51d081..9b6d23f 100644 --- a/south-african-id-parser.js +++ b/south-african-id-parser.js @@ -1,131 +1,131 @@ (function (global, factory) { - 'use strict'; - - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - global.saIdParser = factory(); + 'use strict'; + + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + global.saIdParser = factory(); }(this, (function () { - 'use strict'; + 'use strict'; + + return { + parse: parse, + validate: validate, + parseDateOfBirth: parseDateOfBirth, + parseIsMale: parseIsMale, + parseIsFemale: parseIsFemale, + parseIsSouthAfricanCitizen: parseIsSouthAfricanCitizen + }; + + function parse(idNumber) { + var isValid = validate(idNumber); + if (!isValid) { + return { + isValid: false + }; + } return { - parse: parse, - validate: validate, - parseDateOfBirth: parseDateOfBirth, - parseIsMale: parseIsMale, - parseIsFemale: parseIsFemale, - parseIsSouthAfricanCitizen: parseIsSouthAfricanCitizen + isValid: isValid, + dateOfBirth: parseDateOfBirth(idNumber), + isMale: parseIsMale(idNumber), + isFemale: parseIsFemale(idNumber), + isSouthAfricanCitizen: parseIsSouthAfricanCitizen(idNumber) }; + } - function parse(idNumber) { - var isValid = validate(idNumber); - if (!isValid) { - return { - isValid: false - }; - } - - return { - isValid: isValid, - dateOfBirth: parseDateOfBirth(idNumber), - isMale: parseIsMale(idNumber), - isFemale: parseIsFemale(idNumber), - isSouthAfricanCitizen: parseIsSouthAfricanCitizen(idNumber) - }; + function validate(idNumber) { + if (!regexpValidate(idNumber) || !datePartValidate(idNumber) || !controlDigitValidate(idNumber)) { + return false; } - function validate(idNumber) { - if (!regexpValidate(idNumber) || !datePartValidate(idNumber) || !controlDigitValidate(idNumber)) { - return false; - } + return true; + } - return true; + function regexpValidate(idNumber) { + if (typeof(idNumber) !== 'string') { + return false; } + var regexp = /^[0-9]{13}$/; + return regexp.test(idNumber); + } + + function datePartValidate(idNumber) { + var dateOfBirth = parseDateOfBirth(idNumber); + return !!dateOfBirth; + } + + function controlDigitValidate(idNumber) { + var checkDigit = parseInt(idNumber[12], 10); - function regexpValidate(idNumber) { - if (typeof(idNumber) !== 'string') { - return false; - } - var regexp = /^[0-9]{13}$/; - return regexp.test(idNumber); + var oddDigitsSum = 0; + + for (var i = 0; i < idNumber.length - 1; i+=2) { + oddDigitsSum += parseInt(idNumber[i], 10); + } + var evenDigits = ''; + for (var j = 1; j < idNumber.length - 1; j+=2) { + evenDigits += idNumber[j]; } + evenDigits = parseInt(evenDigits, 10); + evenDigits *= 2; + evenDigits = '' + evenDigits; - function datePartValidate(idNumber) { - var dateOfBirth = parseDateOfBirth(idNumber); - return !!dateOfBirth; + var sumOfEvenDigits = 0; + for (var k = 0; k < evenDigits.length; k++) { + sumOfEvenDigits += parseInt(evenDigits[k], 10); } + var total = sumOfEvenDigits + oddDigitsSum; + var computedCheckDigit = 10 - (total % 10); - function controlDigitValidate(idNumber) { - var checkDigit = parseInt(idNumber[12], 10); - - var oddDigitsSum = 0; - - for (var i = 0; i < idNumber.length - 1; i+=2) { - oddDigitsSum += parseInt(idNumber[i], 10); - } - var evenDigits = ''; - for (var j = 1; j < idNumber.length - 1; j+=2) { - evenDigits += idNumber[j]; - } - evenDigits = parseInt(evenDigits, 10); - evenDigits *= 2; - evenDigits = '' + evenDigits; - - var sumOfEvenDigits = 0; - for (var k = 0; k < evenDigits.length; k++) { - sumOfEvenDigits += parseInt(evenDigits[k], 10); - } - var total = sumOfEvenDigits + oddDigitsSum; - var computedCheckDigit = 10 - (total % 10); - - if (computedCheckDigit === 10) { - computedCheckDigit = 0; - } - return computedCheckDigit === checkDigit; + if (computedCheckDigit === 10) { + computedCheckDigit = 0; } + return computedCheckDigit === checkDigit; + } - function parseDateOfBirth(idNumber) { - if (!regexpValidate(idNumber)) { - return undefined; - } - - //get year, and assume century - var currentYear = new Date().getFullYear(); - var currentCentury = Math.floor(currentYear/100)*100; - var yearPart = currentCentury + parseInt(idNumber.substring(0,2), 10); - if (yearPart > currentYear) { - yearPart -= 100; //must be last century - } - - //In Javascript, Jan=0. In ID Numbers, Jan=1. - var monthPart = parseInt(idNumber.substring(2,4), 10)-1; - - var dayPart = parseInt(idNumber.substring(4,6), 10); - - var dateOfBirth = new Date(yearPart, monthPart, dayPart); - - //validate that date is in a valid range by making sure that it wasn't 'corrected' during construction - if (!dateOfBirth || dateOfBirth.getFullYear() !== yearPart || dateOfBirth.getMonth() !== monthPart || dateOfBirth.getDate() !== dayPart) { - return undefined; - } - - return dateOfBirth; + function parseDateOfBirth(idNumber) { + if (!regexpValidate(idNumber)) { + return undefined; } - function parseIsMale(idNumber) { - return !parseIsFemale(idNumber); + //get year, and assume century + var currentYear = new Date().getFullYear(); + var currentCentury = Math.floor(currentYear/100)*100; + var yearPart = currentCentury + parseInt(idNumber.substring(0,2), 10); + if (yearPart > currentYear) { + yearPart -= 100; //must be last century } - function parseIsFemale(idNumber) { - if (!regexpValidate(idNumber)) { - return undefined; - } - return parseInt(idNumber[6], 10) <= 4; + //In Javascript, Jan=0. In ID Numbers, Jan=1. + var monthPart = parseInt(idNumber.substring(2,4), 10)-1; + + var dayPart = parseInt(idNumber.substring(4,6), 10); + + var dateOfBirth = new Date(yearPart, monthPart, dayPart); + + //validate that date is in a valid range by making sure that it wasn't 'corrected' during construction + if (!dateOfBirth || dateOfBirth.getFullYear() !== yearPart || dateOfBirth.getMonth() !== monthPart || dateOfBirth.getDate() !== dayPart) { + return undefined; + } + + return dateOfBirth; + } + + function parseIsMale(idNumber) { + return !parseIsFemale(idNumber); + } + + function parseIsFemale(idNumber) { + if (!regexpValidate(idNumber)) { + return undefined; } + return parseInt(idNumber[6], 10) <= 4; + } - function parseIsSouthAfricanCitizen(idNumber) { - if (!regexpValidate(idNumber)) { - return undefined; - } - return parseInt(idNumber[10], 10) === 0; + function parseIsSouthAfricanCitizen(idNumber) { + if (!regexpValidate(idNumber)) { + return undefined; } + return parseInt(idNumber[10], 10) === 0; + } }))); diff --git a/test/test.js b/test/test.js index 32a8358..83980b1 100644 --- a/test/test.js +++ b/test/test.js @@ -10,77 +10,77 @@ var expect = require('chai').expect; var saIdParser = require('../south-african-id-parser.js'); describe('South African ID Number Parsing', function () { - var validIdNumbers = [{ - idNumber: '9001049818080', - dateOfBirth: new Date(1990, 0, 4), - isMale: true, - isFemale: false, - isSouthAfricanCitizen: true - }, { - idNumber: '1012311412187', - dateOfBirth: new Date(2010, 11, 31), - isMale: false, - isFemale: true, - isSouthAfricanCitizen: false - }]; - var invalidIdNumbers = [{ - idNumber: '9001049881080' //invalid check digit - }, { - idNumber: '9002302419087' //invalid date - }, { - idNumber: '9001049881a83' //has a character in there - }, { - idNumber: '90010498813' //wrong length - }]; + var validIdNumbers = [{ + idNumber: '9001049818080', + dateOfBirth: new Date(1990, 0, 4), + isMale: true, + isFemale: false, + isSouthAfricanCitizen: true + }, { + idNumber: '1012311412187', + dateOfBirth: new Date(2010, 11, 31), + isMale: false, + isFemale: true, + isSouthAfricanCitizen: false + }]; + var invalidIdNumbers = [{ + idNumber: '9001049881080' //invalid check digit + }, { + idNumber: '9002302419087' //invalid date + }, { + idNumber: '9001049881a83' //has a character in there + }, { + idNumber: '90010498813' //wrong length + }]; - it('should correctly validate valid ID numbers', function() { - validIdNumbers.forEach(function(validIdNumber) { - expect(saIdParser.validate(validIdNumber.idNumber)).to.equal(true); - }); + it('should correctly validate valid ID numbers', function() { + validIdNumbers.forEach(function(validIdNumber) { + expect(saIdParser.validate(validIdNumber.idNumber)).to.equal(true); }); - it('should correctly validate invalid ID numbers', function() { - invalidIdNumbers.forEach(function(invalidIdNumber) { - expect(saIdParser.validate(invalidIdNumber.idNumber)).to.equal(false); - }); + }); + it('should correctly validate invalid ID numbers', function() { + invalidIdNumbers.forEach(function(invalidIdNumber) { + expect(saIdParser.validate(invalidIdNumber.idNumber)).to.equal(false); }); - - it('should parse valid date of birth correctly', function() { - validIdNumbers.forEach(function(validIdNumber) { - var parsedDate = saIdParser.parseDateOfBirth(validIdNumber.idNumber); - var expectedDate = validIdNumber.dateOfBirth; - expect(parsedDate.getTime()).to.equal(expectedDate.getTime()); - }); + }); + + it('should parse valid date of birth correctly', function() { + validIdNumbers.forEach(function(validIdNumber) { + var parsedDate = saIdParser.parseDateOfBirth(validIdNumber.idNumber); + var expectedDate = validIdNumber.dateOfBirth; + expect(parsedDate.getTime()).to.equal(expectedDate.getTime()); }); - it ('should parse valid gender correctly', function() { - validIdNumbers.forEach(function(validIdNumber) { - expect(saIdParser.parseIsMale(validIdNumber.idNumber)) - .to.equal(validIdNumber.isMale); - expect(saIdParser.parseIsFemale(validIdNumber.idNumber)) - .to.equal(validIdNumber.isFemale); - }); + }); + it ('should parse valid gender correctly', function() { + validIdNumbers.forEach(function(validIdNumber) { + expect(saIdParser.parseIsMale(validIdNumber.idNumber)) + .to.equal(validIdNumber.isMale); + expect(saIdParser.parseIsFemale(validIdNumber.idNumber)) + .to.equal(validIdNumber.isFemale); }); - it ('should parse valid citizenship correctly', function() { - validIdNumbers.forEach(function(validIdNumber) { - expect(saIdParser.parseIsSouthAfricanCitizen(validIdNumber.idNumber)) - .to.equal(validIdNumber.isSouthAfricanCitizen); - }); + }); + it ('should parse valid citizenship correctly', function() { + validIdNumbers.forEach(function(validIdNumber) { + expect(saIdParser.parseIsSouthAfricanCitizen(validIdNumber.idNumber)) + .to.equal(validIdNumber.isSouthAfricanCitizen); }); + }); - it('should correctly parse valid ID numbers', function() { - validIdNumbers.forEach(function(validIdNumber) { - var info = saIdParser.parse(validIdNumber.idNumber); - expect(info.isValid).to.equal(true); - expect(info.dateOfBirth.getTime()).to.equal(validIdNumber.dateOfBirth.getTime()); - expect(info.isMale).to.equal(validIdNumber.isMale); - expect(info.isFemale).to.equal(validIdNumber.isFemale); - expect(info.isSouthAfricanCitizen).to.equal(validIdNumber.isSouthAfricanCitizen); - }); + it('should correctly parse valid ID numbers', function() { + validIdNumbers.forEach(function(validIdNumber) { + var info = saIdParser.parse(validIdNumber.idNumber); + expect(info.isValid).to.equal(true); + expect(info.dateOfBirth.getTime()).to.equal(validIdNumber.dateOfBirth.getTime()); + expect(info.isMale).to.equal(validIdNumber.isMale); + expect(info.isFemale).to.equal(validIdNumber.isFemale); + expect(info.isSouthAfricanCitizen).to.equal(validIdNumber.isSouthAfricanCitizen); }); + }); - it('should correctly parse invalid ID numbers', function() { - invalidIdNumbers.forEach(function(invalidIdNumber) { - var info = saIdParser.parse(invalidIdNumbers.idNumber); - expect(info).to.deep.equal({isValid: false}); - }); + it('should correctly parse invalid ID numbers', function() { + invalidIdNumbers.forEach(function(invalidIdNumber) { + var info = saIdParser.parse(invalidIdNumbers.idNumber); + expect(info).to.deep.equal({isValid: false}); }); + }); }); -- cgit v1.2.3