【问题标题】:Generate random between alphanumeric min and max in PHP在 PHP 中生成字母数字最小值和最大值之间的随机数
【发布时间】:2015-12-12 15:56:04
【问题描述】:

我正在寻找像 mt_rand 这样的方法来生成随机值,但在两个字母数字值而不是整数之间。

例如,rand(g3j3j4k5, z9kDDkks8f8d)

我尝试通过base_convert 将字母数字值转换为整数。除此之外,它有点矫枉过正,有时整数超过 15 位,因此在 PHP rand 函数中不起作用。

注意:这不是要制作一个给定长度的随机字符串。该值应该在两个给定值之间,就像一个介于 min 和 max 整数之间的随机数。

【问题讨论】:

  • 您想要多长时间?只需一个 for 循环并选择有效的随机字符
  • @EdHeal 怎么样?这不仅仅是选择字符,因为长度、最小值和最大值取决于限制值。
  • 您的字母数字值的确切顺序是什么?喜欢:A-Za-z0-9a-zA-Z0-9 ?并且应该是字母和数字混合(例如rand(0, "n")应该可以吗?)
  • @Rizier123 根本没有订单。字母数字被视为值(就像它们对应的数值一样)。
  • @All 你的意思是 ASCII 表示?如果是,则意味着您还想要] 等等,如果范围是从Aa?还是只有字母数字值?

标签: php random


【解决方案1】:

这应该适合你:

在这里,我将$min$max 拆分为带有str_split() 的数组,并使用array_map() 循环遍历两个数组的每个字符。

在那里,我使用strpos() 获取字符的位置,并返回该特定范围内的随机字母数字字符。如果 min 大于 max 我只是从整个范围内返回一个随机字符。

代码:

<?php

    function alphanum_rand($min = "", $max = ""){
        $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

        $random = array_map(function($minC, $maxC)use($chars){
            if(($minKey = strpos($chars, $minC)) < ($maxKey = strpos($chars, $maxC)))
                return $chars[mt_rand($minKey, $maxKey)];
            else
                return $chars[mt_rand(0, strlen($chars))];
        }, str_split($min), str_split($max));

        return implode("", $random);

    }

    echo alphanum_rand("g3j3j4k5", "z9kDDkks8f8d");

?>

【讨论】:

    【解决方案2】:

    您可以尝试一个简单的 PHP 函数并定义一个随机字符串字母数字,也可以包含特殊字符。 For 循环将为你创造奇迹 :)

    function RandomString($size)
    {
        $chars    = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
        $string        = array();
        $alphaLength = strlen($chars) - 1;
        for ($i = 0; $i < $size; $i++) {
            $n      = rand(0, $alphaLength);
            $string[] = $chars[$n];
        }
        return implode($string);
    }
    

    然后用你需要的大小简单地调用它。

    <?php
        echo RandomString(5); // Length of strings
    ?>
    

    【讨论】:

    • 我认为这不是 OP 想要的,也许你想再读一遍这个问题。
    猜你喜欢
    • 2021-02-19
    • 1970-01-01
    • 2011-02-09
    • 2023-03-25
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    相关资源
    最近更新 更多