Randflake#
Class: Infocyph\\UID\\Randflake
Overview#
Randflake is a lease-bound 64-bit ID family with encrypted payload fields.
Layout before encryption:
30 bits timestamp (seconds from epoch offset
1730000000)17 bits node ID
17 bits sequence
Generation#
<?php
use Infocyph\UID\Randflake;
$id = Randflake::generate(
nodeId: 42,
leaseStart: time() - 5,
leaseEnd: time() + 300,
secret: 'super-secret-key',
);
$idAsBase32Hex = Randflake::generateString(42, time() - 5, time() + 300, 'super-secret-key');
Configuration Object#
Use Infocyph\\UID\\Configuration\\RandflakeConfig:
nodeId(0..131071)leaseStartandleaseEnd(Unix seconds)secret(exactly 16 bytes)optional
sequenceProvideroptional
IdOutputType(STRING,INT,BINARY)
<?php
use Infocyph\UID\Configuration\RandflakeConfig;
use Infocyph\UID\Enums\IdOutputType;
use Infocyph\UID\Randflake;
$config = new RandflakeConfig(
nodeId: 42,
leaseStart: time() - 5,
leaseEnd: time() + 300,
secret: 'super-secret-key',
outputType: IdOutputType::STRING,
);
$id = Randflake::generateWithConfig($config);
Validation and Parsing#
<?php
use Infocyph\UID\Randflake;
Randflake::isValid($id);
$inspect = Randflake::inspect($id, 'super-secret-key');
$parsed = Randflake::parse($id, 'super-secret-key');
inspect() and inspectString() output:
timestamp(int, Unix seconds)node_id(int)sequence(int)
parse() and parseString() output:
time(DateTimeImmutable)node_id(int)sequence(int)
Binary and Alternate Bases#
Randflake::toBytes($id)/Randflake::fromBytes($bytes)Randflake::toBase($id, $base)/Randflake::fromBase($encoded, $base)Randflake::encodeString($id)/Randflake::decodeString($stringId)
Supported bases: 16, 32, 36, 58, 62.
Exception Types#
Infocyph\\UID\\Exceptions\\RandflakeExceptionInfocyph\\UID\\Exceptions\\FileLockException