<?php
function uuid7(): string
{
$msec = (int)(microtime(true) * 1000);
// 48-bit timestamp (big-endian)
$timeBytes = pack("J", $msec);
$timeBytes = substr($timeBytes, -6);
$rand = random_bytes(10);
$bytes = $timeBytes . $rand;
// Version 7
$bytes[6] = chr((ord($bytes[6]) & 0x0f) | 0x70);
// Variant RFC 4122 (10xx)
$bytes[8] = chr((ord($bytes[8]) & 0x3f) | 0x80);
$hex = bin2hex($bytes);
return sprintf(
'%s-%s-%s-%s-%s',
substr($hex, 0, 8),
substr($hex, 8, 4),
substr($hex, 12, 4),
substr($hex, 16, 4),
substr($hex, 20)
);
}
for ($i = 0; $i < 100; $i++) {
echo uuid7() . PHP_EOL;
}
preferences:
24.57 ms | 411 KiB | 5 Q