1. 程式人生 > >生成16位密碼

生成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); } } // [email protected]#$%^&*()_+`\-={}:";'<>?,. を 設定する 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(); } }