我正在生成随机密码。我的密码长度为8个字符,包含特殊字符。我需要保留first letter as alphabet
并需要将剩余的七个字符随机播放,以便它为mixture of alphanumeric + ascii characters
。
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 :(得分:1)
Java Collections API有一个内置的shuffle方法,您可以使用:请参阅here。
基本上,您需要从最后7个字符创建List
,并将其传递给Collections.shuffle
。
答案 1 :(得分: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;
}
}
}