url地址生成短链接

package org.springblade.questionnaire.questionnairesendrecord;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;

public class ShortUrlGenerator {

	private static final String ALGORITHM = "MD5";
	private static final String CHAR_SET = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	private static final int SHORT_URL_LENGTH = 8; // 短链接长度

	public static String generate(String url) {
		try {
			String salt = generateSalt();
			String urlWithSalt = url + salt;

			MessageDigest md = MessageDigest.getInstance(ALGORITHM);
			md.update(urlWithSalt.getBytes());
			byte[] digest = md.digest();

			BigInteger bi = new BigInteger(1, digest); // 确保正数
			String hex = bi.toString(16).toLowerCase(); // 转换为小写十六进制

			// 补足长度,确保足够长以从中抽取足够的字符
			while (hex.length() < SHORT_URL_LENGTH * 4) {
				hex += hex; // 将哈希串重复拼接以确保足够长
			}

			StringBuilder shortUrl = new StringBuilder(SHORT_URL_LENGTH);
			for (int i = 0; i < SHORT_URL_LENGTH; i++) {
				// 每次取4个字符转换成16进制数,然后用 & (CHAR_SET.length() - 1) 来确保索引在有效范围内
				int index = Integer.parseInt(hex.substring(i * 4, i * 4 + 4), 16) % CHAR_SET.length();
				shortUrl.append(CHAR_SET.charAt(index));
			}
			return shortUrl.toString();
		} catch (NoSuchAlgorithmException e) {
			throw new RuntimeException(e);
		}
	}

	private static String generateSalt() {
		return Long.toString(System.currentTimeMillis()) + new Random().nextInt(999999);
	}

	// 测试方法
	public static void main(String[] args) {
		System.out.println(generate("https://www.example.com"));
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值