2012-09-24 55 views
1

我有一個類似程序的抽獎活動: 用戶將x個令牌放置在一個項目上。這被記錄到數據庫中 USER_ID,ITEM_ID,number_of_tokens在抽獎代碼中用PHP生成真隨機數

到時候畫的,我做了以下內容:

$ballots = array(); 
$users = all users that placed at least one token on Item A. 

foreach($users as $user) 
{ 
    $number_of_ballots = Get number of ballots this User placed on Item A 
    for($i = 1; $i leq $number_of_ballots; $i++) 
    { 
    $ballots[] = $user->id; 
    } 
} 
shuffle($ballots); 
$winner_user_id = mt_rand(0, count($ballots) -1); 

現在我的問題是:

  • 這是否保證隨機選擇?
  • 在物品A上放置10個標記的人是否比在物品A上放置1個標記的人獲得10倍的獲勝機會?

感謝您的幫助。

回答

1

看起來不錯,但mt_rand,雖然比蘭特好,但並不完美。你最好使用一個真正的隨機數發生器,比如http://www.random.org/。其中有Here's a little comparison

此外,如果您正在處理真錢,random.org會提供真實性證書以驗證您選擇的隨機性。

+0

真棒。非常感謝你。 – luv2Code

+0

Random.org是。看起來非常「真實」且可靠。 – luv2Code

1

是的,在僞隨機數發生器的範圍內。 mt_randrand好,但仍然不是真正的隨機。答案是非常「足夠接近」。請注意,由於您隨機挑選了一組中的獲勝者,因此您並不需要shuffle

是的,擁有10個代幣的人比擁有1個代幣的人擁有高10倍的機會。

+0

很好。謝謝。我會看看random.org和http://boallen.com/random-numbers.html – luv2Code