我需要获得mt_srand
和mt_rand
的随机数字,但我的代码不能正常工作我有很多时间相同的数字,而不是完全随机
$key = "8f49ba1f21a3d41b2ec7999dd1e246265d6d3f0ccf809695901d34c3b9152991";
$cr = substr($key, 0, 5);
mt_srand(crc32($cr));
$num[0] = mt_rand(1,50);
$cr = substr($key, 5, 10);
mt_srand(crc32($cr));
$num[1] = mt_rand(1,50);
$cr = substr($key, 10, 15);
mt_srand(crc32($cr));
$num[2] = mt_rand(1,50);
crc32对于带有字母数字键的mt_srand有用吗?在本地我使用Windows 32位和服务器是debian 7 64位
由于
答案 0 :(得分:0)
仅使用mt_srand()
一次。它的目的是为一个数字生成器播种,不断地用相同类型的值播种它,相同的比特长度将导致数字真正随机的问题。
由于您传入的字符串有可能type juggled到mt_srand()
所需的int,因此有时字符串将评估为正确的数字,但大多数情况下它将评估为0
或null
。
根据crc32()
函数的速度,mt_rand()
可能会收到相同的初始值(可能为0)和相同的时钟节拍(这是mt_rand()
用于生成随机数的内容)将产生相同的数字。
在许多情况下,您甚至不需要为随机数生成器播种,因为PHP会为您处理。
注意:不需要使用srand()或mt_srand()为随机数生成器播种,因为这是自动完成的。
只需删除mt_srand()
来电或仅保留一个。
$key = "8f49ba1f21a3d41b2ec7999dd1e246265d6d3f0ccf809695901d34c3b9152991";
$num[0] = mt_rand(1,50);
$num[1] = mt_rand(1,50);
$num[2] = mt_rand(1,50);