首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySQL/PHP中由数字ID生成字母数字ID

在MySQL/PHP中由数字ID生成字母数字ID
EN

Stack Overflow用户
提问于 2010-10-31 02:44:48
回答 4查看 2.6K关注 0票数 2

我有一个基本的MySQL数据库,其中每一行都被分配了一个唯一的递增ID号,但是我也希望每行都有一个唯一的6个字符的字母数字ID,它也是递增的。示例:

代码语言:javascript
复制
Row 1: ID = 1, Name = AAAAAA
Row 2: ID = 2, Name = AAAAAB
Row 3: ID = 3, Name = AAAAAC

数据库是通过PHP添加到的,所以这可以通过PHP和纯SQL来完成。

到目前为止,我一直在尝试构建一个可以将数字ID转换为AlphaNumeric ID的PHP函数,但没有成功。

有人有什么建议吗?谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-10-31 02:52:48

这样的代码应该可以工作并生成唯一的ID(只生成字母):

代码语言:javascript
复制
function alphaID($n)
{
    for($r = ""; $n >= 0; $n = intval($n / 26) - 1)
        $r = chr($n%26 + 0x41) . $r;
    return str_pad($r, 6, 'A', STR_PAD_LEFT);
}

echo alphaID(0); // returns "AAAAAA"
echo alphaID(1); // returns "AAAAAB"
...
echo alphaID(8652); // returns "AAALTU"
票数 6
EN

Stack Overflow用户

发布于 2010-10-31 03:09:40

数字id是唯一的。我不会在表中存储字母数字值(这违反了DB规范化的一些规则),而且数字id和字母数字id实际上是同一个值,没有意义重复存储值!如果可能(应该是这样),只使用数值进行查询(我假设它是您的主键)。

我会使用PHP函数将numeric转换为字母数字(比如Tatu Ulmanen发布的),并在您有理由显示字母数字时在页面中调用它。在MSSQL中,如果您不想依赖PHP,则可以编写一个UDF,以便在需要时显示该值。虽然我从来没有真正接触过myssql的存储函数等,所以我不确定是否可以用它来做这些事情。

您还可以使用PHP的base_convert()函数

代码语言:javascript
复制
base_convert(35, 10, 36); //= convert '35' from base '10' to base '36' and you would get 'Z'
票数 3
EN

Stack Overflow用户

发布于 2011-10-03 15:16:04

一种简单的方法是最好以基数32或十六进制格式表示数字...一个简单而快速的解决方法。

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

https://stackoverflow.com/questions/4060149

复制
相关文章

相似问题

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