[英]Symmetric algorithm to convert integer ID to 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弱点:
编辑算法应该是对称的意思是我可以翻译Int-> String和String-> Int。 MD5和其他哈希算法只是一种方式 ,我无法从String-> Int转换
终于找到了我想要的东西。 它被称为: http : //www.hashids.org/它有php,java,nodejs,ruby,.net等版本。
Hashids旨在用于URL缩短,跟踪内容,验证帐户或将页面设为私有(通过抽象)。 您可以将它们显示为b9iLXiAa,EATedTBy和Aaco9cy5,而不是将项目显示为1,2或3。 哈希值取决于您的盐值。
由于可能发生碰撞,散列不是一个好的选择。 你需要什么样的双射变换。
例如,您可以加密ID ...
(可选)使用6位块和字符映射(例如[a-zA-Z0-9_-])对结果位字符串进行base64编码或其他操作。
无论您做什么,请确保您可以轻松地进行逆向转换。
为什么不将uniq字符串ID转换为字节然后再转换为long / int? 要转换回来将long / int转换为字节然后转换为字符串....
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.