我正在使用它从字符串池中获取随机字符:
$charset=str_shuffle('./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789');
$charsetLength=strlen($charset)-1;
$chosen=$charset[rand(0,$charsetLength)];
rand 和 str_shuffle 函数产生伪随机结果。
有没有更好的方法来获取随机字符
简短的回答:不,那很好。
长答案:
如果您确实需要生成(伪)随机字符串,您可以查看mcrypt扩展并使用mcrypt_create_iv()
with /dev/urandom
,您可以按原样使用二进制生成的种子或将其转换为 base64 以获得 ascii 表示。
请注意,没有办法生成真正的随机数,您可能只是增加熵。但在大多数情况下,这已经足够了......
rand()
它会很好,你永远不会遇到问题。如果你真的不能忍受,那就mt_rand()
更好了,就像 Somnath 建议的那样。使用mt_rand()
,
您可以通过以下方式获取随机字符的索引:
$charIndex = mt_rand(0, strlen($string));
$char = $string[$charIndex]; // or substr($string, $charIndex, 1)
许多旧 libcs 的随机数生成器具有可疑或未知的特性并且速度很慢。默认情况下,PHP 使用带有 rand() 函数的 libc 随机数生成器。mt_rand() 函数是它的替代品。它使用具有已知特性的随机数生成器,使用 » Mersenne Twister,生成随机数的速度比 libc rand() 提供的平均速度快四倍。
如果在没有可选最小值的情况下调用,最大参数 mt_rand() 返回一个介于 0 和 mt_getrandmax() 之间的伪随机值。例如,如果您想要一个介于 5 和 15(含)之间的随机数,请使用 mt_rand(5, 15)。
而且不需要str_shuffle。mt_rand 在随机数之间进行洗牌。
来源: