PHP rand 生成零,即使范围应该是 2 到 36?

发布于 2024-11-06 02:54:28 字数 459 浏览 0 评论 0 原文

for ($i = 1; $i <= $numITER; $i++) {
    $val = rand(2,36);

    switch (TRUE) {
        case ($val<=10):
            $vercodeTEMP.=$val;
            break;
        case ($val>10):
            if ($val != 25 && $val != 19) {
                $vercodeTEMP.=chr(54+$val);
            } else {
                $i=$i-1;
            }
            break;
    }
}

我基本上试图避免 0、1 以及字母 O 和 I。当 rand 范围为 2 到 36 时,这怎么可能给我零?

for ($i = 1; $i <= $numITER; $i++) {
    $val = rand(2,36);

    switch (TRUE) {
        case ($val<=10):
            $vercodeTEMP.=$val;
            break;
        case ($val>10):
            if ($val != 25 && $val != 19) {
                $vercodeTEMP.=chr(54+$val);
            } else {
                $i=$i-1;
            }
            break;
    }
}

I'm basically trying to avoid 0, 1, and the letters O and I. How can this possibly be giving me zero's when the rand range is 2 to 36?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

豆芽 2024-11-13 02:54:28

如果 $val == 10,那么您将把 $val 附加到 $vercodeTEMP 上。

尝试:

for ($i = 1; $i <= $numITER; $i++) {
    $val = rand(2,36);

    if ($val<10) {
        $vercodeTEMP.=$val;
    } else if ($val != 25 && $val != 19) {
        $vercodeTEMP.=chr(54+$val);
    } else {
        $i=$i-1;
    }
}

If $val == 10, then you will append $val onto $vercodeTEMP.

Try:

for ($i = 1; $i <= $numITER; $i++) {
    $val = rand(2,36);

    if ($val<10) {
        $vercodeTEMP.=$val;
    } else if ($val != 25 && $val != 19) {
        $vercodeTEMP.=chr(54+$val);
    } else {
        $i=$i-1;
    }
}
几味少女 2024-11-13 02:54:28

我基本上试图避免使用 0、1 以及字母 O 和 I

不搞乱幻数(除了位置)并使用 PHP 的 range()

$numbers = range(2, 9);
$letters = range('a', 'z');
unset($letters[8], $letters[14]);
$letters = array_merge($letters, array_map('strtoupper', $letters));

$pool = array_merge($numbers, $letters);

shuffle($pool);

$captcha = join(array_slice($pool, 0, $numITER)); // e.g. 2ESQcnMTNy

键盘

I'm basically trying to avoid 0, 1, and the letters O and I

What about not messing with magic numbers (besides position) and using PHP's range()?

$numbers = range(2, 9);
$letters = range('a', 'z');
unset($letters[8], $letters[14]);
$letters = array_merge($letters, array_map('strtoupper', $letters));

$pool = array_merge($numbers, $letters);

shuffle($pool);

$captcha = join(array_slice($pool, 0, $numITER)); // e.g. 2ESQcnMTNy

CodePad.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文