生成一个具有精确6位数字的随机字符串(显示前0个)

时间:2018-07-13 13:10:35

标签: php

我正在尝试生成一个正好包含6个随机数的字符串。我当前的代码:

$test = sprintf('%6d', rand(1, 1000000));

使用此代码,我得到的字符串有时在开头像" 53280"一样为空。在这种情况下,我希望它产生"053280"。如何实现呢?

3 个答案:

答案 0 :(得分:3)

您应该在转换说明中添加一个0,以表明您想要零填充:

$test = sprintf('%06d', rand(1, 1000000));
//                ^-- here

转换说明记录在the sprintf manual page上。

答案 1 :(得分:2)

您可以将空字符替换为0。

$test = str_replace(" ", "0", sprintf('%6d', rand(1, 1000000)));

答案 2 :(得分:2)

如果您不想使用sprintf(有些则不要!),可以使用以下替代方法:

$test = str_pad(mt_rand(1, 999999),6,0,STR_PAD_LEFT);

示例输出:

736523
024132
003145

在这里使用mt_rand是因为它具有更好的随机数功能(虽然不完美,但比rand更好)。还调整为999999,因为1000000可能会产生7位数。


对所提供的三个答案(Sean,Mine和Aslan)进行10000次迭代的基准测试,这些都是速度的结果:

Sean's Method:   0.005
My Method:       0.006
Aslan's Method:  0.009

因此,最好使用Sean的方法。