728x90
반응형

SecureRandom random = new SecureRandom ();

//랜던 문자 길이

int numLength = 16;

String randomStr = "";


for (int i = 0; i < numLength; i++) {

//0 ~ 9 랜덤 숫자 생성

//randomStr += ran.nextInt(10);

randomStr += random.nextInt(10);

System.out.println("randomStr "+ i + " :: " + randomStr);

}




아래 출처 : https://jonghwasu.wordpress.com/2013/02/15/%EA%B0%95%EB%A0%A5%ED%95%9C-%EB%82%9C%EC%88%98%EB%A5%BC-%EC%83%9D%EC%84%B1-%ED%95%9C%EB%8B%A4/



  • 강력한 난수를 생성한다.
    • 의사 난수 생성기는 좋은 통계적 성질을 가진 일련의 수 배열을 생성하는 결정성 수학 알고리즘을 사용
    • 그러나 숫자 배열이 진정한 난수성을 갖지는 않는다.
    • 의사 난수 생성기는 일반적으로 초깃값(seed value)으로 시작한다.
    • 알고리즘은 이 초깃값을 사용해 난수를 생성하고 새로운 초깃 값을 만들고, 다시 이 초깃 값을 사용해 그 다음 난 수 값을 만든다.
  • 자바 API는 java.util.Random 클래스로 의사 난수 생성기를 구현한다.
    • 의사 난수 생성기는 이식 할 수 있고 반복될 수 있다.
    • 따라서 동일한 초깃값을 사용해 생성한 두개의 java.util.Random 객체는 모든 자바 구현에서 동일한 숫자 배열을 생성하게 된다.
    • 어플리케이션을 초기화 하거나 시스템이 재 시동된 후에 초깃값이 재 사용되곤 한다.
    • 또는 시스템 클럭에서 가져온 현재 시간에서 유도하여 초깃 값으로 사용하기도 한다.
  • 부적합 코드예
    • 이 클래스는 모든 주어진 초깃 값에 대해 동일한 숫자 배열을 생성한다. 따라서 앞으로 나올 숫자를 예상 할 수 있다.
    1
    2
    3
    4
    5
    6
    Random rand1 = new Random(123L);
     
    /* [0,20] 범위에 있는 또다른 정수현 난수를 생성한다. */
    int n = rand1.nextInt(21);
    System.out.println("Random1 =================================================");
    System.out.println(n);
  • 적합 코드 예
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /* java.security.SecureRandom 클래스를 사용해 고품질의 난수를 만들어낸다. */
    SecureRandom rand3 = null;
    try {
        rand3 = SecureRandom.getInstance("SHA1PRNG");
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
     
    System.out.println("SecureRandom============================================");
    n = rand3.nextInt(21);
    System.out.println(n);
  • 적합 코드 예
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    /* Random의 기본 생성자를 이용하면 생성자를 호출 할 때 마다 다른 값을 초기 값으로 가져올 수 있다. */
    Random rand2 = new Random();
    System.out.println("Random2 =================================================");
    for(int i = 0; i < 20; i++) {
        /* 난수 생성기의 초깃값을 다시 설정 */
        rand2 = new Random();
        n = rand1.nextInt(21);
        System.out.println(n);
    }
728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,