首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP基本转换为唯一id

PHP基本转换为唯一id
EN

Stack Overflow用户
提问于 2012-11-24 23:55:32
回答 3查看 1.1K关注 0票数 2

我使用的是来自cassandra的uuid,它生成这个utf8字符串:

f6195c60-364e-11e2-b43e-c78503d589ce21rvhf9q21

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

base_convert($id, 5, 36);

它确实做到了这一点,但它真的会保持独特吗?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-25 00:19:38

来自Cassandra Wiki:

代码语言:javascript
复制
[...] UUIDs are represented by a 32 digit hexadecimal number in the form of xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

正如我在你的示例UUID中看到的,有一些可笑的字符,比如rvhq。我假设这是一个错误造成的,并将尝试回答您的问题:

如果你想使用base_convert,首先你应该省略连字符。

base_convert()函数签名如下:

代码语言:javascript
复制
string base_convert ( string $number , int $frombase , int $tobase )

注意,本例中的frombase参数应该是16而不是5,这是因为UUIDs是32位的十六进制数字。

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

所以你能做的最好的事情是:

代码语言:javascript
复制
base_convert($yourNumber, 16, 36);

并且转换后的数字长度将超过4-6个字符。因此,不可能通过使用base_convert()来缩小UUID并保持唯一的编号。

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

票数 2
EN

Stack Overflow用户

发布于 2012-11-25 00:03:22

这不是utf8字符串。UTF8是字符编码,UUID甚至完全适合7位编码。base_convert()将不起作用,因为UUID不是一个数字(至少由于-)。不,把它缩短到4个字母并不会让它变得更好。假设您使用0-9,而a-z只给出36!4个组合,因此很可能发生冲突(谁知道您是如何生成该ID的,以及生成该ID的频率如何)。通常-如果你想唯一-使它唯一(比如在DB中存储已经生成的ID,这样你就可以知道什么时候发生冲突)。现在你只是希望并试着祈祷。

票数 3
EN

Stack Overflow用户

发布于 2012-11-25 00:18:07

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

你可以在这里找到更多关于uniqid()的信息:http://php.net/manual/en/function.uniqid.php

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13542818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档