linkorb / xuid
PHP的XUID库
Requires
- ramsey/uuid: ^3.0||^4.1
Requires (Dev)
- phpunit/phpunit: ~5.0
This package is auto-updated.
Last update: 2024-08-26 05:49:34 UTC
README
XUIDs是URL友好的压缩UUIDs www.xuid.org
为什么使用XUIDs?
UUID v4是一个很好的选择,用作数据库表的主键。
但是,它们在URL和数据库中使用起来相当长:32个字母数字字符和四个连字符(总共36个字符)
XUID是一个UUID,转换成一个128位值,转换成一个base64字符串(去除填充字符),然后转换成URL安全的base64(将+
和/
分别替换为-
和_
- 可用自定义映射,下面有更多信息)。
这为您提供了一个22个字符的字符串,可以在URL中使用。
它还可以安全地解码回完整的UUID字符串。
优点
- 在数据库字段中占用空间更少
- 更短的URL
- URL中的不可猜测的主键
使用方法
use Xuid\Xuid; $xuid = new Xuid(); $in = $xuid->getUuid(); // ffe25f31-907e-46c0-b2f8-8bbfedb9082b $tmp = $xuid->encode($in); // _-JfMZB-RsCy-Iu_7bkIKw $out = $xuid->decode($tmp); // ffe25f31-907e-46c0-b2f8-8bbfedb9082b $tmp = $xuid->getXuid(); $newXuid = $xuid->getXuid(); if (!$xuid->isValidXuid($newXuid)) { // this Xuid is valid }
所有方法也可以静态调用
use Xuid\Xuid; $x = Xuid::getXuid(); $u = Xuid::decode($x);
示例
您可以在example/
目录中找到示例代码。
要生成100个XUID,运行以下命令
php example/generate.php
示例输出
y9G-jWmYQcW5HyxiU_Pnew: cbd1be8d-6998-41c5-b91f-2c6253f3e77b
IOnEowPFR-G74hEBtTSJVQ: 20e9c4a3-03c5-47e1-bbe2-1101b5348955
Jgn4-Hs3STyNMC_ectX4kA: 2609f8f8-7b37-493c-8d30-2fde72d5f890
-rO6xKQFQCGPozxJf35lGw: fab3bac4-a405-4021-8fa3-3c497f7e651b
c6l3fR3mThSlL1OlNYgCvg: 73a9777d-1de6-4e14-a52f-53a5358802be
3PK9eo00T92z6oSsFNCY-A: dcf2bd7a-8d34-4fdd-b3ea-84ac14d098f8
vCMyGdkGT-m6e6m4BKcfgA: bc233219-d906-4fe9-ba7b-a9b804a71f80
JJ_1Ndd3S9SwG9urLr5NTQ: 249ff535-d777-4bd4-b01b-dbab2ebe4d4d
KSn-sn-cToydyfvjLZHhBA: 2929feb2-7f9c-4e8c-9dc9-fbe32d91e104
fi_nfoXrQ_GoYrzT4oZqRw: 7e2fe77e-85eb-43f1-a862-bcd3e2866a47
1vKKRSlHQICMj5X5iktHZA: d6f28a45-2947-4080-8c8f-95f98a4b4764
yWJ5VPsISbS46anoEO2HVQ: c9627954-fb08-49b4-b8e9-a9e810ed8755
...etc
仅生成代数XUID
-
和_
有时会出现在XUID中。如果您更喜欢仅包含代数的XUID,请在生成XUID之前简单调用以下静态方法
Xuid\Xuid::alphaNumericOnly();
这将持续生成XUID,直到找到一个只包含代数字符的XUID。这意味着可能需要两次或更多次尝试才能返回有效的XUID。在实际应用中,这不会增加任何可感知的延迟。但在大量生成XUID时,这一点值得注意。
自定义字符映射
默认的XUID字符映射(URL安全)是
+
=>-
/
=>_
但是,您可以通过调用Xuid::map()
为base64编码中使用的任何字符应用任何其他映射。例如,您可以通过映射+
和_
到可选字符来创建双击安全的XUID(整个XUID可以通过双击简单选择),例如
Xuid::setMap( [ '+' => 'Æ', '/' => 'Ä', ] ); echo Xuid::getXuid() . PHP_EOL; // Outputs a XUID such as `xQamÆ0kGSjepUAD1bÄ09kg`
请注意,如果您的用例需要URL安全的XUID,请只传递URL安全的字符。
PHPUnit测试
vendor/bin/phpunit test/
由LinkORB工程团队提供
查看我们的其他项目:engineering.linkorb.com。
顺便说一下,我们在招聘!