为什么此代码生成的随机代码存储为7位数而不是8位数

时间:2013-03-14 13:03:29

标签: php mysql

下面的代码生成八位数,但是在db中存储时有时存储为7位数.db列宽度为int(11),db为mysql(5.0.45)

srand ((double) microtime( )*1000000);
 $maxid = rand(0,100000000);
 $mtidno = str_pad($maxid,8);
 $shuffled = str_shuffle($mtidno);
 echo  $shuffled;

2 个答案:

答案 0 :(得分:5)

首先,通过使用这样的str_pad,您将引入空格,这些空格可以进入“随机”数字的中间。

str_pad来电更改为:

str_pad($maxid, 8, "0");

摆脱空间。但请注意,其他问题提供了创建随机8位数字的更好方法。

然后,当您的随机播放结果以0开头时,它们会下降。

要解决此问题,您可以在数据库中使用CHAR(8)。然后它将显示前导零。

答案 1 :(得分:1)

我很惊讶你得到7位数。填充不会简单地向右边添加空格吗?如果rand函数返回1会发生什么?

你可能只是靠纯粹的运气获得7位和8位数 - 随机性。尝试一段时间,你应该开始看到1到8位数的每个组合。

除了巴特所说的那样,领先的0只会下降。

说到这,如果你有兰特,你为什么需要洗牌?以下就足够了。

srand ((double) microtime( )*1000000);
$maxid = rand(10000000,99999999);
echo $maxid; 

测试代码(用于说明错误的逻辑)

srand ((double) microtime( )*1000000);

for($i = 0; $i < 1000000; $i++)
{
    $maxid = rand(0,100000000);
    if($maxid < 100000){
        echo  $maxid . "<br>";
        $mtidno = str_pad($maxid,8);
        $shuffled = str_shuffle($mtidno);
        echo  $shuffled . "<br>";  
    }
}
echo "done <br>";

请参阅以下输出,该输出清楚地显示了随机播放后的空格。

0
0
12207
20 21 7
82397
78 329
64086
64086
42724
4 4 2 27
21362
216 32
57983
7 3 598