安装Composer 扩展 id-generator
composer require hejunjie/id-generator使用示例
1. Snowflake(雪花算法)
适用场景:高并发下的数据库主键、核心业务订单号(类似巨量广告线索 ID)。
use Hejunjie\IdGenerator\IdGenerator; // 基础用法(单机环境) $generator = IdGenerator::make('snowflake'); $id = $generator->generate(); // 例如:233953299479035905 // 分布式环境(强烈建议配置 Redis 锁,防止多节点并发冲突) $generator = IdGenerator::make('snowflake', [ 'redisConfig' => [ 'host' => '127.0.0.1', 'port' => 6379, 'auth' => null ] ]); $id = $generator->generate();2. Timestamp(时间戳 ID)
适用场景:需要带业务前缀的流水号,且要求按时间排序。
$generator = IdGenerator::make('timestamp', [ 'prefix' => 'ORD', // 订单前缀 'redisConfig' => [ // 同样支持 Redis 锁防重 'host' => '127.0.0.1', 'port' => 6379, 'auth' => null ] ]); $id = $generator->generate(); // 例如:ORD17557788132382945033. Readable(可读 ID)
适用场景:需要直接展示给用户的单号、优惠券码等,方便人工核对。
$generator = IdGenerator::make('readable', [ 'prefix' => 'ORD', // 前缀 'randomLength' => 6 // 随机字符串长度 ]); $id = $generator->generate(); // 例如:ORD-2025-08-21-7ABP014. UUID
适用场景:跨系统交互、不需要排序的通用唯一标识。
$generator = IdGenerator::make('uuid', [ 'version' => 'v4' // 支持 v1 或 v4 ]); $id = $generator->generate(); // 例如:ad0f5dfc-4a3d-4c2a-853b-aa3a3d9062aa5. 自定义策略
适用场景:有特殊的内部编码规则(如USER-随机数)。
use Hejunjie\IdGenerator\Contracts\Generator; use Hejunjie\IdGenerator\IdGenerator; // 1. 定义生成器类 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]; } } // 2. 注册并使用 IdGenerator::registerStrategy('custom', function (array $config) { return new MyCustomGenerator($config['prefix'] ?? 'MY'); }); $generator = IdGenerator::make('custom', ['prefix' => 'USR']); $id = $generator->generate(); // 例如:USR-4128安装 Composer 扩展 ramsey/uuid
composer require ramsey/uuid使用示例
<?php namespace app\api\controller; use app\common\controller\Api; use Ramsey\Uuid\Uuid; class Index extends Api { protected $noNeedLogin = ['*']; protected $noNeedRight = ['*']; public function index() { $uuid = Uuid::uuid4(); echo '<pre>'; var_dump($uuid->toString()); } }