生成16位密碼
阿新 • • 發佈:2019-01-04
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();
}
}