티스토리 뷰
6자리 인증번호를 생성하는 예제입니다.
import java.util.concurrent.ThreadLocalRandom; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.RandomUtils; public class TestGen6Digit { /** * 6자리 인증키 생성, int 반환 * @return */ public static int generateAuthNo1() { return ThreadLocalRandom.current().nextInt(100000, 1000000); } /** * 6자리 인증키 생성, int 반환 * @return */ public static int generateAuthNo2() { java.util.Random generator = new java.util.Random(); generator.setSeed(System.currentTimeMillis()); return generator.nextInt(1000000) % 1000000; } /** * apache commons 이용, int 반환 * @return */ public static int generateAuthNo3() { return RandomUtils.nextInt(100000, 1000000); } /** * apache commons 이용, String 반환 * @return */ public static String generateAuthNo4() { return RandomStringUtils.randomNumeric(6); } public static void main(String[] args) { System.out.println(generateAuthNo1()); System.out.println(generateAuthNo2()); System.out.println(generateAuthNo3()); System.out.println(generateAuthNo4()); } }실행결과
126310 466616[Java] 인증번호 2자리 4자리 6자리 등 난수 생성 (중복허용, 중복제거)
- 피곤하다 만들고 싶은게 생겼다
1. 무엇을 만들고 싶었는가
- 인증번호를 생성하고 싶다
- 특정 자리수에 맞게 하나의 메소드로 난수를 생성하고싶다 (2자리, 4자리, 6자리 등)
- 때로는 중복을 허용하고 때로는 중복을 제거하고 싶다. 물론 하나의 메소드에서
2. 만들어진 메소드
- 메소드명 : numberGen
- 파라미터 : {
len : 생성할 난수의 길이
,dupCd : 중복 허용 여부 (1: 중복허용, 2: 중복제거)
}
- 주석을 이미 다 달아놨기 때문에 할말이 없다. 판단은 독자의 몫
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | /** * 전달된 파라미터에 맞게 난수를 생성한다 * @param len : 생성할 난수의 길이 * @param dupCd : 중복 허용 여부 (1: 중복허용, 2:중복제거) * * Created by 닢향 * //niphyang.tistory.com */ public static String numberGen(int len, int dupCd ) { Random rand = new Random(); String numStr = ""; //난수가 저장될 변수 for(int i=0;i<len;i++) { //0~9 까지 난수 생성 String ran = Integer.toString(rand.nextInt(10)); if(dupCd==1) { //중복 허용시 numStr에 append numStr += ran; }else if(dupCd==2) { //중복을 허용하지 않을시 중복된 값이 있는지 검사한다 if(!numStr.contains(ran)) { //중복된 값이 없으면 numStr에 append numStr += ran; }else { //생성된 난수가 중복되면 루틴을 다시 실행한다 i-=1; } } } return numStr; } | cs |
3. 실행
System.out.println("numberGen(2,1) : " + numberGen(2,1)); //2자리 중복허용 System.out.println("numberGen(2,2) : " + numberGen(2,2)); //2자리 중복제거 System.out.println("numberGen(4,1) : " + numberGen(4,1)); //4자리 중복허용 System.out.println("numberGen(4,2) : " + numberGen(4,2)); //4자리 중복제거 System.out.println("numberGen(6,1) : " + numberGen(6,1)); //6자리 중복허용 System.out.println("numberGen(6,2) : " + numberGen(6,2)); //6자리 중복제거 | cs |
4. 실행결과
- 중복된 값이 안나와서 한참을 돌렸다. 어쨋든 성공
5. 끝
- 피곤한 개발자 피로그래머
- 나도 피곤하고 여러분도 피곤할테니 마음껏 긁으라고 우클릭 방지는 해놓지 않았으나 양심상 출처는 밝혀주자