我有一个名为“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";
}
}
答案 0 :(得分:3)
PHP的rand()
在某些平台上只有15位。您可以使用以下命令将其增加到30位:
((rand() << 15) ^ rand())
这将为您提供0..1073741823范围内的数字,仍然均匀分布。如果你需要更具体而不仅仅是更大范围的东西,那么你必须在那之后做一些更精彩的数学运算。您可能还会考虑mt_rand()。
答案 1 :(得分:1)
注意:在某些平台(如Windows)上,getrandmax()仅为32767。 如果需要大于32767的范围,请指定min和max 允许您创建大于此范围的范围,或考虑使用 mt_rand()代替。
因此,不要使用默认值和特定的最小值和最大值
int rand ( int $min , int $max )
答案 2 :(得分:0)
通过重复乘法和加法,可以从16位RNG生成具有任意位数的均匀分布的随机数。示例(伪代码):
ans=0;
mult = MAXRAND+1;
for(i=0;i<5;i++) ans=mult*ans+rand();
只要ans
可以保存结果,就可以通过这种方式使任意大小均匀分布的随机数。显然你想确保你处理溢出,并限制最后的位数。