生成16位密码

package com.grcaeup;  

import java.util.Random;  

/** 
 * 随机生成8位密码 工具类 
 *  
 */  
public class RandomPasswordUtils {  
  private static final Integer PWD_LENGTH = 16;
    public static String getPassword() {  

        //参照ascII码表
        //密码数字字符的构成对象
        StringBuilder sourceNumber = new StringBuilder();
        //密码大写字母的构成对象
        StringBuilder sourceCapital = new StringBuilder();
        //密码小写字母的构成对象
        StringBuilder sourcelowercase = new StringBuilder();
        //密码特殊字符的构成对象
        StringBuilder sourceSpeChar = new StringBuilder();

        //数字 0,1 不要
        for (int i = 0x32; i < 0x3A; i++) {
            sourceNumber.append((char) i);
        }
        //大写字母 (I,O, 不算)
        for (int i = 0x41; i < 0x5b; i++) {
            if (i != 79 && i != 73) {
                sourceCapital.append((char) i);
            }

        }
        //小写字母 (i,o,l 不算)
        for (int i = 0x61; i < 0x7b; i++) {
            if (i != 105 && i != 111 && i != 108) {
                sourcelowercase.append((char) i);
            }
        }
        // ~!@#$%^&*()_+`\-={}:";'<>?,. を 設定する
        for (int i = 33; i <= 46; i++) {
            sourceSpeChar.append((char) i);
        }

        for (int i = 58; i <= 64; i++) {
            sourceSpeChar.append((char) i);
        }
        sourceSpeChar.append((char) 92);
        sourceSpeChar.append((char) 94);
        sourceSpeChar.append((char) 95);
        sourceSpeChar.append((char) 96);
        sourceSpeChar.append((char) 123);
        sourceSpeChar.append((char) 125);

        //密码码表的对象
        StringBuilder source = new StringBuilder();
        //将码表组成
        source.append(sourceNumber);
        source.append(sourceCapital);
        source.append(sourcelowercase);
        source.append(sourceSpeChar);
        //随机数字
        Random random = new Random();
        //生成処理
        StringBuilder password = new StringBuilder();
        List<String> charList = new ArrayList<String>();

//每种字符都需要出现在密码中                     

charList.add(String.valueOf(sourceNumber.charAt(random.nextInt(sourceNumber.length()))));
        charList.add(String.valueOf(sourceCapital.charAt(random.nextInt(sourceCapital.length()))));
        charList.add(String.valueOf(sourcelowercase.charAt(random
                .nextInt(sourcelowercase.length()))));
        charList.add(String.valueOf(sourceSpeChar.charAt(random.nextInt(sourceSpeChar.length()))));
        //如果设置的密码长度不够
        while (charList.size() < PWD_LENGTH) {

        //继续在当前的密码码表中取出字符串作为密码(被除数代表密码字符串的设定范围.也就是不能超出这个范围设置字符串)     
             charList.add(String.valueOf(source.charAt(random.nextInt(source.length()))));
        //重新打乱排序
        Collections.shuffle(charList);
        //设置密码
        for (String pa : charList) {
            password.append(pa);
        }
        return password.toString();
    }  

}  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值