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