| 'use strict'; |
| |
| /* global crypto:true */ |
| var crypto = require('crypto'); |
| |
| // This string has length 32, a power of 2, so the modulus doesn't introduce a |
| // bias. |
| var _randomStringChars = 'abcdefghijklmnopqrstuvwxyz012345'; |
| module.exports = { |
| string: function(length) { |
| var max = _randomStringChars.length; |
| var bytes = crypto.randomBytes(length); |
| var ret = []; |
| for (var i = 0; i < length; i++) { |
| ret.push(_randomStringChars.substr(bytes[i] % max, 1)); |
| } |
| return ret.join(''); |
| } |
| |
| , number: function(max) { |
| return Math.floor(Math.random() * max); |
| } |
| |
| , numberString: function(max) { |
| var t = ('' + (max - 1)).length; |
| var p = new Array(t + 1).join('0'); |
| return (p + this.number(max)).slice(-t); |
| } |
| }; |