java密码随机生成

生成一个8-20个字符,且必须包含字母、数字和特殊符号

package ***;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

/**
 * 底座密码生成
 * @author ****
 * @since 2023/8/28 17:10
 */
public class PasswordGenerator {

    /**
     * 生成指定范围的随机数
     */
    private static int randomNum(int min, int max) {
        Random rand = new Random();
        return rand.nextInt(max - min + 1) + min;
    }

    /**
     * 数组乱序,洗牌算法:从数组末尾开始,选取最后一个元素,与数组中随机一个位置的元素交换位置,依次类推
     */
    private static void shuffle(List<Object> list) {
        int size = list.size();
        for (int i = size; i > 1; i--) {
            Collections.swap(list, i - 1, randomNum(0, i - 1));
        }
    }

    /**
     * 随机生成一个字母
     */
    private static char createLetter() {
        char[] letters = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
        int index = randomNum(0, letters.length - 1);
        return letters[index];
    }

    /**
     * 随机生成一个特殊符号
     */
    private static char createSpecialCode() {
        char[] specialCodes = {'~', '!', '@', '#', '%', '^', '&', '*', '_', '-', '+', '=', '`', '?', '|', ':', ';', ',', '.'};
        int index = randomNum(0, specialCodes.length - 1);
        return specialCodes[index];
    }

    /**
     * 随机生成密码:要求包含数字+字母+特殊字符,长度8-20
     * 密码不固定位数:2个字符 + 4个数字 + 2到14个字母
     */
    public static String createPwd(int min, int max) {
        List<Object> pwdList = new ArrayList<>();
        for (int i = 0; i < 2; i++) {
            char code = createSpecialCode();
            pwdList.add(code);
        }
        for (int i = 0; i < 4; i++) {
            int number = randomNum(0, 9);
            pwdList.add(number);
        }
        int letterNum = randomNum(min - 6, max - 6);
        for (int i = 0; i < letterNum; i++) {
            char letter = createLetter();
            pwdList.add(letter);
        }
        shuffle(pwdList);
        StringBuilder sb = new StringBuilder();
        for (Object obj : pwdList) {
            sb.append(obj);
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        // 指定密码长度为8-20
        String password = createPwd(8, 20);
        System.out.println(password);
    }
}


你可能感兴趣的:(java,开发语言)