Random\Randomizer::getBytesFromString

文字列からランダムにバイト列を取得する

説明

public string Random\Randomizer::getBytesFromString(string $string, int $length)

入力となる string から等確率に選択した、ランダムなバイト列を含む文字列を、 指定された length だけ返します。

特定のバイトが選ばれる確率は、 入力となる string に占める割合に比例します。 それぞれのバイトの頻度が同じ場合、 それぞれのバイトが選ばれる確率は等しくなります。

パラメータ

string

戻り値のために、バイト列が選択される文字列

length

バイト単位で返されるランダムな文字列の長さ。 1 以上でなければいけません。

戻り値

入力された string から取得したランダムなバイト列を、 指定された長さだけ含む文字列を返します。

エラー / 例外

  • string が空の場合、 ValueError がスローされます。
  • length1 より小さい場合、 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

参考

  • Random\Randomizer::getBytes