mpyw/uuid-ulid-converter

UUID 与 ULID 双向转换器

v1.0.0 2021-10-27 11:43 UTC

This package is auto-updated.

Last update: 2024-09-21 19:25:06 UTC


README

Build Status Coverage Status

UUIDULID 双向转换器

安装

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"
}
*/