生成随机密码

重置密码是比较常见的操作,通常要求生成比较复杂的随机密码,比如要求长度九位,并且包含数字、大小写和特殊字符。

  • 数字字符通常要求去掉0和1,因为容易和字母o、i混淆
  • 字母通常要求去掉的L、I、J、O、l、i、j、o,也是容易混淆
  • 特殊字符也要去掉很多,因为很多用户对键盘上的特殊字符不敏感,可能某个字符需要找半天,所以通常会保留显眼位置上的特殊字符,比如!@#$%^&*

示例代码:

import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class GeneratePassword {

    private static final String lowStr = "abcdefghkmnpqrstuvwxyz";
    private static final String upperStr = "ABCDEFGHKMNPQRSTUVWXYZ";
    private static final String specialStr = "!@#$%^&*";
    private static final String numStr = "23456789";

    // 随机获取字符串字符
    private static char getRandomChar(String str) {
        SecureRandom random = new SecureRandom();
        return str.charAt(random.nextInt(str.length()));
    }

    //获取大写字符
    private static char getUpperChar() {
        return getRandomChar(upperStr);
    }

    //获取小写字符
    private static char getLowChar() {
        return getRandomChar(lowStr);
    }

    //获取数字字符
    private static char getNumberChar() {
        return getRandomChar(numStr);
    }

    //获取特殊字符
    private static char getSpecialChar() {
        return getRandomChar(specialStr);
    }

    //随机从大写、小写、特殊和数字字符中选取一个字符
    private static char getRandomChar(int num) {
        switch (num) {
            case 0:
                return getUpperChar();
            case 1:
                return getLowChar();
            case 2:
                return getSpecialChar();
            default:
                return getNumberChar();
        }
    }
   
    private static String generatePassword(int len) {

        List<Character> list = new ArrayList<>();
        //保证大写字符、小写字符、特殊字符和数字字符至少有一个
        list.add(getLowChar());
        list.add(getUpperChar());
        list.add(getNumberChar());
        list.add(getSpecialChar());

        SecureRandom random = new SecureRandom();
        for (int i = 4; i < len; i++) {
            int num = random.nextInt(4);
            list.add(getRandomChar(num));
        }

        //打乱顺序
        Collections.shuffle(list);

        StringBuffer sb = new StringBuffer();
        for (Character ch : list) {
            sb.append(ch);
        }
        return sb.toString();

    }

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            System.out.println(generatePassword(9));
        }
    }
}

原文地址:https://blog.csdn.net/qingquanyingyue/article/details/106336742,在此基础上修改的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值