【发布时间】:2013-06-25 19:15:13
【问题描述】:
我想使用带有 Auto Incr 的 MySQL 表字段 (question_id) 中的整数引入短 uniq 字符串 ID。
示例当用户指向 www.something.com/SjBWY -> php 将获取 id=23511 的记录;
我想隐藏有关问题数量的信息,并使用某种翻译算法将 question_code 以 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弱点:
- 我希望能够使用大小写字母
- 我希望能够将字符串长度限制为尽可能长。
- 在生成的字符串中不应有明显的序列。 11 的值应尽可能远离 12。
编辑 算法应该是对称的,意味着我可以翻译 Int->String 和 String->Int。 MD5 和其他哈希算法只是一种方式,我无法从 String->Int
翻译【问题讨论】:
-
为什么不直接使用像 MD5 这样的散列算法?
-
使用散列算法将标签映射到短字符串,并且(如果您愿意)将字符串中的字节解释为整数
-
散列可能是更好的选择...
-
散列只是一种方式。
-
@IgorS。只需将每个字母映射到它的 ascii 代码并将它们连接起来就很容易了,然后你就可以轻松地来回走动了。