用密钥获取随机数

时间:2015-08-03 20:24:54

标签: php random

我需要获得mt_srandmt_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位

由于

1 个答案:

答案 0 :(得分:0)

仅使用mt_srand()一次。它的目的是为一个数字生成器播种,不断地用相同类型的值播种它,相同的比特长度将导致数字真正随机的问题。

由于您传入的字符串有可能type juggledmt_srand()所需的int,因此有时字符串将评估为正确的数字,但大多数情况下它将评估为0null

根据crc32()函数的速度,mt_rand()可能会收到相同的初始值(可能为0)和相同的时钟节拍(这是mt_rand()用于生成随机数的内容)将产生相同的数字。

在许多情况下,您甚至不需要为随机数生成器播种,因为PHP会为您处理。

mt_srand()

  

注意:不需要使用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);