我使用以下代码来获取随机十六进制值。但输出不一致 有时它会返回6位有时5位
function generateHexValue($length=6)
{
$chars = "0123456789abcdef";
$i = 0;
$str = "";
while ($i<$length) {
$str .= $chars[mt_rand(0,strlen($chars))];
$i++;
}
return $str;
}
$col=generateHexValue();
echo "<div style='background-color:#".$col."; width:100px; height:100px;'></div>";
echo $col."<br/>";
答案 0 :(得分:6)
您对mt_rand()
的来电最多为strlen($chars)-1
,而不是strlen($chars)
。 mt_rand
的最大值包含在内。您可以在$chars
数组的末尾获得一个索引(例如$chars[16]
,这是$chars
的未定义偏移量。不确定PHP会做什么。
答案 1 :(得分:5)
那是因为mt_rand(0,strlen($chars))
返回0到16之间的数字(包括0和16),但是你的$chars
字符串只有0到15的偏移量。这是一个经典的一个错误。
答案 2 :(得分:-2)
substr(md5(mt_rand()), 0, 6)
做同样的事情但速度更快。