java 自动生成密码

java 自动生成密码,且必须包含大小写字母,数字,特殊字符四种中的三种

package com.yili;

import java.util.Random;

/**
 * Created by 韩西德 on 2017/7/23.
 */
public class Test {
    public static void main(String[] args) {

        String password = getRandomPassword(8);
        System.out.println(password);
    }

    //获取验证过的随机密码
    public static String getRandomPassword(int len) {
        String result = null;

        /*if(len >= 6) {
            for(result = makeRandomPassword(len);len >= 6;result = makeRandomPassword(len)){
                if (result.matches(".*[a-z]{1,}.*") && result.matches(".*[A-Z]{1,}.*") && result.matches(".*\\d{1,}.*") && result.matches(".*[~!@#$%^&*\\.?]{1,}.*")) {
                    return result;
                }
            }
        }*/
        while(len>=6){
            result = makeRandomPassword(len);
            if (result.matches(".*[a-z]{1,}.*") && result.matches(".*[A-Z]{1,}.*") && result.matches(".*\\d{1,}.*") && result.matches(".*[~!@#$%^&*\\.?]{1,}.*")) {
                return result;
            }
            result = makeRandomPassword(len);
        }
        return "长度不得少于6位!";
    }
    //随机密码生成
    public static String makeRandomPassword(int len){
        char charr[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890~!@#$%^&*.?".toCharArray();
        //System.out.println("字符数组长度:" + charr.length); //可以看到调用此方法多少次
        StringBuilder sb = new StringBuilder();
        Random r = new Random();

        for (int x = 0; x < len; ++x) {
            sb.append(charr[r.nextInt(charr.length)]);
        }
        return sb.toString();
    }
}

猜你喜欢

转载自sweepingmonks.iteye.com/blog/2386524