0

我有一个问题,我试图用 php 生成一个 5 或 7 个字符长的数字代码,但下面的代码确实包含字母,我只需要数字,在此先感谢

$newgid = substr(md5(microtime()),rand(0,9),5);
4

7 回答 7

5

我将使用rand()生成 0 到 99999 之间的数字并将其视为字符串。

$newgid = sprintf('%05d', rand(0, 99999));
于 2013-08-26T12:17:52.440 回答
5

我会简单地使用mt_rand()如下:

<?php
$a = '';
for ($i = 0; $i<7; $i++) 
{
    $a .= mt_rand(0,9);
}
echo $a;
?>

演示!

于 2013-08-26T12:22:49.337 回答
1

您可以使用以下代码很容易地生成一个 5 位数的代码,我相信您可以从这里计算出如何使其长度为 7 位数。

$string='';
for($i=0;$i<5;$i++)
{
    $string.=rand(0,9);
}
echo $string;
于 2013-08-26T12:19:59.887 回答
1
 function randomPrefix($length=5) {       
        $random = "";
        srand((double) microtime() * 1000000);
        $data = "0123456789";
       // $data = "A0B1C2DE3FG4HIJ5KLM6NOP7QR8ST9UVW0XYZ";
        for ($i = 0; $i < $length; $i++) {
            $random .= substr($data, (rand() % (strlen($data))), 1);
        }

        return $random;
    }
于 2013-08-26T12:26:08.253 回答
1

如果您不介意数字从 10000 而不是零开始,这是最短的方法:

mt_rand(10000, 99999)
于 2013-08-26T13:59:16.703 回答
1
function createPin($len){
    $maxNbrStr = str_repeat('9',$len);
    $maxNbr = intval($maxNbrStr);
    $n = mt_rand(0, $maxNbr);
    $pin = str_pad($n, $len, "0", STR_PAD_LEFT);
    return $pin;
}

这是一个简短而有趣的函数,它将产生所需长度的一串数字。

于 2014-06-27T15:05:52.360 回答
0

对于遇到此问题的未来读者,我会推荐如下内容:

function generateNumericString(INT $len, STRING $str = '') {
    if (strlen($str) < $len) {
        return generateNumericString($len, $str . random_int(0, 9));
    }
    return $str;
}

上面的函数不是使用循环,而是使用递归;它不断地调用自己,将单个数字添加到字符串中,直到字符串长度达到指定值。您可以随时随地生成任意长度(即 5)的字符串,只需调用:

generateNumericString(5);

此外,此方法允许序列中的第一个数字包含 0。

虽然我更喜欢第一种方法,但如果您知道字符串中绝对不需要超过 5 个数字,您可以通过以下方式在技术上实现相同的目标:

$n = substr(random_int(100000, 199999), 1);

这会生成一个 6 位整数,然后将其转换为字符串并返回第一个数字之后的所有内容。删除第一个数字会保留 0 作为可能的第一个字符。

编辑: random_int()用于代替其他方法以确保生成的数字在密码学上是安全的。

于 2019-04-11T03:08:29.287 回答