1. Go to this page and download the library: Download michaelfrank-dev/php-trng library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
michaelfrank-dev / php-trng example snippets
use MichaelFrank\Trng\Providers\RandomOrgProvider;
use MichaelFrank\Trng\TrngType;
// Without API key (legacy plain-text API)
$provider = new RandomOrgProvider();
$bytes = $provider->getValues(100, TrngType::UINT8);
// $bytes => [142, 7, 203, 88, ...] (100 integers, each 0-255)
// With API key (JSON-RPC v4 API)
$provider = RandomOrgProvider::withApiKey('your-api-key-here');
$integers = $provider->getValues(50, TrngType::UINT16);
// $integers => [41230, 8912, 60001, ...] (50 integers, each 0-65535)
// Quota metadata is available after any authenticated call
$metadata = $provider->getLastMetadata();
// e.g., ['requestsLeft' => 999, 'bitsLeft' => 249000, ...]
use MichaelFrank\Trng\Providers\AnuProvider;
use MichaelFrank\Trng\TrngType;
// Without API key
$provider = new AnuProvider();
$bytes = $provider->getValues(100, TrngType::UINT8);
// $bytes => [57, 200, 14, 99, ...] (100 integers, each 0-255)
// Requesting more than 1024 uint8 — the library handles the unpacking internally
$bytes = $provider->getValues(2000, TrngType::UINT8);
// $bytes => [...] (2000 integers, each 0-255)
// Requesting uint16 directly (max 1024)
$integers = $provider->getValues(100, TrngType::UINT16);
// $integers => [41230, 8912, 60001, ...] (100 integers, each 0-65535)
// With API key
$provider = AnuProvider::withApiKey('your-api-key-here');
$bytes = $provider->getValues(512, TrngType::UINT8);
use MichaelFrank\Trng\Providers\DrandProvider;
use MichaelFrank\Trng\TrngType;
$provider = new DrandProvider();
// Fetch up to 32 bytes
$bytes = $provider->getValues(32, TrngType::UINT8);
// $bytes => [...] (32 integers, each 0-255)
// Fetch up to 16 uint16 values
$integers = $provider->getValues(16, TrngType::UINT16);
// $integers => [...] (16 integers, each 0-65535)
// Use a custom chain or relay
$provider = DrandProvider::forChain('your-chain-hash', ['https://your.relay.example.com']);
// Disable beacon signature verification (not recommended for production)
$provider = (new DrandProvider())->withoutVerification();
use MichaelFrank\Trng\Providers\AnuProvider;
use MichaelFrank\Trng\EntropyBuffer;
use MichaelFrank\Trng\TrngType;
$provider = new AnuProvider();
$bytes = $provider->getValues(64, TrngType::UINT8);
$buffer = new EntropyBuffer($bytes);
// Unbiased integer in a precise range (e.g., roll a six-sided die)
$diceRoll = $buffer->toRange(1, 6);
// Uniform float in [0.0, 1.0)
$float = $buffer->toFloat();
// Consume the next N bytes from the buffer (cursor advances)
$chunk = $buffer->nextBytes(4);
// Export the full buffer as hex or a binary string
$hex = $buffer->toHex();
$binary = $buffer->toBinaryString();
// Check how many bytes are still available
$remaining = $buffer->remaining();
use MichaelFrank\Trng\Providers\AnuProvider;
use MichaelFrank\Trng\EntropyBuffer;
use MichaelFrank\Trng\TrngType;
$provider = new AnuProvider();
$uint16s = $provider->getValues(16, TrngType::UINT16);
// $uint16s => [41230, 8912, ...] (16 integers, each 0-65535)
// Convert to a byte buffer — each uint16 becomes 2 bytes (32 bytes total)
$buffer = EntropyBuffer::fromUint16($uint16s);
$diceRoll = $buffer->toRange(1, 6);
$float = $buffer->toFloat();
use MichaelFrank\Trng\Providers\RandomOrgProvider;
use MichaelFrank\Trng\Providers\AnuProvider;
use MichaelFrank\Trng\Providers\DrandProvider;
use MichaelFrank\Trng\TrngType;
use MichaelFrank\Trng\Exceptions\TrngException;
use MichaelFrank\Trng\Exceptions\TrngNetworkException;
use MichaelFrank\Trng\Exceptions\TrngRateLimitException;
use MichaelFrank\Trng\Exceptions\TrngServerException;
use MichaelFrank\Trng\Exceptions\TrngInvalidResponseException;
$length = 256;
$type = TrngType::UINT8;
$result = [];
try {
// Primary: RANDOM.ORG (authenticated)
$provider = RandomOrgProvider::withApiKey('your-api-key-here');
$result = $provider->getValues($length, $type);
} catch (TrngRateLimitException $e) {
// HTTP 429 or quota exhausted
error_log('RANDOM.ORG quota depleted: ' . $e->getMessage());
$result = fallbackToQuantum($length, $type);
} catch (TrngNetworkException $e) {
// DNS failure, timeout, or host unreachable
error_log('Network failure: ' . $e->getMessage());
$result = fallbackToQuantum($length, $type);
} catch (TrngServerException $e) {
// HTTP 5xx
error_log('Provider server error: ' . $e->getMessage());
$result = fallbackToQuantum($length, $type);
} catch (TrngInvalidResponseException $e) {
// Malformed payload or failed integrity check
error_log('Invalid response: ' . $e->getMessage());
$result = fallbackToQuantum($length, $type);
} catch (TrngException $e) {
// Catch-all for any other library exception
error_log('Unexpected TRNG error: ' . $e->getMessage());
$result = fallbackToQuantum($length, $type);
} catch (\InvalidArgumentException $e) {
// Invalid $length or $type parameters
error_log('Invalid arguments: ' . $e->getMessage());
}
function fallbackToQuantum(int $length, TrngType $type): array
{
try {
// Secondary: ANU Quantum (no key needed)
return (new AnuProvider())->getValues($length, $type);
} catch (TrngException $e) {
// Last resort: Drand beacon (max 32 bytes per call)
return (new DrandProvider())->getValues(min($length, 32), $type);
}
}
bash
composer
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.