limanweb / uuid
自定义 UUID 生成和分析函数
v1.1.1
2024-05-28 17:50 UTC
Requires
- php: ^7.2.0|^8.0
- nesbot/carbon: ^2.0
This package is auto-updated.
Last update: 2024-09-28 18:37:01 UTC
README
描述
包提供了生成和分析 UUID 的任何函数。
生成 UUID 的结构
使用自定义算法生成具有以下结构的 UUID
SSSSSSSS-UUUU-UAAA-EEEE-RRRRRRRRRRRR
S
- 8 个十六进制数字是 UUID 生成时间戳的秒值U
- 5 个十六进制数字是 UUID 生成时间戳的微秒值A
- 3 个十六进制数字是自定义应用代码E
- 4 个十六进制数字是自定义实体代码R
- 12 个十六进制数字是随机值
什么是实体和应用程序代码?
在调用 genUuid() 时,您可以定义任何整数的实体代码和/或应用程序代码。这允许您区分不同应用程序为不同数据库实体创建的 UUID。
安装
运行命令将包安装到您的项目中
composer require limanweb/uuid
Limanweb\Uuid\Support\Uuid 函数
genUuid()
语法
genUuid(int $entityCode = null, int $appCode = null) : string
返回 UUID 字符串。
参数
$entityCode
- 实体的自定义整数代码(默认为 0)。最大值是 65535$appCode
- 应用程序的自定义整数代码(默认为 0)。最大值是 4095
返回 UUID 字符串。
示例
$uuid = \Limanweb\Uuid\Support\Uuid::genUuid(256, 16); echo $uuid; // "5ec004c4-0db2-0010-0100-a08cc1dd9a2b"
getUuidTimestamp()
语法
getUuidTimestamp(string $uuid, string $format = 'Carbon') : mixed
从由 genUuid()
生成的 UUID 中检索时间戳。
参数
$uuid
- 分析的 UUID;$format
- 返回时间戳值的格式。您可以使用以下三种变体之一Carbon
(默认)以 \Carbon\Carbon 对象获取时间戳;DateTime
以 \DateTime 对象获取时间戳;- 用于
format()
的日期格式字符串,以获取格式化的时间戳字符串。例如:'Y-m-d H:i:s.u'
示例
$uuid = "5ec004c4-0db2-0010-0100-a08cc1dd9a2b"; $ts = \Limanweb\Uuid\Support\Uuid::getUuidTimestamp($uuid, "Y-m-d H:i:s.u"); echo $ts; // "2020-05-16 18:20:36.056096"
getUuidAppCode()
语法
getUuidAppCode(string $uuid) : int
从由 genUuid()
生成的 UUID 中检索应用程序代码。
参数
$uuid
- 分析的 UUID;
示例
$uuid = "5ec004c4-0db2-0010-0100-a08cc1dd9a2b"; $appCode = \Limanweb\Uuid\Support\Uuid::getUuidAppCode($uuid); echo $appCode; // 16
getUuidAppCode()
语法
getUuidAppCode(string $uuid) : int
从由 genUuid()
生成的 UUID 中检索应用程序代码。
参数
$uuid
- 分析的 UUID;
示例
$uuid = "5ec004c4-0db2-0010-0100-a08cc1dd9a2b"; $appCode = \Limanweb\Uuid\Support\Uuid::getUuidAppCode($uuid); echo $appCode; // 256
使用 trait UsesUuid
-
将 trait
\Limanweb\Uuid\Models\Concerns\UsesUuids
使用声明添加到模型中,其中主键是 UUID。 -
您可以在模型中定义
$appCode
和$entityCode
受保护的属性,以生成具有特定段的模型 UUID 键。
此 trait
- 重写
getIncrementing()
和getKeyType()
方法,因此您不需要定义属性$incrementing
和$keyType
; - 添加
getAppCode()
和getEntityCode()
公共方法; - 注册 创建 事件处理器以生成 UUID 并填充模型键。
示例
class MyModel extends Model { use \Limanweb\Uuid\Models\Concerns\UsesUuids; protected $appCode = 16; // 010 protected $entityCode = 256; // 0100 ...
为此模型生成的所有 ID 都将匹配模式 ########-####-#010-0100-############
。