2012-08-13 101 views
0

我正在生成隨機密碼。我的密碼長度爲8個字符,並且包含特殊字符。我需要保留first letter as alphabet,並且需要對剩餘的七個字符進行整理,以便它將成爲mixture of alphanumeric + ascii characters隨機生成的密碼shuffle(隨機重新排列)

public String generatePassword() { 
     int passwordLength = MAX_PASSWORD_LENGTH; 
     StringBuffer password = new StringBuffer(passwordLength); 
     //first character as an alphabet 
     password.append(RandomStringUtils.randomAlphabetic(1)).toString(); 
     String alphaNumeric = RandomStringUtils.random(5, true, true); 
     String asciiChars = RandomStringUtils.randomAscii(2); 
     password.append(alphaNumeric).append(asciiChars); 
     return password.toString(); 
    } 

我需要一些幫助來洗牌最後7個字符。怎麼做?

+0

爲什麼你需要洗牌他們,如果他們已經是隨機的? – John3136 2012-08-13 07:45:49

+1

'Collections.shuffle'就是你需要的 – artbristol 2012-08-13 07:46:08

+0

隨機化/隨機序列混洗不會做任何事情,它不會使它更隨機。 – 2012-08-13 07:51:00

回答

1

Java Collections API具有內置的shuffle方法,您可以使用:請參閱here。 基本上,您需要從最後7個字符中創建一個List,並將其傳遞給Collections.shuffle

+0

感謝您的回覆Yuushi。 – 2012-08-13 09:17:35

0

如果你沒有那麼嚴格的要求,那麼你可以添加隨機的字符:

Random random = new Random(); 
for (int i = 0; i < 7; i++) { 
    if (random.nextBoolean()) { 
     password.append(RandomStringUtils.random(1, true, true)); 
    } else { 
     password.append(RandomStringUtils.randomAscii(1)); 
    } 
} 

如果你需要一個保證,那有各種的至少一個,那麼你可以添加一個簡單的測試:

boolean hasAlphaNumeric = false; 
boolean hasAscii = false; 
while (hasAlphaNumeric == false || hasAscii == false) { 
    Random random = new Random(); 
    for (int i = 0; i < 7; i++) { 
    if (random.nextBoolean()) { 
     password.append(RandomStringUtils.random(1, true, true)); 
     hasAlphaNumeric = true; 
    } else { 
     password.append(RandomStringUtils.randomAscii(1)); 
     hasAscii = true; 
    } 
    } 
}