2012-09-24 30 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