首页 > 解决方案 > 如何从 MD5 哈希生成(1-100)之间的随机数

问题描述

简单地说,我想从 MD5 哈希中生成一个介于 1-100 之间的随机数。

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

原因是我想创建一个简单的 a/b 测试来根据返回的数字确定特定的电子邮件布局。

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

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

52 is returned

谁能带领我朝着正确的方向前进并详细解释正在发生的事情?有没有更好的办法?

谢谢。

标签: javascriptnode.jsencryptionmd5sha256

解决方案


如果您使用库seedrandom,您可以为数字生成器播种。
播种数字生成器可确保从“零”开始时数字始终以相同的顺序生成。
它在自动生成的迷宫和游戏关卡中很棒(想想我的世界中的关卡种子)

使用这个库,您可以执行以下操作来获得一致的结果。

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>


推荐阅读