south-africa-national-id-validation
Version:
Checks the South Africa National ID input is valid and allows you to return specific error messages
2 lines (1 loc) • 2.03 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=nationalIdNumber,exports.isValidDate=exports.mod10CheckDigit=void 0;function _slicedToArray(a,b){return _arrayWithHoles(a)||_iterableToArrayLimit(a,b)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function _iterableToArrayLimit(a,b){var c=[],d=!0,e=!1,f=void 0;try{for(var g,h=a[Symbol.iterator]();!(d=(g=h.next()).done)&&(c.push(g.value),!(b&&c.length===b));d=!0);}catch(a){e=!0,f=a}finally{try{d||null==h["return"]||h["return"]()}finally{if(e)throw f}}return c}function _arrayWithHoles(a){if(Array.isArray(a))return a}var mod10CheckDigit=function(a){var b=Number.parseInt,c=a.number;if("string"!=typeof c)throw new Error("Input should be string");var d=c.split("").map(function(a,d){if(0!=(d+c.length)%2){var e=2*b(a,10);return 9<e?e-9:e}return a}).reduce(function(a,c){return b(a,10)+b(c,10)});return 9*d%10};exports.mod10CheckDigit=mod10CheckDigit;var isValidDate=function(a){var b=new Date(a),c=a.split("/"),d=_slicedToArray(c,3),e=d[0],f=d[1],g=d[2];return!(b.getFullYear()!=e||b.getMonth()!=f-1||b.getDate()!=g)};exports.isValidDate=isValidDate;var NATIONAL_ID_VALID_LENGTH=13;function nationalIdNumber(a){var b=a.number,c=a.minAge,d=void 0===c?18:c,e=a.errorMessages,f=void 0===e?{format:!1,date:!1,age:!1,checksum:!1,short:!1,long:!1}:e;if("string"!=typeof b)throw new Error("Input should be string");if(b.length<NATIONAL_ID_VALID_LENGTH)return f.short;if(b.length>NATIONAL_ID_VALID_LENGTH)return f.long;var g=/^\d{2}[0-1][0-9][0-3]\d\d{4}[0-1]\d{2}$/;if(!g.test(b))return f.format;var h=new Date().getFullYear().toString(),i=b.substring(0,2)<h.substring(2,4)?"20":"19",j="".concat(i).concat(b.substring(0,2)),k=b.substring(2,4),l=b.substring(4,6);if(!isValidDate("".concat(j,"/").concat(k,"/").concat(l)))return f.date;if(h-j<d)return f.age;var m=b.substring(0,12),n=Number.parseInt(b.substring(12,13),10);return!(mod10CheckDigit({number:m})!==n)||f.checksum}