发布日期:2018-03-26
PHP如何随机生成器字符串?+ 查看更多
PHP如何随机生成器字符串?
+ 查看更多
发布日期:2017-04-01 16:20
分类:PHP
浏览次数:257
我想用PHP生成随机字符串,但是通过下面这段代码我却得不到任何结果:
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
代码错在哪了了?
回答
上述代码有两个错误:
1.当你打印变量 $randstring
时,它不在作用域范围内。
2.那些字符并没有在循环中完成拼接。
这是改正后的代码:
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
以下代码输出随机字符串:
//打印这个随机字符串
//你还可以给它传入一个你希望的字符串长度
echo generateRandomString();
请注意,这种方法只能生成可预测的随机字符串。如果你想生成安全的令牌,需要以下代码:
/**
* Generate a random string, using a cryptographically secure
* pseudorandom number generator (random_int)
*
* For PHP 7, random_int is a PHP core function
* For PHP 5.x, depends on https://github.com/paragonie/random_compat
*
* @param int $length How many characters do we want?
* @param string $keyspace A string of all possible characters
* to select from
* @return string
*/
function random_str($length, $keyspace = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
{
$str = '';
$max = mb_strlen($keyspace, '8bit') - 1;
for ($i = 0; $i < $length; ++$i) {
$str .= $keyspace[random_int(0, $max)];
}
return $str;
}
调用方式如下:
$a = random_str(32);
$b = random_str(8, 'abcdefghijklmnopqrstuvwxyz');