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

# Random\Randomizer::getBytesFromString

(PHP 8 >= 8.3.0)

Random\Randomizer::getBytesFromString — 文字列からランダムにバイト列を取得する

### 説明

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

入力となる `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

### 参考

- Random\Randomizer::getBytes() - ランダムなバイト列を取得する

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open