使用 MD5 哈希算法的特性保证对于不同的输入,生成的哈希值是唯一的。
只要链接不同,生成的短链码就不会重复
java
import lombok.extern.slf4j.Slf4j;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
/**
* java 根据长链接生成短链码 工具类
*/
@Slf4j
public class ConversionUtils {
public static String generateShortCode(String longUrl, int urlLength) {
if (urlLength < 4) {
urlLength = 8; // 默认长度为 8
}
StringBuilder sb = new StringBuilder(urlLength);
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] digest = md.digest(longUrl.getBytes());
String base64Encoded = Base64.getEncoder().encodeToString(digest);
int nLen = 0;
for (int i = 0; i < base64Encoded.length(); i++) {
char c = base64Encoded.charAt(i);
if (c != '/' && c != '+') {
sb.append(c);
nLen++;
}
if (nLen == urlLength) {
break;
}
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
// 处理算法不可用的异常
}
return sb.toString();
}
public static void main(String[] args) {
System.out.println( generateShortCode("https://example.com/very-long-url-path",6));
}
}