Random\Randomizer::getBytesFromString

Get random bytes from a source string

&reftitle.description; public `string` `Random\Randomizer::getBytesFromString` `string` `string` `int` `length`

Generates a string containing uniformly selected random bytes from the input `string` with the requested `length`.

The chance for a byte to be selected is proportional to its share of the input `string`. If each byte occurs the same amount of times, each byte is equally likely to be selected.

&reftitle.parameters;

`string`

- The &string; from which the returned bytes are selected.

`length`

- The length of the random &string; that should be returned in bytes; must be `1` or greater.

&reftitle.returnvalues;

A &string; containing the requested number of random bytes taken from the input `string`.

&reftitle.errors;

- If `string` is empty, a `ValueError` will be thrown.

- If the value of `length` is less than `1`, a `ValueError` will be thrown.

&random.engineErrors;

&reftitle.examples;

### `Random\Randomizer::getBytesFromString` example

    <?php
    $randomizer = new \Random\Randomizer();

    printf(
        "%s.example.com",
        $randomizer->getBytesFromString('abcdefghijklmnopqrstuvwxyz0123456789', 16)
    );
    ?>

&example.outputs.similar;

    3zsw04eiubcf82jd.example.com

### Generate a random code for multi-factor authentication

    <?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));
    ?>

&example.outputs.similar;

    11551-80418-27047-42075

### Select from a string with a non-uniform distribution

    <?php
    $randomizer = new \Random\Randomizer();

    echo $randomizer->getBytesFromString('aaaaabcdef', 20);
    ?>

&example.outputs.similar;

    fddacbeaaeaaacaaaaca

&reftitle.seealso;

- `Random\Randomizer::getBytes`