mpyw / uuid-ulid-converter
UUID 与 ULID 双向转换器
v1.0.0
2021-10-27 11:43 UTC
Requires
- php: >=7.4
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-21 19:25:06 UTC
README
安装
composer require mpyw/uuid-ulid-converter
API
public static Converter::uuidToUlid(string $uuid, bool $lowercase = false): string public static Converter::ulidToUuid(string $ulid, bool $uppercase = false): string
重要
默认情况下,UUID 是小写,而 ULID 是大写。
使用方法
基本
use Mpyw\UuidUlidConverter\Converter; var_dump(Converter::ulidToUuid('61862H2EWP9TCTRX3MJ15XNY7X')); // string(36) "c1418511-3b96-4e99-ac74-74904bdaf8fd" var_dump(Converter::uuidToUlid('c1418511-3b96-4e99-ac74-74904bdaf8fd')); // string(26) "61862H2EWP9TCTRX3MJ15XNY7X"
高级
以下解决方案在 PostgreSQL 中特别有用,因为 PostgreSQL 不支持 ULID 但支持 UUID。将 ULID 作为原生 UUID 存储,比将其作为字符串存储更高效。
使用 robinvdvleuten/php-ulid 引入高级用法。
生成 UUID 风格的 ULID
use Mpyw\UuidUlidConverter\Converter; use Ulid\Ulid; // Use generated UUID as primary key $uuid = Converter::ulidToUuid((string)Ulid::generate());
UUID 风格 ULID 的时间戳范围
use Mpyw\UuidUlidConverter\Converter; use Ulid\Ulid; $dates = [ new \DateTimeImmutable('2020-01-01 00:00:00.000 UTC'), new \DateTimeImmutable('2020-01-02 00:00:00.000 UTC'), ]; function createUuidRange(array $dates): array { $createPart = fn (\DateTimeInterface $date, bool $isEnd) => Converter::ulidToUuid( Ulid::fromTimestamp(round((int)$date->format('Uu') / 1000))->getTime() . str_repeat($isEnd ? 'Z' : '0', 16), ); return [ $createPart($dates[0], false), $createPart($dates[1], true), ]; } $uuids = createUuidRange($dates); /* array(2) { [0]=> string(36) "016f5e66-e800-0000-0000-000000000000" [1]=> string(36) "016f638d-4400-ffff-ffff-ffffffffffff" } */