首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个代码生成的随机代码有时存储为7位而不是8位

为什么这个代码生成的随机代码有时存储为7位而不是8位
EN

Stack Overflow用户
提问于 2013-03-14 21:03:29
回答 2查看 152关注 0票数 4

下面的代码生成8位数,但在db中存储时,有时会存储为7 digits.the db,列宽取为int(11),db为mysql(5.0.45)

代码语言:javascript
复制
srand ((double) microtime( )*1000000);
 $maxid = rand(0,100000000);
 $mtidno = str_pad($maxid,8);
 $shuffled = str_shuffle($mtidno);
 echo  $shuffled;
EN

回答 2

Stack Overflow用户

发布于 2013-03-14 21:05:13

首先,通过像那样使用str_pad,您引入了空格,它可能会进入您的“随机”数字的中间。

将您的str_pad调用更改为:

代码语言:javascript
复制
str_pad($maxid, 8, "0");

去掉那些空格。但请注意,其他问题提供了创建随机8位数的更好方法。

然后,当你的随机结果以0开始时,它们就会消失。

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

票数 5
EN

Stack Overflow用户

发布于 2013-03-14 21:20:06

我很惊讶你竟然能拿到7位数。填充不会简单地将空格附加到右侧吗?如果rand函数返回1,会发生什么?

你可能会得到7到8位数字,仅仅是因为纯粹的运气--随机性。尝试一段时间,你应该会开始看到1到8位数字之间的每一个组合。

再加上巴特所说的,领先的0将会简单地下降。

说到这里,如果你有兰特,为什么你需要洗牌呢?以下内容应该足够了。

代码语言:javascript
复制
srand ((double) microtime( )*1000000);
$maxid = rand(10000000,99999999);
echo $maxid; 

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

代码语言:javascript
复制
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>";

请看下面的输出,它清楚地显示了混洗之后的空格。

代码语言:javascript
复制
0
0
12207
20 21 7
82397
78 329
64086
64086
42724
4 4 2 27
21362
216 32
57983
7 3 598
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15410070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档