codiliateur/smart-uuid

特定 UUID 生成器

v1.0.5 2024-07-15 18:52 UTC

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