UNPKG

routing-validator

Version:

Validates the MICR format of an ABA routing number.

98 lines (83 loc) 2.84 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global.routingValidator = factory()); }(this, (function () { 'use strict'; function checksum(number) { if (number && typeof number === 'string' && /^\d{8}$/.test(number)) { var weights = [3, 7, 1]; var weighedSum = number.split('').reduce(function (previous, current, i) { return previous + weights[i % 3] * parseInt(current, 10); }, 0); var checkdigit = (10 - weighedSum % 10) % 10; return checkdigit.toString(); } return number; } var classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }; var createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var RoutingValidator = function () { function RoutingValidator(routingNumber) { classCallCheck(this, RoutingValidator); this.number = routingNumber && routingNumber.toString(); } createClass(RoutingValidator, [{ key: 'isValid', value: function isValid() { if (!this.number) { throw 'was not constructed with a number'; } if (!/^\d{9}$/.test(this.number)) { this.error = 'Routing Number must be exactly 9 numbers'; return false; } var firstEight = this.number.substring(0, 8); var lastOne = this.number.substring(8, 9); var checkdigit = checksum(firstEight); if (checkdigit !== lastOne) { this.error = 'Routing Number is invalid'; return false; } this.error = ''; return true; } }, { key: 'errorMessage', value: function errorMessage() { if (this.error == null) { this.isValid(); } return this.error; } }, { key: 'routingNumber', get: function get$$1() { return this.number; }, set: function set$$1(routingNumber) { this.number = routingNumber; } }]); return RoutingValidator; }(); return RoutingValidator; })));