2013-06-02 44 views
1

我有一个表命名为“message_group”,这表包括“user_one,user_two和哈希”字段。散列是int(11)。通过下面的一段代码,我将值插入到这个表中。我正在使用rand()函数。我的问题是,这个函数只在我的表格中插入一个5位数字的哈希值。我希望这个数字是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"; 
    } 
} 
+0

你需要结果如何均匀分布? – Floris

+0

我只想生成一个11位数字,并且如果每次都可能是唯一的 – 33528

+0

副本显示如何制作一个11位数字。这显然不会每次都是唯一的,所以您必须检查它是否尚未存在于数据库中。 – JJJ

回答

3

PHP的rand()只有15位。您可以使用它提高到30位:

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

这会给你一个号码范围0..1073741823,仍然分布均匀。如果你需要更具体的东西而不仅仅是更大的范围,那么你必须在这之后做一些更奇特的数学。你也可以考虑mt_rand()。

1

PHP rand()

注:在某些平台(如Windows),getrandmax()仅仅是32767 如果您需要一系列大于32767,指定的最小值和最大值将 允许你可以创建一个比这更大的范围,或者考虑使用 mt_rand()来代替。

因此,不要在某些平台上使用默认值和specifi最小和最大

int rand (int $min , int $max) 
0

与可以从通过反复乘法和加法一个16位的RNG生成的数字任意数量的均匀分布的随机数。示例(伪代码):

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

只要ans可容纳的结果,可以使任何大小均匀分布的随机数这样。显然你想确保你处理溢出,并在最后限制数字的数量。

相关问题