您的位置: 首页> PHP源码> 订单号老是撞车?我写了个通用 PHP ID 生成器

订单号老是撞车?我写了个通用 PHP ID 生成器

时间:2025-09-05 12:30:02 来源:互联网

在日常开发里,我们经常会遇到这种情况:

一开始,我也用过 time() 拼接随机数、或者 uniqid()
这些方案在小项目里够用,但一旦放到并发稍微高点的业务里,就会出现各种问题:

久而久之,我在不同项目里反复造轮子,干脆就写了一个通用的小工具,把常见的 ID 生成方式都封装起来了。


这个工具能做什么?

它支持几种常见的生成策略:

1. Snowflake(雪花算法)

use HejunjieIdGeneratorIdGenerator;

$generator = new IdGenerator::make('snowflake')
$id = $generator->generate();

echo $id; // 233953299479035905

还能解析出来生成时间、机器 ID 等信息,排查问题时很方便。


2. Timestamp(时间戳 ID)

use HejunjieIdGeneratorIdGenerator;

$generator = new IdGenerator::make('timestamp', ['prefix' => 'ORD']);
$id = $generator->generate();

echo $id; // ORD1755778813238294503

3. Readable(可读 ID)

use HejunjieIdGeneratorIdGenerator;

$generator = new IdGenerator::make('readable', ['prefix' => 'ORD', 'randomLength' => 6]);
$id = $generator->generate();

echo $id; // ORD-2025-08-21-7ABP01

4. UUID

use HejunjieIdGeneratorIdGenerator;

$generator = new IdGenerator::make('uuid', ['version' => 'v4']);
$id = $generator->generate();

echo $id; // ad0f5dfc-4a3d-4c2a-853b-aa3a3d9062aa

5. 自定义策略

如果你想要特别的格式,比如 USER-随机数,也能自己实现。

use HejunjieIdGeneratorContractsGenerator;
use HejunjieIdGeneratorIdGenerator;

class MyCustomGenerator implements Generator
{
    public function __construct(private string $prefix = 'MY') {}

    public function generate(): string
    {
        return $this->prefix . '-' . random_int(1000, 9999);
    }
    public function parse(string $id): array
    {
        return ['id' => $id];
    }
}

IdGenerator::registerStrategy('custom', function (array $config) {
    return new MyCustomGenerator($config['prefix'] ?? 'MY');
});

$generator = new IdGenerator::make('custom', ['prefix' => 'ORD']);
$id = $generator->generate();

echo $id; // ORD-4128

为什么要做这个库?

没有什么“高大上”的理由,就是因为自己项目里老是遇到这种需求:

于是就写了这么个东西,后来觉得或许对别人也有用,就开源了。


安装方式

composer require hejunjie/id-generator

最后

这个小工具库目前还是 v1.0.0,功能比较基础。
如果你在项目里也有类似需求,可以拿来试试看。
要是你有更好的想法(比如加 ULID、新的生成算法等),非常欢迎提 PR 或者 Issue,一起完善。

项目地址 ? zxc7563598/php-id-generator

上一篇:聊聊Guzzlehttp上传批量图片优化的经历 下一篇:PHP 测试框架 Pest v4 正式发布 革命性的浏览器测试体验

相关文章

相关应用

最近更新