PHP通用的基本UUID生成器,支持多种输出格式,如16字节二进制、十六进制格式(紧凑、分组等)、类似base32和base64。可以生成V4随机UUID和顺序UUID。

dev-master 2015-06-05 10:31 UTC

This package is auto-updated.

Last update: 2024-09-04 16:24:31 UTC


README

版权(c)2015,Andreas Prucha,Helicon软件开发公司。保留所有权利。

概述

提供在客户端生成UUID的基本功能。UUID可以以下格式生成:

  • 16字节二进制字符串:uuid的大端二进制表示
  • 32字节十六进制字符串:不带破折号的32位字符十六进制表示。本库的默认值。
  • 36字节十六进制字符串:uuid的常规字符串表示
  • 38字节十六进制字符串:带括号的字符串表示
  • 45字节十六进制字符串:带urn:uuid-prefix前缀
  • 22字节类似Base64字符串(实验性)
  • 26字节类似Base32字符串(实验性)

库支持以下UUID子版本:

  • V4随机UUID
  • "顺序" V4随机UIIDs(受COMB-UUIds启发的基于时间/随机UUID,但略有不同)

默认版本是V4Asc(递增随机)

如果需要更复杂的函数,可以尝试著名的[https://packagist.org.cn/packages/ramsey/uuid]。

陷阱和限制

###字节顺序

该库假定网络字节顺序(大端)作为RFC 4122中二进制字符串表示中描述的。不幸的是,Microsoft使用小端,因此转换为字符串表示可能会返回不同的结果。另外,在采用小端的系统上,V4Asc算法不会产生预期效果。

###格式

默认使用32个字符的十六进制字符串,可以存储在CHAR(32)字段中。请确保该字段使用8位字符集(ASCII)和没有开销的排序(二进制或类似)。

关于字符集和排序的说明

选择正确的数据库类型、字符集和排序可以极大地影响性能。不建议为UUID字段使用UTF-8,因为它会浪费空间,而Unicode比较通常较慢。通常,最好的选择是使用二进制或ASCII排序和ASCII字符集(FORMAT_BIN除外,它必须为BINARY)

  • 所有编码都是可排序的,并且是大端的。
  • 除了FORMAT_BIN之外的所有编码都是URL安全的。
  • 对于所有除了FORMAT_BIN之外的编码,建议使用ASCII字符集和二进制排序以提高性能。
  • 对于除了FORMAT_BIN和FORMAT_ENC64之外的所有编码,由于字符串表示永远不会混合大小写,所以可以使用不区分大小写的排序,但这不应该被做。

另一种选择是使用16字节“二进制”格式。

36字节十六进制格式的优点

  • 没有端序冲突
  • 使用常规表示可读
  • 易于在手动编写的查询中使用
  • 缺点:使用更多空间
  • 可能略微较慢

示例

生成UUID非常简单

  $newUuid = \helicon\uuid\Util::generate(); // Generates a new in default format and version

安装