자바 6자리 랜덤 숫자 - jaba 6jali laendeom susja

티스토리 뷰

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 닢향

     * 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. 실행

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. 끝

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

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