基于PHP中的字符串生成范围内的固定随机数

时间:2017-08-07 23:10:36

标签: php

我需要生成一个随机数或散列,每次基于字符串都是相同的。这很容易使用函数crc32完成,但是,我需要它是一个范围之间的整数,因为随机数将从数组中挑选一个项目。

这是我到目前为止的代码:

$min=0;
$max=count($myarray);
$number = crc32("Joe Jones");

$rnd = '.'.(string)$number;
//(Int((max-min+1)*Rnd+min))
$rand = round(($max-$min+1)*$rnd+$min);

echo $rand;

它似乎有用,但它总是选择较低的数字。它永远不会选择更高的数字。

2 个答案:

答案 0 :(得分:0)

只需使用mod(%)即可。对于任何$x % $n0将确保$n-1$x之间的输出。

$myArray=range(1,1000);
$max=count($myArray); //1000
$number = crc32("Joe Jones"); //2559948711
$rand=$number % $max; //711

还有一个关于crc32的说明:如果你在32位平台上运行它,可能会返回一个负数,所以你可以选择abs(crc32($input))

答案 1 :(得分:-2)

您的crc32函数产生负数。按如下方式更改行:

$number = abs(crc32("Joe Jones"));

这将负数转为正数。此外,如果您的阵列数量很少,您可能需要考虑乘以该数字。这有多高取决于你。