我想创建精确的 5 个随机字符串,并且重复的可能性最小。最好的方法是什么?谢谢。
$rand = substr(md5(microtime()),rand(0,26),5);
这是我最好的猜测——除非你也在寻找特殊字符:
$seed = str_split('abcdefghijklmnopqrstuvwxyz'
.'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
.'0123456789!@#$%^&*()'); // and any other characters
shuffle($seed); // probably optional since array_is randomized; this may be redundant
$rand = '';
foreach (array_rand($seed, 5) as $k) $rand .= $seed[$k];
Example
并且,对于基于时钟的一种(由于它是增量的,因此冲突较少):
function incrementalHash($len = 5){
$charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
$base = strlen($charset);
$result = '';
$now = explode(' ', microtime())[1];
while ($now >= $base){
$i = $now % $base;
$result = $charset[$i] . $result;
$now /= $base;
}
return substr($result, -5);
}
注:增量意味着更容易猜测;如果您将其用作盐或验证令牌,请不要这样做。 “WCWyb”的盐(现在)意味着 5 秒后它是“WCWyg”)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)