2013-06-02 46 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可容納的結果,可以使任何大小均勻分佈的隨機數這樣。顯然你想確保你處理溢出,並在最後限制數字的數量。

相關問題