生成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();
    }  

}  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章