简单地说,我想从一个MD5散列生成一个1-100之间的随机数。
我将始终使用电子邮件字符串作为参数。
原因是我想创建一个简单的a/B测试,以确定一个特定的电子邮件布局取决于返回的数字。
这是我的解决方案,但我不知道它是否准确,坦率地说,我也不完全确定我是否知道自己在做什么。
parseInt(crypto.createHash('md5').update('example@gmail.com').digest("hex"), 16) % 10**2
52 is returned
有没有人能指引我正确的方向,详细解释一下正在发生的事情? 有没有更好的办法?
谢了。
如果您使用程序库seedrandom,您可以为数字生成器植入种子。
植入数字生成器可以确保从“刮刮乐”开始时,数字始终以相同的顺序生成。
它在自动生成的迷宫和游戏关卡中非常有用(想想我的世界里的关卡种子)
然后,使用这个库,您可以执行如下操作,以获得一致的结果。
null
var myrng = new Math.seedrandom('example@example.com');
console.log("int 1: " + myrng.int32());
console.log("int 2: " + myrng.int32());
console.log("int 3: " + myrng.int32());
console.log("int 4: " + myrng.int32());
console.log('round 2, repeating the above with same seed');
myrng = new Math.seedrandom('example@example.com');
console.log("int 1: " + myrng.int32());
console.log("int 2: " + myrng.int32());
console.log("int 3: " + myrng.int32());
console.log("int 4: " + myrng.int32());
console.log('round 3, repeating the above with a different seed');
myrng = new Math.seedrandom('#example@example.com');
console.log("int 1: " + myrng.int32());
console.log("int 2: " + myrng.int32());
console.log("int 3: " + myrng.int32());
console.log("int 4: " + myrng.int32());
<script src="//cdnjs.cloudflare.com/ajax/libs/seedrandom/3.0.5/seedrandom.min.js">
</script>