Я пытаюсь создать рандомизированную строку в PHP и не получаю абсолютно никакого вывода с этим:
<?php
function RandomString() {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randstring = '';
for ($i = 0; $i < 10; $i++) {
$randstring = $characters[rand(0, strlen($characters))];
}
return $randstring;
}
RandomString();
echo $randstring;
Что я делаю неправильно?
Ответ 1
Чтобы ответить на этот вопрос конкретно, необходимо решить две проблемы:
$randstring не входит в область видимости, когда вы вызываете ее, используя echo.
В цикле символы не объединяются.
Вот фрагмент кода с исправлениями:
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 случайной строки.
// По желанию вы можете задать необходимую длину строки.
echo generateRandomString();
Ответ 2
На этот вопрос есть много ответов, но ни один из них не использует криптографически безопасный генератор псевдослучайных чисел (CSPRNG).
Простой, безопасный и правильный ответ — использовать RandomLib и не изобретать велосипед.
Для тех из вас, кто настаивает на изобретении собственного решения, для этой цели предусмотрена в PHP 7.0.0 функция random_int() ; если вы все еще используете PHP 5.x, мы написали полифилл PHP 5,random_int(), чтобы вы могли использовать новый API еще до обновления до PHP 7.
Безопасное создание случайных целых чисел в PHP — нетривиальная задача. Вы всегда должны проконсультироваться со своими постоянными специалистами по криптографии StackExchange, прежде чем развертывать собственный алгоритм в производстве.
При наличии безопасного генератора целых чисел генерация случайной строки с помощью CSPRNG — это простое дело.
Создание безопасной случайной строки:
/**
* Генерирует случайную строку, используя криптографически безопасный
* генератор псевдослучайных чисел (random_int)
*
* Эта функция сейчас использует подсказки типов (только для PHP 7+), но изначально она была написана для PHP 5.
*
* Для PHP 7, random_int является функцией ядра PHP.
* Для PHP 5.x, зависит от https://github.com/paragonie/random_compat
*
* @param int $length Сколько символов нам нужно?
* @param string $keyspace Строка всех возможных символов.
* @return string
**/
function random_str(
int $length = 64,
string $keyspace = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
): string {
if ($length < 1) {
throw new \RangeException("Длина должна быть больше 0!");
}
$pieces = [];
$max = mb_strlen($keyspace, '8bit') - 1;
for ($i = 0; $i < $length; ++$i) {
$pieces []= $keyspace[random_int(0, $max)];
}
return implode('', $pieces);
}
Использование:
$a = random_str(32);
$b = random_str(8, 'abcdefghijklmnopqrstuvwxyz');
$c = random_str();
Ответ 3
Это создает шестнадцатеричную строку длиной 20 символов:
$string = bin2hex(openssl_random_pseudo_bytes(10)); // 20 символов
В PHP 7 (random_bytes()):
$string = base64_encode(random_bytes(10)); // ~14 characters, включая /=+
// или
$string = substr(str_replace(['+', '/', '='], '', base64_encode(random_bytes(32))), 0, 32); // 32 символа, без /=+
// или
$string = bin2hex(random_bytes(10)); // 20 символов, только 0-9a-f
Ответ 4
Лучший способ реализовать эту функцию:
function RandomString($length) {
$keys = array_merge(range(0,9), range('a', 'z'));
$key = "";
for($i=0; $i < $length; $i++) {
$key .= $keys[mt_rand(0, count($keys) - 1)];
}
return $key;
}
echo RandomString(20);
Web