如何根据字符串生成随机数


How to Generate a random number based on a string?

是否可以基于字符串生成伪随机数,这意味着特定字符串将始终返回相同的数字?

您需要的不是随机,而是哈希函数。

散列算法创建输入数据的指纹。哈希通常是不可逆的,即您无法从哈希中重建数据。(然而,如果算法有缺陷,你可以生成冲突,但只要你没有做任何与安全相关的事情,这就没什么好担心的。)

不幸的是,JS中没有实现本机哈希算法,所以您必须实现自己的哈希算法。然而,这里有一篇SO文章展示了一个实现:https://stackoverflow.com/a/7616484/3908235

而且,显然有一个完整的库可以实现常见的算法(感谢@MattGibson)。

如果你想在PHP中实现这一点,那么你可以使用crc32。它不是随机,但它产生的数字会根据字符串的内容而变化。不能100%保证两个不同的字符串会产生不同的数字。

示例:

$number = crc32("http://php.net/manual/en/function.crc32.php");

注意,$number将是一个无符号的32位整数,但PHP将所有整数解释为有符号整数,在32位环境(可能返回负数和正数)和64位环境(只返回正数)之间,该值的表示方式可能不同。

使用printf将输出格式化以将其输出到html、是一个好主意

printf("%u", $number);

为了比较不同体系结构中生成的值,为了安全起见,还应该使用sprintf格式化字符串:

$numberToStoreShareOrCompare = sprintf("%u", $number);