我有一个问题,我试图用PHP生成一个5或7个字符长的数字代码,但下面的代码确实包括字母,我只需要数字,提前谢谢
$newgid = substr(md5(microtime()),rand(0,9),5);
我会使用rand()
生成0到99999之间的数字并将其视为字符串。
$newgid = sprintf('%05d', rand(0, 99999));
您可以使用以下代码轻松生成5位数代码,我相信您可以从这里开始如何使其长7位数。
$string='';
for($i=0;$i<5;$i++)
{
$string.=rand(0,9);
}
echo $string;
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;
}
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;
}
这是一个短而甜的功能,它将产生一系列所需长度的数字。
如果您不介意数字从10000而不是零开始,这是最短的方式:
mt_rand(10000, 99999)
对于遇到此问题的未来读者,我建议如下:
function generateNumericString(INT $len, STRING $str = '') {
if (strlen($str) < $len) {
return generateNumericString($len, $str . random_int(0, 9));
}
return $code;
}
上面的函数使用递归而不是使用循环;它连续调用自身,向字符串添加一个数字,直到字符串长度达到指定值。无论何时何地,您都可以通过调用以下方式生成任意长度的字符串(即5)。
generateNumericString(5);
另外,该方法允许序列中的第一个数字包括0。
虽然我更喜欢第一种方法,但如果您知道在字符串中绝对不需要超过5个数字,那么您在技术上可以实现相同的目标:
$n = substr(random_int(100000, 199999), 1);
这将生成一个6位整数,然后将其转换为字符串并返回第一个数字后的所有内容。删除第一个数字会将0保留为可能的第一个字符。
编辑:random_int()
用于代替其他方法,以确保生成的数字是cryptographically secure。