clabe-check
Version:
Lightweight validator for the CLABE banking standard for the numbering of bank accounts in Mexico.
36 lines (26 loc) • 837 B
JavaScript
var util = require('util');
var VALID_LENGTH = 18;
function BadInputError(message) {
'use strict';
this.name = 'BAD_INPUT';
this.message = message;
Error.captureStackTrace(this, BadInputError);
}
util.inherits(BadInputError, Error);
var generateChecksum = function(input) {
'use strict';
var checksum = 0;
var weights = [3,7,1];
input.split('').forEach(function(number, index) {
number = parseInt(number, 10);
checksum += (number * weights[index % 3]) % 10;
});
return (10 - (checksum % 10)) % 10;
};
module.exports = function(input) {
if (typeof input !== 'string') return false;
if (input.length !== VALID_LENGTH) return false;
var checksum = parseInt(input[input.length - 1], 10);
var validator = input.substring(0, VALID_LENGTH - 1);
return generateChecksum(validator) === checksum;
};