提问者:小点点

如何从MD5散列生成(1-100)之间的随机数


简单地说,我想从一个MD5散列生成一个1-100之间的随机数。

我将始终使用电子邮件字符串作为参数。

原因是我想创建一个简单的a/B测试,以确定一个特定的电子邮件布局取决于返回的数字。

这是我的解决方案,但我不知道它是否准确,坦率地说,我也不完全确定我是否知道自己在做什么。

parseInt(crypto.createHash('md5').update('example@gmail.com').digest("hex"), 16) % 10**2

52 is returned

有没有人能指引我正确的方向,详细解释一下正在发生的事情? 有没有更好的办法?

谢了。


共1个答案

匿名用户

如果您使用程序库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>