helicon-os / uuid
PHP通用的基本UUID生成器,支持多种输出格式,如16字节二进制、十六进制格式(紧凑、分组等)、类似base32和base64。可以生成V4随机UUID和顺序UUID。
dev-master
2015-06-05 10:31 UTC
Requires
- php: >=5.3.0
Requires (Dev)
- phpunit/phpunit: dev-master
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