PHP генератор случайных строк - PullRequest
746 голосов
/ 05 декабря 2010

Я пытаюсь создать рандомизированную строку в PHP, и я не получаю абсолютно ничего с этим:

<?php
function RandomString()
{
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $randstring = '';
    for ($i = 0; $i < 10; $i++) {
        $randstring = $characters[rand(0, strlen($characters))];
    }
    return $randstring;
}
RandomString();
echo $randstring;

Что я делаю не так?

Ответы [ 53 ]

4 голосов
/ 01 августа 2014

Еще один однострочник, который генерирует случайную строку из 10 символов с буквами и цифрами.Он создаст массив с range (отрегулируйте второй параметр, чтобы установить размер), зацикливается на этом массиве и назначает случайный ascii-char (диапазон 0-9 или az), затем внедряет массив, чтобы получить строку.

$str = implode('', array_map(function () { return chr(rand(0, 1) ? rand(48, 57) : rand(97, 122)); }, range(0, 9)));

Примечание: работает только в PHP 5.3 +

3 голосов
/ 11 февраля 2013

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

function rndStr($len = 20) {
    $rnd='';
    for($i=0;$i<$len;$i++) {
        do {
            $byte = openssl_random_pseudo_bytes(1);
            $asc = chr(base_convert(substr(bin2hex($byte),0,2),16,10));
        } while(!ctype_alnum($asc));
        $rnd .= $asc;
    }
    return $rnd;
}
3 голосов
/ 20 января 2017
function randomString($length = 5) {
       return substr(str_shuffle(implode(array_merge(range('A','Z'), range('a','z'), range(0,9)))), 0, $length);
}
2 голосов
/ 19 октября 2012

Другой способ создания случайной строки в PHP :

function RandomString($length) {
    $original_string = array_merge(range(0,9), range('a','z'), range('A', 'Z'));
    $original_string = implode("", $original_string);
    return substr(str_shuffle($original_string), 0, $length);
}
echo RandomString(6);
2 голосов
/ 02 января 2018

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

<?php
function RandomString()
{
    global $randstring ;
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $randstring = '';
    for ($i = 0; $i < 10; $i++) {
        $randstring .= $characters[rand(0, strlen($characters))];
    }
    return $randstring;
}

RandomString();

echo $randstring;
?>

также вас может заинтересовать:

<?php 


    function RandomString()
    {
        global $randstring ;
        $characters = str_split('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
        array_filter ($characters,function($var)use($characters,&$randstring){
                $randstring .= $characters[rand(0, count($characters)-1)];
        });
        return $randstring;
    }

    RandomString();echo $randstring.'<hr>';

    //.. OR  ..
    $randstring='';echo(RandomString());

    ?>

или еще один:

<?php

function s($length){
  for($i=0;($i<$length)and(($what=rand(1,3))and( (($what==1)and($t=rand(48,57) ))or (($what==2)and ($t=rand(65,90))) or (($what==3)and ($t=rand(97,122)))  ) and  (print chr($t)));$i++);
}
s(10);

?>
2 голосов
/ 22 ноября 2017

Параметризованный однострочник с использованием только собственных функций PHP , работает с PHP 5.1.0

str_shuffle(implode('', (array_intersect_key(($map =  array_map('chr', array_merge(array_map('mt_rand', array_fill(0, $length = 25, 48), array_fill(0,$length,57)),array_map('mt_rand', array_fill(0, $length, 65), array_fill(0,$length,90)),array_map('mt_rand', array_fill(0, $length, 97), array_fill(0,$length,122))))), array_flip($keys = array_rand($map, $length))))))
2 голосов
/ 02 августа 2016

Существует простой код:

echo implode("",array_map(create_function('$s','return substr($s,mt_rand(0,strlen($s)),1);'),array_fill(0,16,"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")));

Есть простое руководство:

  • Чтобы изменить длину строки , измените 16 только на другое значение.
  • Чтобы выбрать из разных символов, измените строку символов.
1 голос
/ 06 ноября 2012
<?php
    /**
     * Creates a random string
     *
     * @param (int) $length
     *   Length in characters
     * @param (array) $ranges
     *   (optional) Array of ranges to be used
     *
     * @return
     * Random string
    */
    function random_string($length, $ranges = array('0-9', 'a-z', 'A-Z')) {
        foreach ($ranges as $r) $s .= implode(range(array_shift($r = explode('-', $r)), $r[1]));
        while (strlen($s) < $length) $s .= $s;
        return substr(str_shuffle($s), 0, $length);
    }

    // Examples:
    $l = 100;
    echo '<b>Default:</b> ' . random_string($l) . '<br />';
    echo '<b>Lower Case only:</b> ' . random_string($l, array('a-z')) . '<br />';
    echo '<b>HEX only:</b> ' . random_string($l, array('0-9', 'A-F')) . '<br />';
    echo '<b>BIN only:</b> ' . random_string($l, array('0-1')) . '<br />';

/* End of file */
1 голос
/ 09 января 2015

Источник: Функция PHP, которая генерирует случайные символы

Эта функция PHP работала для меня:

function cvf_ps_generate_random_code($length=10) {

   $string = '';
   // You can define your own characters here.
   $characters = "23456789ABCDEFHJKLMNPRTVWXYZabcdefghijklmnopqrstuvwxyz";

   for ($p = 0; $p < $length; $p++) {
       $string .= $characters[mt_rand(0, strlen($characters)-1)];
   }

   return $string;

}

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

echo cvf_ps_generate_random_code(5);
1 голос
/ 10 апреля 2013

Вот как я делаю это, чтобы получить настоящий уникальный случайный ключ:

$Length = 10;
$RandomString = substr(str_shuffle(md5(time())), 0, $Length);
echo $RandomString;

Вы можете использовать time (), поскольку это временная метка Unix и всегда уникальна по сравнению с другими случайными числами, упомянутыми выше. Затем вы можете сгенерировать сумму md5 и взять необходимую длину из сгенерированной строки MD5 . В этом случае я использую 10 символов и могу использовать более длинную строку, если я хочу сделать ее более уникальной.

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

...