// 62进制字符集
private static final String BASE62 = 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz;
// 将数字转换为62进制字符串
public static String encode(long num) {
StringBuilder sb = new StringBuilder();
while (num 0) {
sb.append(BASE62.charAt((int) (num % 62)));
num /= 62;
}
return sb.reverse().toString();
}
// 将62进制字符串转换为数字
public static long decode(String str) {
long num = 0;
for (char c : str.toCharArray()) {
num = num * 62 + BASE62.indexOf(c);
}
return num;
}
// 使用MD5生成短链接
public static String generateShortUrl(String longUrl) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance(MD5);
byte[] hash = md.digest(longUrl.getBytes());
StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
long hashNum = Long.parseLong(hexString.toString(), 16);
return encode(hashNum);
}