コード
random.php
<?php declare(strict_types=1);
class Str
{
private const CHARS = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_/*+.,!#$%&()~|';
/**
* @param int $length
* @return string
*/
public static function random(int $length): string
{
return substr(str_shuffle(str_repeat(self::CHARS, $length)), 0, $length);
}
}
echo Str::random(8), PHP_EOL;
echo Str::random(16), PHP_EOL;
echo Str::random(32), PHP_EOL;
補足1
CHARS
に指定した文字でランダムな文字列を生成します。
使いたくない文字は取り除いてください。
str_repeat
を使ってるのは、指定しないと CHARS
で定義された文字数までの文字列しか作れないことと、同じ文字が2回以上表示されないためです。
https://www.php.net/manual/ja/function.str-repeat.php
str_shuffle
は暗号学的には安全ではないので、暗号の値としては使えません。
https://www.php.net/manual/ja/function.str-shuffle.php
補足2
小文字の英字と数字のみで良い場合はrandom-bytesを使った方が良さそう。