[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 닢향
     * http://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. 실행

1
2
3
4
5
6
7
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. 끝

 - 피곤한 개발자 피로그래머

 - 나도 피곤하고 여러분도 피곤할테니 마음껏 긁으라고 우클릭 방지는 해놓지 않았으나 양심상 출처는 밝혀주자