2024-07-29 22:06:57 +02:00

39 lines
768 B
PHP

<?php
namespace Khofmann\GUID;
/**
* Facade for GUID generators
*/
class GUID
{
/**
* Private since facade.
*/
private function __construct()
{
}
/**
* Generate a UUID v4.
*
* @param mixed $data Optional data
*
* @return string UUID v4
*/
public static function v4($data = null): string
{
// Generate 16 bytes (128 bits) of random data or use the data passed into the function.
$data = $data ?? random_bytes(16);
assert(strlen($data) == 16);
// Set version to 0100
$data[6] = chr(ord($data[6]) & 0x0f | 0x40);
// Set bits 6-7 to 10
$data[8] = chr(ord($data[8]) & 0x3f | 0x80);
// Output the 36 character UUID.
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}
}