生成随机数

Java常用方法   2025-01-11 11:06   134   0  

一、UUID

import java.util.UUID;

/**
 * 生成32位的随机数UUID,并且去掉中间的-,字母全部转大写
 * @return 32位的随机数UUID字符串
 */
public static String getUuid() {
    return UUID.randomUUID().toString().replace("-", "").toUpperCase();
}

二、通过 Random 生成指定长度包含数字和字母的 UUID

package com.chenwc;

import java.util.Random;
import java.util.UUID;

public class RandomUuid {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        System.out.println(getUuidByNumberAndCharacter(32));
        System.out.println(getUuidByCharacter(32));
        System.out.println(getUuid());
        System.out.println(UUID.randomUUID().toString());
    }

    /**
     * 生成随机数字符串
     * 
     * @param len             随机数字符串长度
     * @return 随机数字符串
     */
    public static String getRandomUuid(int len) {
        return getRandomUuid(len, true, true, true, true);
    }

    /**
     * 生成随机数字符串
     * 
     * @param len             随机数字符串长度
     * @param haveNumber      是否包含数字
     * @param haveUpperLetter 是否包含大写字母
     * @param haveLowerLetter 是否包含小写字母
     * @param haveSymbol      是否包含特殊符号
     * @return 随机数字符串
     */
    public static String getRandomUuid(int len, boolean haveNumber, boolean haveUpperLetter, boolean haveLowerLetter,
            boolean haveSymbol) {
        if (len <= 0) {
            System.out.println("长度要大于等于0");
            return null;
        }
        StringBuilder val = new StringBuilder();
        Random random = new Random();
        List<String> arrayList = new ArrayList<String>();
        if (haveNumber) {
            arrayList.add("num");
        }
        if (haveLowerLetter) {
            arrayList.add("lower");
        }
        if (haveUpperLetter) {
            arrayList.add("upper");
        }
        if (haveSymbol) {
            arrayList.add("char");
        }
        if (arrayList.isEmpty()) {
            System.out.println("至少设置一种符号");
            return null;
        }
        for (int i = 0; i < len; i++) {
            String str = arrayList.get(random.nextInt(arrayList.size()));
            if ("lower".equalsIgnoreCase(str)) {
                // 产生a-z字母
                val.append((char) (97 + random.nextInt(26)));
            } else if ("upper".equalsIgnoreCase(str)) {
                // 产生A-Z字母
                val.append((char) (65 + random.nextInt(26)));
            } else if ("num".equalsIgnoreCase(str)) {
                // 产生0-9数字
                val.append(random.nextInt(10));
            } else if ("char".equalsIgnoreCase(str)) {
                // 产生特殊字符33-47,58-64,91-96,123-126
                int ay = random.nextInt(4);
                if (ay == 0) {
                    val.append((char) (33 + random.nextInt(15)));
                } else if (ay == 1) {
                    val.append((char) (58 + random.nextInt(7)));
                } else if (ay == 2) {
                    val.append((char) (91 + random.nextInt(6)));
                } else if (ay == 3) {
                    val.append((char) (123 + random.nextInt(4)));
                }
            }
        }
        return val.toString();
    }

    /**
     * 生成指定长度随机数UUID,包含0-9数字和字母(字母包含大小写)
     *
     * @param len 指定长度
     * @return 随机数UUID字符串
     */
    public static String getUuidByNumberAndCharacter(int len) {
        if (len <= 0) {
            System.out.println("长度要大于等于0");
            return null;
        }
        StringBuilder val = new StringBuilder();
        Random random = new Random();
        for (int i = 0; i < len; i++) {
            String str = random.nextInt(2) % 2 == 0 ? "num" : "char";
            if ("char".equalsIgnoreCase(str)) {
                // 产生a-z或者A-Z字母
                int nextInt = random.nextInt(2) % 2 == 0 ? 65 : 97;
                val.append((char) (nextInt + random.nextInt(26)));
            } else {
                // 产生0-9数字
                val.append(random.nextInt(10));
            }
        }
        return val.toString();
    }

    /**
     * 生成指定长度随机数UUID,包含0-9数字和字母(字母包含大小写)
     *
     * @param len 指定长度
     * @return 随机数UUID字符串
     */
    public static String getUuidByCharacter(int len) {
        if (len <= 0) {
            System.out.println("长度要大于等于0");
            return null;
        }
        StringBuilder val = new StringBuilder();
        Random random = new Random();
        for (int i = 0; i < len; i++) {
            // 产生a-z或者A-Z字母
            int nextInt = random.nextInt(2) % 2 == 0 ? 65 : 97;
            val.append((char) (nextInt + random.nextInt(26)));
        }
        return val.toString();
    }

    /**
     * 生成随机数UUID
     *
     * @return 随机数UUID字符串
     */
    public static String getUuid() {
        StringBuilder val = new StringBuilder();
        Random random = new Random();
        for (int i = 0; i < 32; i++) {
            String str = random.nextInt(2) % 2 == 0 ? "num" : "char";
            if ("char".equalsIgnoreCase(str)) {
                // 产生a-z字母
                val.append((char) (97 + random.nextInt(26)));
            } else {
                // 产生0-9数字
                val.append(random.nextInt(10));
            }
            if (i == 7) {
                val.append("-");
            }
            if (i == 11 || i == 15 || i == 19) {
                val.append("-");
            }
        }
        return val.toString().toUpperCase();
    }
}

三、通过 Random 生成指定长度整数的随机数

package com.chenwc;
import java.util.Random;

public class RandomInt {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        System.out.println(getRandomInt(20));
    }
    /**
     * 生成指定长度的随机整数
     *
     * @param len 长度
     * @return 随机整数
     */
    public static String getRandomInt(int len) {
        if (len <= 0) {
            System.out.println("长度要大于等于0");
            return null;
        }
        StringBuilder rs = new StringBuilder();
        for (int i = 0; i < len; i++) {
            int a = getRandomInt();
            //首位数字不能为0
            if (0 == i) {
                while (0 == a){
                    a = getRandomInt();
                }
            }
            rs.append(a);
        }
        return rs.toString();
    }

    /**
     * 获取一个0-9的整数
     * @return 0-9的整数
     */
    private static Integer getRandomInt(){
        Random r = new Random();
        return r.nextInt(10);
    }
}


博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。