2012-08-13 4 views
0

임의의 비밀번호를 생성 중입니다. 내 비밀번호는 8 자이며 특수 문자가 포함되어 있습니다. first letter as alphabet을 유지하고 나머지 7자를 섞어서 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

왜 이미 랜덤 인 경우 왜 셔플해야합니까? – John3136

+1

'Collections.shuffle'은 당신이 필요로하는 것입니다 – artbristol

+0

랜덤 시퀀스를 랜덤 화/셔플 링하는 것은 아무 것도하지 않습니다. –

답변

1

Java Collections API에는 사용할 수있는 내장 된 셔플 메서드가 있습니다 (here 참조). 기본적으로 마지막 7 자 중에서 List을 만들고 Collections.shuffle으로 전달해야합니다.

+0

답변 주셔서 감사합니다 Yuushi. –

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; 
    } 
    } 
}