62进制在短链接场景的妙用
假如要生成6位的字符 如何才能可靠的生成更多数据。
10进制 最大只能生成 10 ^ 6 - 1 =999999个
16进制 最大只能生成 16 ^ 6 - 1 =16777215个
16进制里面已经包含了 A B C D E F 这几个字母
62进制 最大竟能生成 62 ^ 6 - 1 =56800235583个 基本上够玩了吧。
A-Z a-z 0-9刚好等于62位
64进制 因为包含了特殊字段 用于短链接有点特殊 所以现在大部分都是使用62进制或者其他的算法。
接下来将使用原有的编码串转换为62进制即可嫁接到现有业务中去 仅需少许改动。
如果原有的id是10进制数字 那么就可以把10进制转换为62进制即可。
如果原有的id是字符串或者其他标识 可以用先获取到hashcode后 当作是做个10进制数再进行62进制转换。
10进制转换62进制的逻辑就是 一直循环用62取余 然后倒序。代码如下
private static String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
private static int scale = 62;
private static int minlen = 6;
public static String base62Encode(long num) {
StringBuilder sb = new StringBuilder();
int remainder;
while (num > scale - 1) {//大于62-1才计算 小于就直接是自身即可
remainder = Long.valueOf(num % scale).intValue();
sb.append(chars.charAt(remainder));
num = num / scale;
}
sb.append(chars.charAt(Long.valueOf(num).intValue()));
String value = sb.reverse().toString();
return StringUtils.leftPad(value, minlen, '0');
}
public static void main(String[] args) {
System.out.println( base62Encode(9000000000L));
}
上面程序输出 9p558K
这么大的数值就用这几个字符表达就能完成了。可想这个玩意还能用于很多场景 比如id 用少量的字符表示更大的数据、临时转码等场景
在短链接领域我知道是 B站 抖音 估计都是用的62进制。
用随便一个转换工具网站 转换一个地址 如 http://m6z.cn/5X6an7 看起来也像是62进制。
上面的chars
还能调整顺序 变为自己的base62编码。这样的玩法还可以变通为58进制等。
如果你的业务线很大 还可以为62进制编码加业务编码前缀。如 推荐系统的规则为88开头,客户系统为99开头。
转载请注明出处。
作者:peachyy
出处:http://www.cnblogs.com/peachyy/
出处:https://peachyy.gitee.io/
出处:https://peachyy.github.io/
公众号:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!