package com.consum.base.core.util; import com.consum.base.util.IdUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.security.crypto.codec.Hex; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.util.HashMap; import java.util.Map; /** * 功能描述:获取随机值 * * @author dhz * @date 2023-10-16 11:20 * @Version 1.0 **/ @Slf4j public class RandomUtil { /** * 加盐字符串 */ private static final String SALT = "13"; /** * 获取分组序号 * * @param id 分组业务主键id * @param group 分组数 从0开始到 group-1 共group 组 * @return 分组数 */ public static Integer getRandom(Long id, Integer group) { try { MessageDigest md5 = MessageDigest.getInstance("md5"); byte[] digest = md5.digest((id + SALT).getBytes(StandardCharsets.UTF_8)); char[] encode = Hex.encode(digest); Long parseLong = Long.parseLong(String.valueOf(encode).substring(0, 3), 16); return (int) (parseLong % group); } catch (Exception e) { log.error(e.getMessage()); } return -1; } public static void main(String[] args) { Map map = new HashMap(2); Integer group = 13; long generateId = IdUtil.generateId(); for (int i = 0; i < 10000; i++) { Integer random = RandomUtil.getRandom(generateId, group); if (map.containsKey(random)) { map.put(random, map.get(random) + 1); } else { map.put(random, 1); } } System.out.println(map); } }