PHP基转换为唯一id

PHP基转换为唯一id,php,unique,Php,Unique,我正在使用cassandra的uuid,它生成这个utf8字符串: f6195c60-364e-11e2-b43e-c78503d589ce21rvhf9q21 但我需要把它缩短到4-6个字母之间,在我在谷歌上搜索了一下之后,我发现了 base_convert($id,5,36) 这就是原因,但它真的会保持独特吗 这可能是个愚蠢的问题,但我需要一些解释。这不是utf8字符串。UTF8是字符编码,UUID完全适合7bit编码base\u convert()将不起作用,因为UUID不是一个数字(至少

我正在使用cassandra的
uuid
,它生成这个utf8字符串:

f6195c60-364e-11e2-b43e-c78503d589ce21rvhf9q21

但我需要把它缩短到4-6个字母之间,在我在谷歌上搜索了一下之后,我发现了

base_convert($id,5,36)

这就是原因,但它真的会保持独特吗


这可能是个愚蠢的问题,但我需要一些解释。

这不是utf8字符串。UTF8是字符编码,UUID完全适合7bit编码
base\u convert()
将不起作用,因为UUID不是一个数字(至少由于
-
)。不,把它缩短到4个字母不会使它更好。假设你使用0-9,a-z等于36!4种组合,只有这样冲突才有可能发生(谁知道您是如何生成该ID的,以及生成的频率)。一般来说-如果您想要唯一-使其唯一(比如在DB中存储已经生成的ID,以便您知道何时发生冲突)。现在你只是希望并试着祈祷。

你有没有研究过内置在PHP中的uniqid()函数?我相信它在默认情况下会返回一个14个字符的字符串,并允许您输入自定义前缀以添加额外的唯一性

您可以在这里找到有关uniqid()的更多信息:

来自Cassandra Wiki:

[...] UUIDs are represented by a 32 digit hexadecimal number in the form of xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
正如我在您的UUID示例中看到的,有一些可笑的字符,如
r
v
h
q
。 我认为这是一个错误造成的,我将尝试回答您的问题:

如果要使用
base\u convert
,首先应该省略连字符

base\u convert()
函数签名如下:

string base_convert ( string $number , int $frombase , int $tobase )
请注意,在您的案例中,
frombase
参数应该是16而不是5,这是因为UUID是32位十六进制数

最后,您可以用作
tobase
的最大数字是
36
(根据)

因此,你能做的最好的事情是:

base_convert($yourNumber, 16, 36);
转换后的数字长度将超过4-6个字符。 因此,通过使用
base\u convert()
,不可能收缩UUID并保持唯一的编号


从技术上讲,如果您假定UUID为十六进制数,并将其转换为基数128,则会得到一个4个字母的结果。

不,这可能会对您有所帮助。