PHP基转换为唯一id
我正在使用cassandra的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不是一个数字(至少
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个字母的结果。不,这可能会对您有所帮助。