rand函数生成5位数字,如何生成11位数字

时间:2013-06-02 11:07:31

标签: php random

我有一个名为“message_group”的表,该表包含“user_one,user_two和hash”字段。哈希是int(11)。使用以下代码,我将值插入此表中。我正在使用rand()函数。我的问题是这个函数只在我表中的哈希字符中插入一个5位数字。我希望这个数字是11位数。如何修改我的代码才能实现?

if( isset($_POST['message']) && !empty($_POST['message'])  ){
    $random_number = rand();

    $check_con = mysql_query("SELECT `hash` FROM `message_group` WHERE (`user_one`='$session_user_id' AND `user_two`='$user_id') OR (`user_one`='$user_id' AND `user_two`='$session_user_id')");

    if( mysql_num_rows($check_con) == 1 ){
        echo"conversation already started";
    }else{
        mysql_query(" INSERT INTO message_group VALUES ('$session_user_id', '$user_id', '$random_number') ");
        echo"conversation started";
    }
}

3 个答案:

答案 0 :(得分:3)

PHP的rand()在某些平台上只有15位。您可以使用以下命令将其增加到30位:

((rand() << 15) ^ rand())

这将为您提供0..1073741823范围内的数字,仍然均匀分布。如果你需要更具体而不仅仅是更大范围的东西,那么你必须在那之后做一些更精彩的数学运算。您可能还会考虑mt_rand()。

答案 1 :(得分:1)

来自PHP rand()

  

注意:在某些平台(如Windows)上,getrandmax()仅为32767。   如果需要大于32767的范围,请指定min和max   允许您创建大于此范围的范围,或考虑使用   mt_rand()代替。

因此,不要使用默认值和特定的最小值和最大值

int rand ( int $min , int $max )

答案 2 :(得分:0)

通过重复乘法和加法,可以从16位RNG生成具有任意位数的均匀分布的随机数。示例(伪代码):

ans=0;
mult = MAXRAND+1;
for(i=0;i<5;i++) ans=mult*ans+rand();

只要ans可以保存结果,就可以通过这种方式使任意大小均匀分布的随机数。显然你想确保你处理溢出,并限制最后的位数。