• java生成自定义长度的唯一随机字符串


    思路

    基于唯一数字,再随机指向ASCII码的大小写字母的编码值实现随机,唯一数字可以由redis自增或者雪花id等生成。
    
    • 1

    实现代码

    /**
         * @description: 生成10个字符的唯一随机字符串,由数字大小写字母组成
         * @date 15:58 2023/10/13
         * @param increment 唯一数字
         * @param len 唯一随机字符长度
         **/
        private static String generateUkStr(long increment, int len) {
            char[] incrementArr = String.format("%0" + len + "d", increment).toCharArray();
            Pair<Integer, Integer> pairA = Pair.of(17, 33);
            Pair<Integer, Integer> pairB = Pair.of(49, 65);
            StringBuilder result = new StringBuilder(len);
            char s;
            for (char c : incrementArr) {
                int randomNum = ThreadLocalRandom.current().nextInt(0, 3);
                if (randomNum == 0) {
                    s = c;
                } else if (randomNum == 1) {
                    s = (char) (c + ThreadLocalRandom.current().nextInt(pairA.getKey(), pairA.getValue() + 1));
                } else {
                    s = (char) (c + ThreadLocalRandom.current().nextInt(pairB.getKey(), pairB.getValue() + 1));
                }
                result.append(s);
            }
            return result.toString();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    测试

    • 基于自增数字生成100万个
    public static void main(String[] args) {
            //测试生成100万个唯一随机字符,长度为10
            Set<String> set = new HashSet<>();
            //唯一数字长度为8
            for (long i = 11111111; i < 12111111; i++) {
                String result = generateUkStr(i, 10);
                System.out.println(result);
                if (set.contains(result)) {
                    throw new IllegalCallerException("已存在");
                }
                set.add(result);
            }
            System.out.println(String.format("总数量%d", set.size()));
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 结果
      在这里插入图片描述
  • 相关阅读:
    【UniApp】-uni-app-项目计算功能(苹果计算器)
    基于单片机的空调的温度控制系统设计
    【python】(9)迭代与生成器
    像素和分辨率的关系
    (三)Mybatis------引入Mapper接口以及传入各种参数类型
    django setting.py中的SECRET_KEY
    锐捷端口安全实验配置
    【Milvus的以文搜图】
    gRPC(一)入门:什么是RPC?
    Flink 实践 | B站流式传输架构的前世今生
  • 原文地址:https://blog.csdn.net/qq_41633199/article/details/133813142