codiliateur / smart-uuid
特定 UUID 生成器
v1.0.5
2024-07-15 18:52 UTC
Requires
- php: ^7.3|^8.0
- laravel/framework: ^8.0|^9.0|^10.0|^11.0
- nesbot/carbon: ^2.53.1|^3.0.0
Requires (Dev)
- fakerphp/faker: ^1.9.1
- phpunit/phpunit: ^9.3.3
This package is not auto-updated.
Last update: 2024-09-23 19:41:35 UTC
README
此包提供生成和分析 UUID 的任何功能。
使用了特定的(非标准)算法来生成 UUID,该算法允许将以下信息包含到 UUID 中
- 创建时间戳
- 用户定义的应用程序代码
- 用户定义的实体代码
生成的 UUID 具有以下结构
SSSSSSSS-UUUU-UAAA-EEEE-RRRRRRRRRRRR
S
- 8 个十六进制数字是 UUID 生成时间戳的秒值U
- 5 个十六进制数字是 UUID 生成时间戳的微秒值A
- 3 个十六进制数字是自定义应用程序代码E
- 4 个十六进制数字是自定义实体代码R
- 12 个十六进制数字是随机值
应用程序代码和对象代码是整数值,它们被打包到生成的 UUID 中。这些代码允许您识别(通过程序甚至视觉上)UUID 是为哪个实体和应用程序生成的。此外,UUID 生成时间戳以微秒的精度打包到 UUID 中。
安装
要安装包,请运行命令
composer require codiliateur/smart-uuid
使用 trait HasUuidPrimaryKey
如果需要使用 UUID 主键,请在您的模型中使用 trait /Codiliateur/SmartUuid/Models/HasUuidPrimaryKey
。
在您的模型中声明公共属性 $appCode
和 $entityCode
以调整 UUID 生成。
该特性会覆盖 getIncrementing()
和 getKeyType()
方法。您必须在模型中填充属性 $incrementing
和 $keyType
。
该特性将模型事件处理程序注册为 创建-事件,以生成 UUID 并填充模型键。
示例
use /Codiliateur/SmartUuid/Models/HasUuidPrimaryKey; class MyModel extends Model { use HasUuidPrimaryKey public $appCode = 0x002; public $entityCode = 0x000F; }
辅助函数
generate_uuid()
使用 generate_uuid() 生成 uuid。
语法
generate_uuid( [[int $entityCode] , int $appCode] ) : string
参数
$entityCode
- 整数实体代码(默认 - 0),范围从 0 到 65535$appCode
- 整数应用程序代码(默认 - 0),范围从 0 到 4095
返回:生成的 UUID 字符串。
$uuid = generate_uuid(0xF,0x2); echo $uuid; // 622235ea-8e54-f002-000f-742c8deebf77
extract_uuid_part()
从 UUID 中提取时间戳、应用程序或实体代码。
语法
extract_uuid_part( string $uuid, $part [, string $format] ) : mixed
参数
$uuid
- 被分析的 UUID;$part
- 提取部分- 'timestamp' - 获取创建 UUID 的时间戳
- 'app_code' - 获取应用程序代码
- 'entity_code' - 获取实体代码
$format
- 返回值格式- 1 - (默认)\Carbon\Carbon 对象;
- 2 - \DateTime 对象;
- 或格式字符串以返回格式化的数据字符串。例如:
'Y-m-d H:i:s.u'
返回:\Carbon\Carbon | \DateTime | 字符串。
提取时间戳示例
$uuid = gen_uuid(0xF,0x2); echo extract_uuid_part($uuid, 'timestamp', 1); // Carbon\Carbon @1701626403 {#6267 // date: 2023-12-03 18:00:03.502460 UTC (+00:00), // } echo extract_uuid_part($uuid, 'timestamp', 'Y-m-d H:i:s.u'); // DateTime @1701626403 {#6317 // date: 2023-12-03 18:00:03.502460 UTC (+00:00), // } echo extract_uuid_part($uuid, 'timestamp', 'Y-m-d H:i:s.u'); // 2023-12-04 19:00:39.906514
提取应用程序代码示例
$uuid = gen_uuid(0xF,0x2); echo extract_uuid_part($uuid, 'app_code'); // 2
提取实体代码示例
$uuid = gen_uuid(0xF,0x2); echo extract_uuid_part($uuid, 'entity_code'); // 15
常量
您可以使用以下常量
// $part constants
Codiliateur\SmartUuid\Uuid::TIMESTAMP = 'timestamp'
Codiliateur\SmartUuid\Uuid::APP_CODE = 'app_code'
Codiliateur\SmartUuid\Uuid::ENTITY_CODE = 'entity_code'
// $format constants
Codiliateur\SmartUuid\Uuid::TS_FORMAT_CARBON = 1
Codiliateur\SmartUuid\Uuid::TS_FORMAT_DTETIME = 2