(PHP 8 >= 8.3.0)
Random\Randomizer::getBytesFromString — 文字列からランダムにバイト列を取得する
入力となる string
から等確率に選択した、ランダムなバイト列を含む文字列を、
指定された length
だけ返します。
特定のバイトが選ばれる確率は、
入力となる string
に占める割合に比例します。
それぞれのバイトの頻度が同じ場合、
それぞれのバイトが選ばれる確率は等しくなります。
string
戻り値のために、バイト列が選択される文字列
length
バイト単位で返されるランダムな文字列の長さ。
1
以上でなければいけません。
入力された string
から取得したランダムなバイト列を、
指定された長さだけ含む文字列を返します。
string
が空の場合、
ValueError がスローされます。
length
が 1
より小さい場合、
ValueError がスローされます。
Random\Randomizer::$engine
に存在する
Random\Engine::generate() メソッド
がスローした、あらゆる Throwable がスローされます。
例1 Random\Randomizer::getBytesFromString() の例
<?php
$randomizer = new \Random\Randomizer();
printf(
"%s.example.com",
$randomizer->getBytesFromString('abcdefghijklmnopqrstuvwxyz0123456789', 16)
);
?>
上の例の出力は、 たとえば以下のようになります。
3zsw04eiubcf82jd.example.com
例2 2要素認証向けにランダムなコードを生成する
<?php
// The Secure engine is the default, but we make it explicit, because
// multi-factor codes are security sensitive.
$randomizer = new \Random\Randomizer(new \Random\Engine\Secure());
echo implode('-', str_split($randomizer->getBytesFromString('0123456789', 20), 5));
?>
上の例の出力は、 たとえば以下のようになります。
11551-80418-27047-42075
例3 一様分布していない文字列から選択する
<?php
$randomizer = new \Random\Randomizer();
echo $randomizer->getBytesFromString('aaaaabcdef', 20);
?>
上の例の出力は、 たとえば以下のようになります。
fddacbeaaeaaacaaaaca