UNPKG

anybase

Version:

convert from and to numeric bases from base 2 to base 62

114 lines (104 loc) 3.06 kB
// Generated by CoffeeScript 1.6.3 (function() { var base_to_dec, char, chars, dec_to_base, i, map, _i, _j, _k, _len; chars = (function() { var _i, _results; _results = []; for (i = _i = 0; _i < 10; i = ++_i) { _results.push(String(i)); } return _results; })(); for (i = _i = 65; _i <= 90; i = ++_i) { chars.push(String.fromCharCode(i)); } for (i = _j = 97; _j <= 122; i = ++_j) { chars.push(String.fromCharCode(i)); } map = {}; for (i = _k = 0, _len = chars.length; _k < _len; i = ++_k) { char = chars[i]; map[char] = i; } base_to_dec = function(n, base) { var n10, _l, _len1; n10 = 0; for (_l = 0, _len1 = n.length; _l < _len1; _l++) { char = n[_l]; n10 = n10 * base + map[char]; } return n10; }; dec_to_base = function(n, base) { var mod, nx; nx = ''; while (n > 0) { mod = n % base; n = (n - mod) / base; nx = chars[mod] + nx; } return nx; }; module.exports = function(base, n, orig_base, digits_min, digits_max) { var int_check, v, _l, _len1, _ref; if (orig_base == null) { orig_base = 10; } if (digits_min == null) { digits_min = 0; } if (digits_max == null) { digits_max = 0; } int_check = function(n, min, max) { if (min == null) { min = false; } if (max == null) { max = false; } return !(isNaN(n) || Math.round(n) !== n || (min !== false && n < min) || (max !== false && n > max)); }; base = Number(base); orig_base = Number(orig_base); digits_min = Number(digits_min); digits_max = Number(digits_max); if (!int_check(base, 2, 62)) { throw new Error('Invalid target numeric base specified: `' + base + '` (expected: 2 .. 62)'); } if (!int_check(orig_base, 2, 62)) { throw new Error('Invalid original numeric base specified: `' + orig_base + '` (expected: 2 .. 62)'); } if (!int_check(digits_min, 0, 64)) { throw new Error('Invalid minimum digits requested: `' + digits_min + '` (expected: 1 .. 64)'); } if (!int_check(digits_max, 0, 64)) { throw new Error('Invalid minimum digits requested: `' + digits_max + '` (expected: 1 .. 64)'); } _ref = String(n); for (_l = 0, _len1 = _ref.length; _l < _len1; _l++) { char = _ref[_l]; if ((v = map[char]) > orig_base || (v == null)) { throw new Error('Invalid digit(s) in number `' + n + '` for numeric ' + 'base `' + orig_base + '` (expected positive integer ' + 'composed of alphanumeric characters only)'); } } if (orig_base !== 10) { n = base_to_dec(n, orig_base); } else { n = Number(n); } if (base !== 10) { n = dec_to_base(n, base); } while (digits_min && String(n).length < digits_min) { n = '0' + n; } if (digits_max && String(n).length > digits_max) { n = String(n).substr(0, digits_max); } if (n === '') { return '0'; } return n; }; }).call(this);