로또 번호 생성기
로또나 빙고 등을 위해 지정한 범위 내에서 중복 없는 고유한 숫자를 생성합니다.
한 번에 최대 1000개의 난수를 생성할 수 있습니다.
입력
출력
의사 난수 생성기(PRNG)란?
컴퓨터는 결정론적 기계이기 때문에 진정한 의미의 '무작위' 숫자를 자체적으로 생성할 수 없습니다. 대신, 의사 난수 생성기(PRNG: Pseudo-Random Number Generator)라 불리는 알고리즘을 사용하여 무작위처럼 보이는 숫자 열을 만들어냅니다.
PRNG는 시드(seed)라는 초기값에서 시작합니다. 같은 시드를 사용하면 항상 동일한 숫자 열이 생성됩니다. 이러한 예측 가능성 때문에 PRNG는 보안이 중요한 응용 프로그램에는 적합하지 않지만, 시뮬레이션·게임·통계적 샘플링에는 매우 유용합니다.
이 생성기는 PHP의 random_int() 함수를 사용하며, 운영 체제의 암호학적으로 안전한 의사 난수 생성기(CSPRNG)를 활용합니다 — Linux의 /dev/urandom이나 Windows의 CryptGenRandom 등입니다. 시드는 하드웨어 엔트로피(열 잡음, 인터럽트 타이밍 등)에서 수집되며 고정되거나 외부에서 제어할 수 없어, 매번 진정으로 예측 불가능한 결과를 생성합니다. 암호화 및 보안 목적에도 적합합니다.
반면 오래된 mt_rand() 함수는 메르센 트위스터(Mersenne Twister) 알고리즘을 사용합니다 — 빠르고 통계적으로 우수하지만, 충분한 출력값을 관찰하면 내부 상태를 복원할 수 있어 암호학적으로 취약합니다.