如何在PHP中生成10个字符的随机字符串,包括大写字母和数字,这些字母永远不会重复或者重复的可能性最小?例如:34KJ2SCFPS
如果我只考虑数字,那么$randon = time();
可以复制吗?随着时间的推移每毫秒我都不会这样做。还有,有机会吗?
答案 0 :(得分:2)
使用以下代码。
对于数字和字符
$length = 10;
echo substr(str_shuffle('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'),1,$length);
仅限字符
$length = 10;
echo substr(str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZ'),1,$length);
仅限数字
$length = 10;
echo substr(str_shuffle('0123456789'),1,$length);
答案 1 :(得分:1)
您可以使用此代码(从CodeIgniter中的String helper复制)
/**
* Create a "Random" String
*
* @param string type of random string. basic, alpha, alnum, numeric, nozero, unique, md5, encrypt and sha1
* @param int number of characters
* @return string
*/
function random_string($type = 'alnum', $len = 8)
{
switch ($type)
{
case 'basic':
return mt_rand();
case 'alnum':
case 'numeric':
case 'nozero':
case 'alpha':
switch ($type)
{
case 'alpha':
$pool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
break;
case 'alnum':
$pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
break;
case 'numeric':
$pool = '0123456789';
break;
case 'nozero':
$pool = '123456789';
break;
}
return substr(str_shuffle(str_repeat($pool, ceil($len / strlen($pool)))), 0, $len);
case 'md5':
return md5(uniqid(mt_rand()));
case 'sha1':
return sha1(uniqid(mt_rand(), TRUE));
}
}
此:
echo random_string('alnum', 10);
会产生类似于预期结果的内容。
答案 2 :(得分:0)
我使用它(在Model类中),但是主体是相同的
/**
* UUID - generateds an SQL type unique identifier
*/public static function UUID()
{
return sha1(crypt(uniqid(), random_int(1000000, 9999999)));
}
答案 3 :(得分:0)
如果不是为了安全,你可以只用md5 time()或microtime()
$rand = md5(microtime())
你会得到一个32字符的字符串,它看起来是随机的,不应该重复。