Генерация (псевдо) случайных буквенно-цифровых строк - PullRequest
81 голосов
/ 07 сентября 2008

Как я могу создать (псевдо) случайную буквенно-цифровую строку, что-то вроде: 'd79jd8c' в PHP?

Ответы [ 18 ]

1 голос
/ 24 июня 2009

Вы можете использовать следующий код, скопированный из этой статьи . Он аналогичен существующим функциям, за исключением того, что вы можете использовать специальное количество символов:

function random_string()
{
    // 8 characters: 7 lower-case alphabets and 1 digit
    $character_set_array = array();
    $character_set_array[] = array('count' => 7, 'characters' => 'abcdefghijklmnopqrstuvwxyz');
    $character_set_array[] = array('count' => 1, 'characters' => '0123456789');
    $temp_array = array();
    foreach ($character_set_array as $character_set) {
        for ($i = 0; $i < $character_set['count']; $i++) {
            $temp_array[] = $character_set['characters'][rand(0, strlen($character_set['characters']) - 1)];
        }
    }
    shuffle($temp_array);
    return implode('', $temp_array);
}
1 голос
/ 08 марта 2015
function generateRandomString($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}
echo generateRandomString();
0 голосов
public function randomString($length = 8)
{
    $characters = implode([
        'ABCDEFGHIJKLMNOPORRQSTUWVXYZ',
        'abcdefghijklmnoprqstuwvxyz',
        '0123456789',
        //'!@#$%^&*?'
    ]);

    $charactersLength = strlen($characters) - 1;
    $string           = '';

    while ($length) {
        $string .= $characters[mt_rand(0, $charactersLength)];
        --$length;
    }

    return $string;
}
0 голосов
/ 11 мая 2019

Первый список желаемых символов

$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

Используйте функцию str_shuffle ($ string). Эта функция предоставит вам случайно перемешанную строку.

$alpha=substr(str_shuffle($chars), 0, 50);

50 - длина строки.

0 голосов
/ 05 ноября 2018

Современный способ сделать это с помощью типа hint / rand_int для реальной случайности

function random_string(int $size): string
{
    $characters = array_merge(
        range(0, 9),
        range('A', 'Z')
    );

    $string = '';
    $max = count($characters) - 1;
    for ($i = 0; $i < $size; $i++) {
        $string .= $characters[random_int(0, $max)];
    }

    return $string;
}
0 голосов
/ 11 мая 2017

1 строка:

$FROM = 0; $TO = 'zzzz';
$code = base_convert(rand( $FROM ,base_convert( $TO , 36,10)),10,36);
echo $code;
0 голосов
/ 28 декабря 2016

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

$cryptoStrong = true; // can be false
$length = 16; // Any length you want
$bytes = openssl_random_pseudo_bytes($length, $cryptoStrong);
$randomString = bin2hex($bytes);

Здесь вы можете увидеть Документы для openssl_random_pseudo_bytes и Документы для bin2hex

0 голосов
/ 22 июня 2010

Ответ Джереми великолепен. Если, как и я, вы не знаете, как реализовать range (), вы можете увидеть мою версию с помощью range ().

<?php
$character_array = array_merge(range('a', 'z'), range(0, 9));
$string = "";
    for($i = 0; $i < 6; $i++) {
        $string .= $character_array[rand(0, (count($character_array) - 1))];
    }
echo $string;
?>

Это делает то же самое, что и Джереми, но использует объединенные массивы, где он использует строку, и использует count (), где он использует strlen ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...