[java] 자바 랜덤함수( random() )를 이용해 숫자,문자 코드 만들기

회사에서 응모하기 페이지를 만들라는 지령이 떨어졌다.
응모를 하기 위해서 필요한 건 개개인마다 다른 응모코드.
응모코드는 자바랜덤함수를 통해 구해보기로 했다.

Math.random() 함수는 0이상 1미만의  값으로 난수를 반환한다.
이는 사용자가 지정한 값을 통해 원하는범위내의 값으로 변형이 가능하다.

boolean flag = false;
String reception = "";
Map<String, Object> map = new HashMap<String, Object>();

while (!flag) {
    Random rnd =new Random();
    StringBuffer buf =new StringBuffer();

    for(int i=0;i < 10;i++){
        if(rnd.nextBoolean()){
            buf.append((char)((int)(rnd.nextInt(26))+97));
        }else{
            buf.append((rnd.nextInt(10)));
        }
    }
    String ramdomCode = buf.toString();
    log.info("ramdomCode : "+ramdomCode);
    map.put("ramdomCode", ramdomCode);
    //중복확인
    int exCount = BoardService.isExistData(map);
    log.info("exCount : "+exCount);
    if (exCount < 1) {
        reception = ramdomCode; 
        map.put("reception", reception);
        flag = true;
    }
}	
log.info("reception : "+reception);

  for(int i=0;i < 10;i++){
        if(rnd.nextBoolean()){
            buf.append((char)((int)(rnd.nextInt(26))+97));
        }else{
            buf.append((rnd.nextInt(10)));
        }
    }
 
포문을 이용해 10개의 문자를 생성한다.
rnd.nextBoolean()을 이용해 2가지 확률을 만들고 true 일 때는 랜덤 한 소문자를,  false 일 때는 랜덤 한 숫자를 만들어준다.

만들어준 숫자는 하나의 문자열로 붙이기 위해 StringBuffer에 append 한다.
 
 

<select id="isExistData" parameterType="map" resultType="java.lang.Integer">
<![CDATA[
    SELECT count(*) FROM 테이블명  WHERE reception = #{ramdomCode}
]]>
</select>

중복이 될수 있기에 db조회를 통해 중복확인도 해준다.
db에 같은 코드가 없다면 flag를 true로 만들어 while문을 끝낸다.
 

실행을 해보면 내가 원하는 숫자문자 조합의 10개의 문자열코드가 생성됨을 알 수 있다.