使用 MD5 哈希算法的特性保证对于不同的输入,生成的哈希值是唯一的。
只要链接不同,生成的短链码就不会重复
- 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));
-
- }
- }