首页 >后端开发 >php教程 >如何在 PHP 中生成有效的 v4 UUID?

如何在 PHP 中生成有效的 v4 UUID?

Patricia Arquette
Patricia Arquette原创
2024-12-18 09:19:14539浏览

How to Generate Valid v4 UUIDs in PHP?

在 PHP 中生成有效的 v4 UUID

确定在 PHP 中生成有效 v4 UUID 的正确格式可能具有挑战性。 UUID(通用唯一标识符)必须遵循特定模式:“xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx”,其中“y”代表 8、9、A 或 B。

现有解决方案和限制

一种尝试的解决方案是将 UUID 分解为多个组件并使用随机数每个部分的一代。但是,它无法正确设置“y”值。

纠正函数

要纠正此问题,我们需要对生成的数据进行特定的位操作。根据 RFC 4122 - 第 4.4 节,以下位需要修改:

  • time_hi_and_version(第 7 个八位位组的位 4-7)
  • clock_seq_hi_and_reserved(第 9 个八位位组的位 6 和 7)八位组)

更新的函数

这是生成有效的 v4 UUID 的更新的 PHP 函数:

function uuidv4()
{
  $data = random_bytes(16);

  $data[6] = chr(ord($data[6]) & 0x0f | 0x40); // set version to 0100
  $data[8] = chr(ord($data[8]) & 0x3f | 0x80); // set bits 6-7 to 10
    
  return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}

生成随机数数据

生成足够的随机数数据,建议使用 openssl_random_pseudo_bytes() 或 random_bytes() (适用于 PHP 7 及更高版本)。对于较旧的 PHP 版本,可以使用 openssl_random_pseudo_bytes()。

以上是如何在 PHP 中生成有效的 v4 UUID?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn