UNPKG

luhn-generator

Version:

A generator of numbers that passes the validation of Luhn algorithm or Luhn formula, also known as the 'modulus 10' or 'mod 10' algorithm

44 lines (35 loc) 1.24 kB
var parse = require('ret'); var types = parse.types; module.exports = function (re, opts) { if (!opts) opts = {}; var replimit = opts.limit === undefined ? 25 : opts.limit; if (isRegExp(re)) re = re.source; else if (typeof re !== 'string') re = String(re); try { re = parse(re) } catch (err) { return false } var reps = 0; return (function walk (node, starHeight) { if (node.type === types.REPETITION) { starHeight ++; reps ++; if (starHeight > 1) return false; if (reps > replimit) return false; } if (node.options) { for (var i = 0, len = node.options.length; i < len; i++) { var ok = walk({ stack: node.options[i] }, starHeight); if (!ok) return false; } } var stack = node.stack || (node.value && node.value.stack); if (!stack) return true; for (var i = 0; i < stack.length; i++) { var ok = walk(stack[i], starHeight); if (!ok) return false; } return true; })(re, 0); }; function isRegExp (x) { return {}.toString.call(x) === '[object RegExp]'; }