短域名/URL Shortening/Base36/Base62

本文介绍了短域名URL编码的实现方法,重点讲解了使用Base62编码的优势,并提供了具体的编码和解码步骤及示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

已经不少朋友问我(gembler),短域名URL的编码该怎么实现。当时可能我答得比较笼统,所以写个文章统一分享。

据我(gembler)所知的方法有以下几种:
[list]
[*]Base62 或 Base36
[*]Hash
[*]随机数
[*]自定义
[*]等等等等等.......
[/list]

恩,我选了 [b]Base62 或 Base36[/b]

首先,给一个简单处理步骤,这纯粹是我(gembler)个人想法。
[list]
[*]URL入库(K/V,MySQL...),同时带个顺序增长的number
[*]拿着那个number进行编码(Base62/Base36),编码后的结果也存库(K/V,MySQL...)
[*]直接拿着那个编码后的结果查字典(K/V,MySQL...)
[/list]

我(gembler)在Base62和Base36之间选了Base62,为什么?因为比Base36更短。

	/**
* 码表
*/
ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";


编码部份:
	private static String encoding(long num) {
if(num < 1)
throw new IllegalArgumentException("num must be greater than 0.");

StringBuilder sb = new StringBuilder();
for (; num > 0; num /= 62) {
sb.append(ALPHABET.charAt((int) (num % 62)));
}

return sb.toString();
}


有朋友说,不想用编码结果查字典,直接解码行不行?
行,当然行。

解码部份:
	private static long decoding(String str) {
str = str.trim();
if(str.length() < 1)
throw new IllegalArgumentException("str must not be empty.");

long result = 0;
for (int i = 0; i < str.length(); i++) {
result += ALPHABET.indexOf(str.charAt(i)) * Math.pow(62, i);
}

return result;
}


完整源码,里面包含Base62和Base36,>>[url=http://dl.iteye.com/topics/download/7fb60fe4-b401-3d8e-a935-1a04198c773c]这里拿[/url]<<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值