1

我有一个名为“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";
    }
}
4

3 回答 3

3

PHPrand()在某些平台上只有 15 位。您可以使用以下方法将其增加到 30 位:

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

这将为您提供 0..1073741823 范围内的数字,仍然均匀分布。如果您需要比更大范围更具体的东西,那么之后您将不得不做一些更高级的数学运算。你也可以考虑 mt_rand()。

于 2013-06-02T11:18:51.393 回答
1

来自PHP rand()

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

因此,不要使用默认值并指定 min 和 max

int rand ( int $min , int $max )
于 2013-06-02T11:14:28.813 回答
0

一个16位的RNG可以通过重复的乘加产生一个任意位数的均匀分布的随机数。示例(伪代码):

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

只要ans能容纳结果,你就可以用这种方式做出任意大小的均匀分布的随机数。显然,您要确保处理溢出,并限制最后的位数。

于 2013-06-02T11:26:18.613 回答