본문 바로가기
Dev

[Java] N자리 랜덤 숫자+알파벳 대문자 문자열 생성 - Random Class

by Blue Developer 2023. 5. 5.

안녕하세요.

 

프로젝트를 진행하는 과정에서 숫자+영문 대문자 문자열로 이뤄진 중복되지 않는 무작위 인증코드를 생성하는 기능이 필요해서 개발을 진행하게 되었는데, 기능을 구현하는 과정에서 공부하고 정리한 내용을 공유하면 좋을 것 같아 포스팅하게 되었습니다.

 

오늘은 자바의 'Random' 클래스를 활용해서 무작위 영문 대문자 문자열을 생성하는 방법과 무작위 숫자 문자열을 생성하는 방법을 배워보고, 최종적으로 무작위 숫자+영문 대문자 문자열을 생성하는 방법을 알아보겠습니다.

 

무작위 숫자 문자열 생성

import java.util.Random;

public class CreateRandomNumberCode {
    public static void main(String[] args) {
    	Random random = new Random();
        
        StringBuffer sb = new StringBuffer();
        for(int i=0; i<6; i++) {
            sb.append(random.nextInt(10));
        }
        
        System.out.println(sb.toString());
    }
}

 

random.nextInt(10) 구문을 통해 0부터 9까지의 무작위 숫자를 하나씩 생성하는데, for문으로 해당 구문을 6번 반복하기 때문에 무작위 숫자를 6개 생성해서 StringBuffer에 차례대로 넣습니다. 반복문이 끝나면 StringBuffer에 쌓인 각 숫자를 이어붙여서 한번에 출력합니다.

 

만약에 0을 제외한 1부터 9까지의 무작위 숫자를 하나씩 생성하고 싶다면, random.nextInt(9) 구문에 1을 더해서 생성되는 값의 하한선을 1로 고정하는 방식으로 구현할 수 있습니다.

 

출력 예시 : 272127, 473501, 979839

 

무작위 알파벳 대문자 문자열 생성

import java.util.Random

public class CreateRandomAlphabetCode {
    public static void main(String[] args) {
        Random random = new Random();
        
        StringBuffer sb = new StringBuffer();
        for(int i=0; i<6; i++) {
            sb.append((char)(random.nextInt(26)+65));
        }
        
        System.out.println(sb.toString());
    }
}

 

random.nextInt(26) 구문을 통해 생성한 0부터 25까지의 무작위 숫자에 65를 각각 더하고, (char)로 형변환을 거치면 A~Z 사이의 알파벳으로 값이 저장됩니다. 이후에는 무작위 숫자 문자열을 생성하는 방법과 동일한 과정을 거치게 됩니다.

 

출력 예시 : DKOGVA, HBXESZ, NHTOEY

 

무작위 숫자+알파벳 대문자 문자열 생성 (1)

import java util.*

public class CreateRandomAccessCode {
    public static void main(String[] args) {
        Random random = new Random();
        
        List<String> list = new ArrayList<>();
        for(int i=0; i<3; i++) {
            list.add(String.valueOf(random.nextInt(10)));
        }
        for(int i=0; i<3; i++) {
            list.add(String.valueOf((char)(random.nextInt(26)+65)));
        }
        
        Collections.shuffle(list);
        for(String item : list) {
            System.out.print(item);
        }
    }
}

 

이번에는 무작위로 숫자를 생성하는 방법과 무작위로 알파벳 대문자를 생성하는 방법을 활용하여 랜덤 숫자 3개와 랜덤 알파벳 3개가 반드시 포함되도록 문자열을 생성해보겠습니다.

 

무작위 숫자 문자열을 생성했던 것처럼 random.nextInt(10) 구문을 통해 0부터 9까지의 무작위 숫자를 세 개씩 생성하고 String.valueOf() 구문으로 문자열을 만들어서 리스트에 값을 각각 저장합니다.

 

이어서 무작위 영어 대문자를 생성했던 것처럼 ((char)random.nextInt(26)+65) 구문으로 A~Z 사이의 알파벳 대문자를 세 개씩 생성하고 String.valueOf() 구문을 통해 문자열을 만들어서 리스트에 값을 각각 저장합니다.

 

최종적으로 리스트에 숫자 문자열 3개와 알파벳 문자열 3개가 모두 저장된 상태에서 Collections.shuffle()을 통해 문자열의 순서를 섞어주면 무작위 숫자+알파벳 대문자 문자열이 생성됩니다.

 

출력 예시 : 21W1CD, M93LP5, 3E2N0O

 

무작위 숫자+알파벳 대문자 문자열 생성 (2)

import java util.*

public class CreateRandomAccessCode {
    public static void main(String[] args) {
        Random random = new Random();
        
        List<String> list = new ArrayList<>();
        for(int i=0; i<6; i++) {
            int n = random.nextInt(36);
            if(n>25) list.add(String.valueOf(n-25));
            else list.add(String.valueOf((char)(n+65)));
        }
        
        for(String item : list) {
            System.out.print(item);
        }
    }
}

 

마지막으로 무작위로 숫자를 생성하는 방법과 무작위로 알파벳 대문자를 생성하는 방법을 활용하여 문자열을 생성하되 포함하는 숫자 또는 알파벳의 개수에 제한을 걸지 않고 조합이 이뤄지도록 구현해보겠습니다.

 

먼저 random.nextInt(36) 구문을 통해 0부터 35까지의 무작위 숫자 n을 생성합니다. 다음으로 생성한 숫자 n이 25보다 큰지 비교하는 과정을 거치게 됩니다.

 

만약에 n이 25보다 크다면 25를 뺀 후 문자열로 만들어서 리스트에 값을 저장합니다. 만약에 n이 26보다 작다면 65를 더한 후 (char)로 형변환을 거쳐서 A~Z 사이의 알파벳으로 변환 후 문자열로 만들어서 리스트에 값을 저장합니다.

 

for문을 통해 위의 과정을 6번 반복하게 되면 숫자 또는 알파벳의 개수에 제한이 없는 무작위 문자열이 만들어지게 됩니다.

 

출력 예시 : JY5YAJ, Q79IEY, QWDOKU

 

 

오늘은 무작위 숫자와 알파벳 대문자로 문자열을 조합해서 생성하는 기능을 구현해보았습니다.

 

포스팅한 내용이 도움이 되었다면 공감 부탁드립니다 :)

 

감사합니다.

댓글