1. Go to this page and download the library: Download pvmlibs/flexid 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/ */
pvmlibs / flexid example snippets
// just generate some unique ID
$generator = new \Pvmlibs\FlexId\FlexIdGenerator(
workerResolver: new \Pvmlibs\FlexId\Resolvers\RedisTimestepWorkerResolver(client: $redisClient)
);
$generator->id(); // 43526598068356096
// static worker id, uses process PID as worker id as example
$generator = new \Pvmlibs\FlexId\(
workerResolver: new \Pvmlibs\FlexId\Resolvers\StaticWorkerResolver(
workerHandlerFn: fn () => getmypid(), workersBits: 8, sequenceBits: 8
)
);
$generator->id(); // 43524358613175296
$ids = $generator->bulkIds(1000); // array
$generator = new \Pvmlibs\FlexId\FlexIdGenerator(
workerResolver: new \Pvmlibs\FlexId\Resolvers\RedisTimestepWorkerResolver(client: $redisClient)
);
$serializer = new \Pvmlibs\FlexId\Serializers\HashSerializer();
// using helper container
$encodedId = new \Pvmlibs\FlexId\IdHandlers\EncodedId(
serializer: $serializer,
// signer: use SignerContract if id should be also signed
generator: $generator, // optional, if you want to generate id
);
$id = $encodedId->generateId(); // 43581127276918784
$publicId = $encodedId->toPublicId($id); // LNvqjBKLnJ
$encodedId->fromPublicId($publicId); // 43581127276918784
// or use serializer directly
$id = $generator->id(); // 43581127276918784
$publicId = $serializer->serialize($id); // LNvqjBKLnJ
$serializer->serialize($publicId); // 43581127276918784
$generator = new \Pvmlibs\FlexId\FlexIdGenerator(
workerResolver: new \Pvmlibs\FlexId\Resolvers\RedisTimestepWorkerResolver(client: $redisClient)
);
$secret = \Pvmlibs\FlexId\Encrypters\Sparx64Encrypter::generateSecret(); // use your own secret
$encrypter = new \Pvmlibs\FlexId\Encrypters\Sparx64Encrypter(
secret: $secret,
serializer: new \Pvmlibs\FlexId\Serializers\BaseSerializer()
);
// using helper container
$encryptedId = new \Pvmlibs\FlexId\IdHandlers\EncryptedId(
encrypter: $encrypter,
// signer: use SignerContract if id should be also signed
generator: $generator, // optional, if you want to generate id
);
$id = $encryptedId->generateId(); // 43581127276918784
$publicId = $encryptedId->toPublicId($id); // yVyKqbkQDgYgR
$encryptedId->fromPublicId($publicId); // 43581127276918784
// or use encryptor directly
$id = $generator->id(); // 43581127276918784
$publicId = $encrypter->encrypt($id,''); // yVyKqbkQDgYgR
$encrypter->decrypt($publicId); // 43581127276918784
// use signer as id crc, 1 char sign
$signer = new \Pvmlibs\FlexId\Signers\Signer(
secret: \Pvmlibs\FlexId\Signers\Signer::generateSecret(), // use your own key
serializer: new \Pvmlibs\FlexId\Serializers\CustomSerializer(),
hashAlgo: 'siphash-2-4', // siphash is few times faster than sha256
maxSignLength: 1,
onlyPositiveRange: true // optionally for short signs, much faster when using with CustomSerializer
);
$id = 'r8BnZxS';
$signed = $signer->getSignedId($id); // r8BnZxSQ
// get id from signed with validation
$id = $signer->getIdFromSigned($signed); // r8BnZxS
// for more integrity assurance use longer sign length (signBits). For shorter output and less assurance adjust maxSignLength.
$signer = new \Pvmlibs\FlexId\Signers\Signer(
secret: \Pvmlibs\FlexId\Signers\Signer::generateSecret(), // use your own key
serializer: new \Pvmlibs\FlexId\Serializers\BaseSerializer(),
hashAlgo: 'siphash-2-4',
signBits: 64,
);
$id = 'r8BnZxS';
$signed = $signer->getSignedId($id); // r8BnZxSDwJgwJWVxfJdx
// other examples of signed id
// encrypted id + default 64-bit sign
// r8BnZxSqxFfPZYcLLYzQ
// encrypted id + 128-bit sign
// r8BnZxSqxFfPZYcLLYzQJZMcRWcLqmvLD
// base class for reuse
abstract class IdBaseHandler {
use \Pvmlibs\FlexId\Concerns\HasIdHandler;
// implement method returning IdHandlerContract[]
protected static function getIdHandler(): array
{
static $class = null;
$class ??= [
// adjust for your needs, add another classes for e.g. key rotation
new \Pvmlibs\FlexId\IdHandlers\EncodedId(serializer: new \Pvmlibs\FlexId\Serializers\HashSerializer()),
];
return $class;
}
// called when cannot decode public id
protected static function handleFromPublicIdException(\Exception $exception): void
{
throw $exception; // or e.g. throw 403
}
}
class IdVO extends IdBaseHandler {
protected static function idUniqueTypeName(): string
{
return 'foo';
}
}
$idVO = new IdVO(internalId: 10);
echo $idVO->getPublicId(); // 1N1x
echo IdVO::fromPublicId('1N1x')->getInternalId(); // 10