Генерация случайного между буквенно-цифровой мин и макс в PHP

1

Я ищу такой подход, как mt_rand для генерации случайного значения, но между двумя буквенно-цифровыми значениями вместо целых чисел.

Например, rand(g3j3j4k5, z9kDDkks8f8d).

Я попытался преобразовать алфавитно-цифровые значения в целые числа с помощью base_convert. Кроме того, это как-то чрезмерно, иногда целое число более 15 цифр и, следовательно, не работает в функциях PHP rand.

ПРИМЕЧАНИЕ. Речь идет не о создании случайной строки с заданной длиной. Значение должно быть между двумя заданными значениями, точно так же, как случайное число между целыми числами min и max.

  • 0
    Как долго вы хотели бы это? Просто за цикл и выбрать действительные случайные символы
  • 0
    @ EdHeal как? речь идет не только о выборе символов, так как длина, мин и макс варьируются в зависимости от предельных значений.
Показать ещё 4 комментария
Теги:
random

2 ответа

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 и определить случайную строчную буквенную букву, а также включить специальные символы. Для цикла будет делать магию для u :)

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
?>
  • 0
    Я не думаю, что это то, что хочет OP, может быть, вы хотите прочитать вопрос снова.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню