PHP: Как создать случайную уникальную буквенно-цифровую строку?

317

Как можно создать случайную, уникальную строку, используя числа и буквы для использования в ссылке проверки? Например, когда вы создаете учетную запись на веб-сайте и отправляет вам электронное письмо со ссылкой, и вам нужно нажать эту ссылку, чтобы проверить свою учетную запись... да... один из них.

Как я могу сгенерировать один из тех, кто использует PHP?

Обновление: Просто вспомнил о uniqid(). Это функция PHP, которая генерирует уникальный идентификатор, основанный на текущем времени в микросекундах. Я думаю, что буду использовать это.

  • 0
    Все, что вам нужно, это строки и равномерно распределенные случайные числа.
  • 10
    Эй, Эндрю, ты должен выбрать Scott как правильный ответ. Скотт использует криптографически безопасный генератор псевдослучайных чисел OpenSSL (CSPRNG), который выберет наиболее безопасный источник энтропии на основе вашей платформы.
Показать ещё 1 комментарий
Теги:
string
random
uniqueidentifier

25 ответов

270
Лучший ответ

Уведомление о безопасности. Это решение не должно использоваться в ситуациях, когда качество вашей случайности может повлиять на безопасность приложения. В частности, rand() и uniqid() не являются криптографически защищенными генераторами случайных чисел. См. ответ Скотта для безопасной альтернативы.

Если вам не нужно, чтобы он был абсолютно уникальным с течением времени:

md5(uniqid(rand(), true))

В противном случае (если вы уже определили уникальный логин для своего пользователя):

md5(uniqid($your_user_login, true))
  • 86
    Оба метода не гарантируют уникальность - длина ввода функции md5 больше длины ее вывода, и в соответствии с en.wikipedia.org/wiki/Pigeonhole_principle коллизия гарантируется. С другой стороны, чем больше население полагается на хеши для получения «уникального» идентификатора, тем выше вероятность возникновения хотя бы одного столкновения (см. En.wikipedia.org/wiki/Birthday_problem ). Вероятность может быть крошечной для большинства решений, но она все еще существует.
  • 10
    Это не безопасный метод генерации случайных значений. Смотри ответ Скотта.
Показать ещё 4 комментария
403

Я просто изучал, как решить эту проблему, но также хочу, чтобы моя функция создала токен, который также можно использовать для поиска пароля. Это означает, что мне нужно ограничить способность маркера быть угаданным. Поскольку uniqid основано на времени, и согласно php.net "возвращаемое значение мало отличается от microtime()", uniqid не соответствует критериям. PHP рекомендует использовать openssl_random_pseudo_bytes() вместо этого для генерации криптографически защищенных токенов.

Быстрый, короткий и точечный ответ:

bin2hex(openssl_random_pseudo_bytes($bytes))

который будет генерировать случайную строку буквенно-цифровых символов длиной = $bytes * 2. К сожалению, у этого есть только алфавит [a-f][0-9], но он работает.


Ниже приведена самая сильная функция, которую я мог бы сделать, которая удовлетворяет критериям (это реализованная версия ответа Эрика).
function crypto_rand_secure($min, $max)
{
    $range = $max - $min;
    if ($range < 1) return $min; // not so random...
    $log = ceil(log($range, 2));
    $bytes = (int) ($log / 8) + 1; // length in bytes
    $bits = (int) $log + 1; // length in bits
    $filter = (int) (1 << $bits) - 1; // set all lower bits to 1
    do {
        $rnd = hexdec(bin2hex(openssl_random_pseudo_bytes($bytes)));
        $rnd = $rnd & $filter; // discard irrelevant bits
    } while ($rnd > $range);
    return $min + $rnd;
}

function getToken($length)
{
    $token = "";
    $codeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $codeAlphabet.= "abcdefghijklmnopqrstuvwxyz";
    $codeAlphabet.= "0123456789";
    $max = strlen($codeAlphabet); // edited

    for ($i=0; $i < $length; $i++) {
        $token .= $codeAlphabet[crypto_rand_secure(0, $max-1)];
    }

    return $token;
}

crypto_rand_secure($min, $max) работает как сокращение замены для rand() или mt_rand. Он использует openssl_random_pseudo_bytes, чтобы создать случайное число между $min и $max.

getToken($length) создает алфавит для использования в токене, а затем создает строку длиной $length.

РЕДАКТИРОВАТЬ: Я пренебрег ссылкой на источник - http://us1.php.net/manual/en/function.openssl-random-pseudo-bytes.php#104322

EDIT (PHP7): С выпуском PHP7 в стандартной библиотеке теперь есть две новые функции, которые могут заменить/улучшить/упростить функцию crypto_rand_secure выше. random_bytes($length) и random_int($min, $max)

http://php.net/manual/en/function.random-bytes.php

http://php.net/manual/en/function.random-int.php

Пример:

function getToken($length){
     $token = "";
     $codeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
     $codeAlphabet.= "abcdefghijklmnopqrstuvwxyz";
     $codeAlphabet.= "0123456789";
     $max = strlen($codeAlphabet); // edited

    for ($i=0; $i < $length; $i++) {
        $token .= $codeAlphabet[random_int(0, $max-1)];
    }

    return $token;
}
  • 0
    Я надеюсь, что под «поиском пароля» вы не подразумеваете, что храните пароли в открытом виде. Если это так, то ваша безопасность здесь кажется бессмысленной.
  • 2
    Согласовано. Хранение незашифрованного пароля ужасно! (Я использую blowfish.) Но после того, как токен сгенерирован, он позволяет владельцу токена сбросить пароль, поэтому токен эквивалентен паролю, пока он действителен (и рассматривается как таковой).
Показать ещё 28 комментариев
82

Объектно-ориентированная версия самого пересмотренного решения

Я создал объектно-ориентированное решение на основе ответа Скотт:

<?php

namespace Utils;

/**
 * Class RandomStringGenerator
 * @package Utils
 *
 * Solution taken from here:
 * http://stackoverflow.com/a/13733588/1056679
 */
class RandomStringGenerator
{
    /** @var string */
    protected $alphabet;

    /** @var int */
    protected $alphabetLength;


    /**
     * @param string $alphabet
     */
    public function __construct($alphabet = '')
    {
        if ('' !== $alphabet) {
            $this->setAlphabet($alphabet);
        } else {
            $this->setAlphabet(
                  implode(range('a', 'z'))
                . implode(range('A', 'Z'))
                . implode(range(0, 9))
            );
        }
    }

    /**
     * @param string $alphabet
     */
    public function setAlphabet($alphabet)
    {
        $this->alphabet = $alphabet;
        $this->alphabetLength = strlen($alphabet);
    }

    /**
     * @param int $length
     * @return string
     */
    public function generate($length)
    {
        $token = '';

        for ($i = 0; $i < $length; $i++) {
            $randomKey = $this->getRandomInteger(0, $this->alphabetLength);
            $token .= $this->alphabet[$randomKey];
        }

        return $token;
    }

    /**
     * @param int $min
     * @param int $max
     * @return int
     */
    protected function getRandomInteger($min, $max)
    {
        $range = ($max - $min);

        if ($range < 0) {
            // Not so random...
            return $min;
        }

        $log = log($range, 2);

        // Length in bytes.
        $bytes = (int) ($log / 8) + 1;

        // Length in bits.
        $bits = (int) $log + 1;

        // Set all lower bits to 1.
        $filter = (int) (1 << $bits) - 1;

        do {
            $rnd = hexdec(bin2hex(openssl_random_pseudo_bytes($bytes)));

            // Discard irrelevant bits.
            $rnd = $rnd & $filter;

        } while ($rnd >= $range);

        return ($min + $rnd);
    }
}

Использование

<?php

use Utils\RandomStringGenerator;

// Create new instance of generator class.
$generator = new RandomStringGenerator;

// Set token length.
$tokenLength = 32;

// Call method to generate random string.
$token = $generator->generate($tokenLength);

Пользовательский алфавит

При необходимости вы можете использовать произвольный алфавит. Просто передайте строку с поддерживаемыми символами конструктору или сеттеру:

<?php

$customAlphabet = '0123456789ABCDEF';

// Set initial alphabet.
$generator = new RandomStringGenerator($customAlphabet);

// Change alphabet whenever needed.
$generator->setAlphabet($customAlphabet);

Здесь выходные образцы

SRniGU2sRQb2K1ylXKnWwZr4HrtdRgrM
q1sRUjNq1K9rG905aneFzyD5IcqD4dlC
I0euIWffrURLKCCJZ5PQFcNUCto6cQfD
AKwPJMEM5ytgJyJyGqoD5FQwxv82YvMr
duoRF6gAawNOEQRICnOUNYmStWmOpEgS
sdHUkEn4565AJoTtkc8EqJ6cC4MLEHUx
eVywMdYXczuZmHaJ50nIVQjOidEVkVna
baJGt7cdLDbIxMctLsEBWgAw5BByP5V0
iqT0B2obq3oerbeXkDVLjZrrLheW4d8f
OUQYCny6tj2TYDlTuu1KsnUyaLkeObwa

Я надеюсь, что это поможет кому-то. Ура!

  • 0
    Извините, но как мне запустить эту штуку? Я сделал $obj = new RandomStringGenerator; но какой метод я должен вызвать? Спасибо.
  • 0
    @ sg552, вы должны вызвать метод generate как в примере выше. Просто передайте ему целое число, чтобы указать длину полученной строки.
Показать ещё 3 комментария
28

Эта функция генерирует случайный ключ, используя цифры и буквы:

function random_string($length) {
    $key = '';
    $keys = array_merge(range(0, 9), range('a', 'z'));

    for ($i = 0; $i < $length; $i++) {
        $key .= $keys[array_rand($keys)];
    }

    return $key;
}

echo random_string(50);

Пример вывода:

zsd16xzv3jsytnp87tk7ygv73k8zmr0ekh6ly7mxaeyeh46oe8
  • 5
    Через некоторое время вы попадаете на те же номера
  • 0
    Это не совсем случайно, потому что у него никогда не будет одного и того же chacater более одного раза.
22

Я опаздываю, но я здесь с хорошими исследовательскими данными, основанными на функциях, предоставленных ответом Скотта. Поэтому я создал капельку Digital Ocean только для этого 5-дневного автоматизированного теста и сохранил созданные уникальные строки в базе данных MySQL.

В течение этого периода тестирования я использовал 5 разных длин (5, 10, 15, 20, 50) и +/- 0,5 миллиона записей для каждой длины. Во время моего теста только длина 5 генерировала +/- 3K дубликатов из 0,5 миллиона, а оставшиеся длины не генерировали дубликатов. Поэтому мы можем сказать, что, если мы будем использовать длину 15 или выше с функциями Скотта, тогда мы сможем генерировать высоконадежные уникальные строки. Вот таблица, показывающая мои данные исследования:

Изображение 764

Надеюсь, это поможет.

22

Вы можете использовать UUID (универсальный уникальный идентификатор), он может использоваться для любых целей: от строки аутентификации пользователя до идентификатора транзакции транзакции.

UUID - это 16-октетное (128-разрядное) число. В своей канонической форме UUID представлен 32 шестнадцатеричными цифрами, отображаемыми в пяти группах, разделенных дефисом, в форме 8-4-4-4-12 для всего 36 символов (32 буквенно-цифровых символа и четыре дефиса).

function generate_uuid() {
    return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
        mt_rand( 0, 0xffff ),
        mt_rand( 0, 0x0C2f ) | 0x4000,
        mt_rand( 0, 0x3fff ) | 0x8000,
        mt_rand( 0, 0x2Aff ), mt_rand( 0, 0xffD3 ), mt_rand( 0, 0xff4B )
    );

}

//вызов funtion

$transationID = generate_uuid();

некоторые примерные выходы будут такими:

E302D66D-87E3-4450-8CB6-17531895BF14
22D288BC-7289-442B-BEEA-286777D559F2
51B4DE29-3B71-4FD2-9E6C-071703E1FF31
3777C8C6-9FF5-4C78-AAA2-08A47F555E81
54B91C72-2CF4-4501-A6E9-02A60DCBAE4C
60F75C7C-1AE3-417B-82C8-14D456542CD7
8DE0168D-01D3-4502-9E59-10D665CEBCB2

надеюсь, что это поможет кому-то в будущем:)

  • 0
    Выглядит фантастически, добавлено в мой список!
12

Я использую этот однострочный слой:

base64_encode(openssl_random_pseudo_bytes(3 * ($length >> 2)));

где length - длина искомой строки (делится на 4, в противном случае округляется до ближайшего числа, делящегося на 4)

  • 6
    Он не всегда возвращает только буквенно-цифровые символы. Может содержать символы вроде ==
  • 1
    Если используется в URL, base64url_encode можно использовать base64url_encode , см. Здесь: php.net/manual/en/function.base64-encode.php
7
  • Создайте случайное число, используя ваш любимый случайный номер генератор
  • Умножьте и разделите его получить число, соответствующее числу символов в вашем алфавите кода
  • Получить элемент в этом индексе в ваш кодовый алфавит.
  • Повторите с 1) до тех пор, пока у вас не будет длины, хотите

например (в псевдокоде)

int myInt = random(0, numcharacters)
char[] codealphabet = 'ABCDEF12345'
char random = codealphabet[i]
repeat until long enough
  • 0
    Теоретически говоря, не может ли это потенциально генерировать одну и ту же строку более одного раза?
6

Используйте код ниже, чтобы сгенерировать случайное число из 11 символов или изменить число в соответствии с вашими требованиями.

$randomNum=substr(str_shuffle("0123456789abcdefghijklmnopqrstvwxyz"), 0, 11);

или мы можем использовать пользовательскую функцию для генерации случайного числа

 function randomNumber($length){
     $numbers = range(0,9);
     shuffle($numbers);
     for($i = 0;$i < $length;$i++)
        $digits .= $numbers[$i];
     return $digits;
 }

 //generate random number
 $randomNum=randomNumber(11);
  • 3
    Это никогда не может генерировать строку "aaaaaaaaaaa" или "aaaaabbbbbb". Он просто выбирает подстроку случайной перестановки алфавита. Строка длиной 11 символов имеет только V (11,35) = 288 возможных значений. Не используйте это, если вы ожидаете, что строки будут уникальными!
  • 0
    @Peping, затем do substr(str_shuffle(str_repeat('0123456789abcdefghijklmnopqrstvwxyz', 36)), 0, 11);
4

Вот вам уникальный уникальный генератор идентификаторов. сделанный мной.

<?php
$d=date ("d");
$m=date ("m");
$y=date ("Y");
$t=time();
$dmt=$d+$m+$y+$t;    
$ran= rand(0,10000000);
$dmtran= $dmt+$ran;
$un=  uniqid();
$dmtun = $dmt.$un;
$mdun = md5($dmtran.$un);
$sort=substr($mdun, 16); // if you want sort length code.

echo $mdun;
?>

вы можете повторить любой "var" для своего идентификатора, как вам нравится. но $mdun лучше, вы можете заменить md5 на sha1 для лучшего кода, но это будет очень долго, что вам может не понадобиться.

Спасибо.

  • 6
    В этом случае случайность гарантируется случайным написанным кодом, верно?
  • 3
    да, это своего рода «случайный», потому что это нестандартный, неясный код. Это затрудняет прогнозирование ... но на самом деле он не использует небезопасные части для генерации случайного числа. таким образом, результат технически не является случайным или безопасным.
2

Вот что я использую:

md5(time() . rand());    
// Creates something like 0c947c3b1047334f5bb8a3b7adc1d97b
1

Это простая функция, которая позволяет создавать случайные строки, содержащие буквы и цифры (буквенно-цифровые). Вы также можете ограничить длину строки. Эти случайные строки могут использоваться для различных целей, в том числе: реферальный код, рекламный код, купонный код. Функция зависит от следующих функций PHP: base_convert, sha1, uniqid, mt_rand

function random_code($length)
{
  return substr(base_convert(sha1(uniqid(mt_rand())), 16, 36), 0, $length);
}

echo random_code(6);

/*sample output
* a7d9e8
* 3klo93
*/
1

Для действительно случайных строк вы можете использовать

<?php

echo md5(microtime(true).mt_Rand());

выходы:

40a29479ec808ad4bcff288a48a25d5c

поэтому даже если вы попытаетесь сгенерировать строку несколько раз в одно и то же время, вы получите другой результат.

1

Мне нравится использовать хеш-ключи при обмене ссылками. Я бы рекомендовал использовать microtime и хэширование, используя MD5, так как не должно быть причин, по которым ключи должны быть одинаковыми, поскольку хеши от микропроцесса.

  • $key = md5(rand());
  • $key = md5(microtime());
1

после прочтения предыдущих примеров я придумал следующее:

protected static $nonce_length = 32;

public static function getNonce()
{
    $chars = array();
    for ($i = 0; $i < 10; $i++)
        $chars = array_merge($chars, range(0, 9), range('A', 'Z'));
    shuffle($chars);
    $start = mt_rand(0, count($chars) - self::$nonce_length);
    return substr(join('', $chars), $start, self::$nonce_length);
}

Я дублирую 10-кратный массив [0-9, A-Z] и перемешиваю элементы, после того как я получу случайную начальную точку для substr(), чтобы быть более "креативным":) вы можете добавить [a-z] и другие элементы в массив, дублировать более или менее, быть более креативными, чем я

1
function random_string($length = 8) {
    $alphabets = range('A','Z');
    $numbers = range('0','9');
    $additional_characters = array('_','=');
    $final_array = array_merge($alphabets,$numbers,$additional_characters);
       while($length--) {
      $key = array_rand($final_array);

      $password .= $final_array[$key];
                        }
  if (preg_match('/[A-Za-z0-9]/', $password))
    {
     return $password;
    }else{
    return  random_string();
    }

 }
0

Если вы хотите создать уникальную строку в PHP, попробуйте сделать следующее.

md5(uniqid().mt_rand());

В этом,

uniqid() - генерирует уникальную строку. Эта функция возвращает уникальный идентификатор на основе временной метки в виде строки.

mt_rand() - Генерировать случайное число.

md5() - Генерирует хэш-строку.

0

мы можем использовать эту две строки кода для генерации уникальной строки, которые протестировали около 10000000 раз итерации

  $sffledStr= str_shuffle('abscdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_-+');
    $uniqueString = md5(time().$sffledStr);
0
<?php
function generateRandomString($length = 11) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;

}

?>

выше функция генерирует вам случайную строку длиной 11 символов.

0

Я думаю, что это лучший способ использования.

str_shuffle(md5(rand(0,100000)))
0

Вот что я использую в одном из моих проектов, он отлично работает и генерирует UNIQUE RANDOM TOKEN:

$timestampz=time();

function generateRandomString($length = 60) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}


$tokenparta = generateRandomString();


$token = $timestampz*3 . $tokenparta;

echo $token;

Обратите внимание, что я умножил временную метку на три, чтобы создать путаницу для тех, кто мог бы задаться вопросом, как генерируется этот токен;)

Надеюсь, это поможет:)

  • 0
    «Обратите внимание, что я умножил временную метку на три, чтобы создать путаницу для тех, кому может быть интересно, как генерируется этот токен». Похоже на безопасность через запутывание stackoverflow.com/questions/533965/…
  • 0
    Это не «защита через обфускацию», поскольку временная метка затем добавляется к случайной строке, которая была сгенерирована, и это фактическая последняя строка, которую мы возвращаем;)
0

Я считаю, что проблема со всеми существующими идеями заключается в том, что они, вероятно, уникальны, но не однозначно уникальны (как указано в Dariusz Walczak, ответ на loletech). У меня есть решение, которое на самом деле уникально. Это требует, чтобы ваш script имел какую-то память. Для меня это база данных SQL. Вы также можете просто записать в файл где-нибудь. Существуют две реализации:

Первый метод: имеют два поля, а не 1, которые обеспечивают уникальность. Первое поле - это идентификационный номер, который не является случайным, но является уникальным (первый идентификатор равен 1, второй 2...). Если вы используете SQL, просто определите поле ID с свойством AUTO_INCREMENT. Второе поле не является уникальным, но случайным. Это может быть сгенерировано с помощью любых других техник, о которых уже говорили люди. Идея Скотта была хорошей, но md5 удобна и, вероятно, достаточно хороша для большинства целей:

$random_token = md5($_SERVER['HTTP_USER_AGENT'] . time());

Второй метод: в основном та же идея, но изначально выбирает максимальное количество строк, которые когда-либо будут созданы. Это может быть просто очень большое количество, как триллион. Затем сделайте то же самое, сгенерируйте идентификатор, но ноль положите его так, чтобы все идентификаторы имели одинаковое количество цифр. Затем просто конкатенируйте идентификатор со случайной строкой. Это будет достаточно случайным для большинства целей, но раздел ID гарантирует, что он также уникален.

0
Скотт, да, вы очень хорошо пишете и хорошо решаете! Спасибо.

Мне также требуется генерировать уникальный токен API для каждого пользователя. Следующим является мой подход, я использовал информацию о пользователе (Userid и Username):

public function generateUniqueToken($userid, $username){

        $rand = mt_rand(100,999);
    $md5 = md5($userid.'!(&^ 532567_465 ///'.$username);

    $md53 = substr($md5,0,3);
    $md5_remaining = substr($md5,3);

    $md5 = $md53. $rand. $userid. $md5_remaining;

    return $md5;
}

Пожалуйста, посмотрите и дайте мне знать, если я могу улучшить какое-либо улучшение. Благодаря

-2

Упрощение кода Скотта выше, удалив ненужные циклы, которые замедляются и не делают его более безопасным, чем вызов openssl_random_pseudo_bytes только один раз

function crypto_rand_secure($min, $max)
{
 $range = $max - $min;
 if ($range < 1) return $min; // not so random...
 $log = ceil(log($range, 2));
 $bytes = (int) ($log / 8) + 1; // length in bytes
 $rnd = hexdec(bin2hex(openssl_random_pseudo_bytes($bytes)));
 return $min + $rnd%$range;
}

function getToken($length)
{
 return bin2hex(openssl_random_pseudo_bytes($length)
}
  • 0
    К сожалению, я не могу согласиться с вами, что это соответствующее упрощение функции crypto_rand_secure. Цикл необходим, чтобы избежать смещения по модулю, которое возникает, когда вы берете результат случайно сгенерированного числа, а затем модифицируете его числом, которое делит диапазон. en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#Modulo_bias . Используя цикл для выброса любых чисел вне диапазона и выбора нового числа, это позволяет избежать этого смещения. stackoverflow.com/questions/10984974/...
  • 0
    @ Скотт, этот пост о rand (). Однако, в этом случае, об этом уже позаботился openssl_random_pseudo_bytes, так что цикл в ненужном.
Показать ещё 3 комментария
-2

Вы можете использовать этот код, Надеюсь, это будет полезно для вас.

function rand_code($len)
{
 $min_lenght= 0;
 $max_lenght = 100;
 $bigL = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 $smallL = "abcdefghijklmnopqrstuvwxyz";
 $number = "0123456789";
 $bigB = str_shuffle($bigL);
 $smallS = str_shuffle($smallL);
 $numberS = str_shuffle($number);
 $subA = substr($bigB,0,5);
 $subB = substr($bigB,6,5);
 $subC = substr($bigB,10,5);
 $subD = substr($smallS,0,5);
 $subE = substr($smallS,6,5);
 $subF = substr($smallS,10,5);
 $subG = substr($numberS,0,5);
 $subH = substr($numberS,6,5);
 $subI = substr($numberS,10,5);
 $RandCode1 = str_shuffle($subA.$subD.$subB.$subF.$subC.$subE);
 $RandCode2 = str_shuffle($RandCode1);
 $RandCode = $RandCode1.$RandCode2;
 if ($len>$min_lenght && $len<$max_lenght)
 {
 $CodeEX = substr($RandCode,0,$len);
 }
 else
 {
 $CodeEX = $RandCode;
 }
 return $CodeEX;
}

Подробная информация о Генератор случайных кодов в PHP

Ещё вопросы

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