php – 将整数ID转换为String的对称算法

我想用MySQL表格字段(question_id)中的整数和Auto Incr引入短的uniq字符串ID.

示例当用户指向www.something.com/SjBWY – > PHP获取id = 23511的记录;

我想隐藏有关问题数量的信息,并介绍使用某种翻译算法将问题代码1到1映射到question_id.
我不想将question_code存储在数据库中,我相信MysqL开发人员比我聪明,并且创建了可靠的机制来生成uniq数字.

天真的方法:(http://ideone.com/rK4hzx)

$num = 11231;

while($num > 0) {
    $v = ord( $num % 10);
    $v += 25;
    echo chr($v);

    $num = round($num / 10);
}
// JLKJJ

$result = array_reverse(str_split('JLKJJ'));
foreach ($result as $single) {
 echo chr(ord( $single)-25);
}
// 11231

问:你能提出更好的解决方案吗?

天真的aproche弱点:

>我希望能够使用小字母和大字母
>我希望能够尽可能长地将字符串长度限制为5.
>在生成的字符串中不应该是明显的序列. 11的值应该尽可能从12.

编辑
算法应该是对称的意思是我可以翻译Int-> String和String-> Int.
MD5和其他哈希算法只是一种方式,我无法从String-> Int转换

解决方法:

终于找到了我想要的东西.它被称为:
http://www.hashids.org/它有PHP,java,nodejs,ruby,.net等版本.

hashids was designed for use in URL shortening, tracking stuff,
validating accounts or making pages private (through abstraction).
Instead of showing items as 1, 2, or 3, you Could show them as
b9iLXiAa, EATedTBy, and Aaco9cy5. Hashes depend on your salt value.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...