总数字不一致

时间:2011-08-18 13:10:36

标签: php

我使用以下代码来获取随机十六进制值。但输出不一致 有时它会返回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/>";

3 个答案:

答案 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)做同样的事情但速度更快。