온라인 난수 생성기
결과 분포
균등성 검정
검정을 실행하려면 더 좁은 범위에서 더 많은 숫자를 뽑으세요.
최근 추첨
저장된 프리셋
난수 생성기는 어떻게 작동하나요?
이 생성기는 두 가지 무작위성 소스를 제공하며, 용도에 맞는 것을 선택할 수 있습니다.
**보안 난수(Secure random)**는 Web Crypto API(crypto.getRandomValues())를 통해 운영체제에서 엔트로피를 가져옵니다. 예측할 수 없고 재현할 수 없으므로, 결과를 사전에 아무도 추측해서는 안 되는 실제 추첨에 적합한 선택입니다.
시드(Seeded) 모드는 입력한 임의의 텍스트를 결정론적 생성기(xoshiro128**)의 시작 상태로 변환합니다. 같은 시드는 항상 같은 숫자를 만들어내므로, 누구나 여러분의 추첨을 재현해 결과가 맞는지 확인할 수 있습니다.
두 방식 모두 전적으로 사용자의 브라우저에서 실행됩니다. 어떤 숫자도 서버로 전송되지 않습니다.
모듈로 편향 없음
대부분의 단순한 생성기는 32비트 난수 값을 value % range로 원하는 범위에 매핑합니다. 범위가 2³²을 균등하게 나누지 못하면 낮은 숫자가 나머지보다 약간 더 자주 나오게 됩니다. 수천 번 추첨하면 이 차이가 측정 가능해집니다.
이 생성기는 대신 **거부 샘플링(rejection sampling)**을 사용합니다. 불균등한 꼬리 부분에 해당하는 값은 버리고 다시 뽑습니다. 범위 내 모든 숫자는 정확히 동일한 확률을 갖습니다. 내장된 균등성 검정으로 직접 확인할 수 있습니다.
생성기 기능
범위
- 최소값과 최대값 – 정수 또는 소수 범위, 음수 포함 자유롭게 설정
- 숫자 개수 – 한 번의 추첨으로 1개부터 최대 1,000,000개까지
- 중복 없음 – 실제 추첨처럼 각 숫자가 최대 한 번만 나타남
- 정렬 – 추첨 순서, 오름차순, 내림차순 중 선택; 정렬은 무작위성에 영향을 주지 않음
- 간격(Step) – 결과를 특정 값의 배수로 제한, 예를 들어 0, 5, 10, 15만 나오도록 설정
- 제외 숫자 – 절대 뽑히면 안 되는 값을 목록으로 지정
모드
- 무작위성 소스 – 보안(Web Crypto) 또는 시드(재현 가능)
- 시드 – 임의의 텍스트; 같은 시드는 항상 같은 추첨을 재현
- 분포 – 균등, 정규(가우시안), 지수, 푸아송, 삼각, 이항
- 가중치 – 선택한 숫자에 더 높은 확률을 부여,
number:weight형식으로 작성 - 주사위 표기법 –
3d6+2,d20, 어드밴티지용2d20kh1, 능력치 굴림용4d6dl1
출력
- 구분 기호 – 쉼표, 공백, 세미콜론, 탭, 줄바꿈, 또는 직접 입력한 문자
- 진법 – 10진수, 2진수, 8진수, 16진수, 또는 36진수
- 0으로 채우기 – 7을 007로 만들어 티켓이나 ID 번호에 활용
- 접두사와 접미사 – 모든 숫자를 고정된 텍스트로 감싸기
- 템플릿 –
{n}은 숫자,{i}는 위치를 의미하며,user{n}은user42가 됨 - 복사 형식 – 일반 텍스트, CSV, JSON, 또는 마크다운 표
통계
모든 추첨은 합계, 평균, 중앙값, 최소값, 최대값, 표준편차와 함께 짝수·홀수·소수의 개수를 실시간으로 요약해 보여줍니다. 히스토그램으로 분포 형태를 확인할 수 있으며, 카이제곱 검정으로 결과가 실제로 균등 분포와 일치하는지 알 수 있습니다.
히스토리
최근 50회의 추첨이 해당 결과를 만든 설정과 함께 브라우저에 저장되며, 클릭 한 번으로 언제든 복원할 수 있습니다. 자주 사용하는 설정은 이름을 붙여 프리셋으로 저장할 수 있고, 전체 목록을 JSON 파일로 내보내 다른 기기에서 불러올 수도 있습니다. 어떤 데이터도 이 브라우저 외에는 저장되지 않습니다.
키보드
스페이스 또는 R 키를 눌러 마우스 없이 다시 추첨할 수 있습니다.
빠른 사전 설정
| 사전 설정 | 범위 | 개수 | 용도 |
|---|---|---|---|
| 🎲 주사위 | 1–6 | 1 | 보드게임, 의사 결정 |
| 🪙 동전 | 0–1 | 1 | 앞면 또는 뒷면 |
| 🎰 로또 | 1–49 | 6 | 중복 없이, 정렬됨, 실제 추첨처럼 |
| 💯 1–100 | 1–100 | 1 | 백분율, A/B 분할 |
| 🔢 PIN | 0–9 | 4 | 4자리 숫자, 중복 허용 |
재현 가능한 추첨
시드 모드는 “믿어주세요, 무작위였어요”만으로는 부족한 순간을 위해 존재합니다.
날짜, 해시태그, 공개된 어떤 값의 종가처럼 모두가 사전에 합의할 수 있는 시드를 정하고, 추첨 전에 미리 공지하세요. 그러면 누구나 같은 시드와 같은 설정으로 동일한 결과를 얻을 수 있습니다. 이것이 숫자가 예측 불가능했음을 증명하지는 않지만, 마음에 드는 답이 나올 때까지 다시 굴리지 않았음을 증명합니다.
또한 검증이 필요한 작업에서 무작위성을 재현 가능하게 만드는 방법이기도 합니다. 동료가 다시 실행할 수 있는 표본 추출 계획, 테스트 스위트 전반에서 안정적으로 유지되는 테스트 픽스처, 모든 학생이 동일한 “무작위” 데이터를 받는 수업 실습 등이 그 예입니다.
분포 선택하기
균등(Uniform) 분포는 범위 내 모든 숫자에 동일한 확률을 부여합니다. 사람들이 보통 무작위라고 할 때 떠올리는 것이며, 기본값입니다.
나머지 분포들은 결과를 특정 값 주변으로 몰아주는데, 이는 현실 세계의 수량이 흔히 보이는 경향입니다.
- 정규(가우시안) – 신장, 측정 오차, 시험 점수. 평균과 표준편차를 설정
- 지수(Exponential) – 독립된 사건 사이의 대기 시간
- 푸아송(Poisson) – 고정된 구간 내 사건 발생 횟수: 시간당 도착 건수, 배치당 불량 개수
- 삼각(Triangular) – 최소값, 최대값, 가장 가능성 높은 값만 알고 있을 때. 프로젝트 견적에서 흔히 사용
- 이항(Binomial) – 고정된 확률로 고정된 횟수의 시행에서 성공한 횟수
모든 분포는 설정한 범위로 잘리므로, 긴 가우시안 꼬리도 최소값과 최대값을 벗어날 수 없습니다.
난수가 사용되는 곳
게임 및 엔터테인먼트
- 보드게임 – 주사위 굴리기, 순서 정하기
- 테이블탑 RPG – 능력치용
4d6dl1, 어드밴티지용2d20kh1 - 경품 추첨 – 참가자가 검증할 수 있도록 시드를 사용해 당첨자 선정
- 퀴즈 – 무작위 문제 순서
통계와 과학
- 표본 추출 – 모집단에서 중복 없이 표본 뽑기
- A/B 테스트 – 참가자를 그룹에 배정
- 몬테카를로 시뮬레이션 – 반복을 통한 확률 추정
- 부트스트래핑 – 불확실성 추정을 위한 재표본 추출
개발
- 테스트 데이터 – 페이지 반응성을 유지하며 백그라운드에서 생성하는 수백만 개의 값
- 픽스처 – 시드를 사용해 실패하는 테스트가 매번 같은 방식으로 실패하도록 함
- 랜덤 ID – 패딩, 접두사, 템플릿 적용
- 부하 테스트 –
user{n}@example.com같은 템플릿 식별자
진짜 난수 vs. 유사 난수
Math.random() | crypto.getRandomValues() | 시드(xoshiro128**) | |
|---|---|---|---|
| 유형 | 유사 난수 | 암호학적으로 안전함 | 유사 난수, 결정론적 |
| 엔트로피 소스 | 엔진이 선택한 시드 | 시스템 CSPRNG | 사용자의 시드 텍스트 |
| 예측 가능성? | 가능성 있음 | 아니오 | 예, 의도된 설계 |
| 재현 가능? | 아니오 | 아니오 | 항상 |
| 보안에 적합 | 아니오 | 예 | 아니오 |
| 통계에 적합 | 경우에 따라 다름 | 예 | 예 |
| 검증 가능한 추첨에 적합 | 아니오 | 아니오 | 예 |
이 도구에서는 Math.random()이 어디에도 사용되지 않습니다.
중복 없는 추첨
중복 없음 옵션을 켜면 범위 내의 각 숫자가 최대 한 번만 나타납니다. 다음과 같은 경우에 이상적입니다.
- 경품 추첨 – 아무도 두 번 당첨될 수 없음
- 순열 – 항목 집합을 섞기
- 빙고 – 한 번 불린 숫자는 다시 불리지 않음
- 로또 – 1부터 49 사이에서 서로 다른 6개 숫자
이 추첨은 부분 피셔-예이츠(Fisher–Yates) 셔플을 사용하므로, 백만 개 중 6개를 뽑는 것과 49개 중 6개를 뽑는 것의 속도가 동일합니다. 충돌을 피하려고 반복하는 일이 없습니다. 범위가 제공할 수 있는 것보다 더 많은 고유 숫자를 요청하면, 생성기가 멈추는 대신 그 사실을 알려줍니다.
결과 내보내기
숫자는 원하는 구분 기호를 사용한 일반 텍스트, 스프레드시트용 CSV, 코드용 JSON, 문서용 마크다운 표로 복사할 수 있습니다. 화면에는 처음 몇천 개만 표시되지만, 매우 큰 추첨도 전체가 메모리에 남아 있고 전체가 그대로 복사됩니다.
내 코드에서 난수 생성하기
JavaScript / TypeScript
// 모듈로 편향 없이 [min, max] 범위의 암호학적으로 안전한 정수를 생성.
// 단순한 `value % range`는 range가 2**32를 균등하게 나누지 못할 때
// 작은 숫자를 편향적으로 선호하므로, 불균등한 꼬리 값은 거부한다.
function randomInt(min, max) {
const range = max - min + 1;
const limit = Math.floor(0x100000000 / range) * range;
const arr = new Uint32Array(1);
let value;
do {
crypto.getRandomValues(arr);
value = arr[0];
} while (value >= limit);
return min + (value % range);
}
Python
import random
import secrets
# 암호학적으로 안전하며 모듈로 편향 없음
n = secrets.randbelow(max - min + 1) + min
# 재현 가능: 같은 시드는 항상 같은 시퀀스를 생성
rng = random.Random('my-seed')
n = rng.randint(min, max)
# 중복 없이
sample = random.sample(range(min, max + 1), count)
PHP
// 암호학적으로 안전함 (PHP 7+), 모듈로 편향 없음
$n = random_int($min, $max);
// 재현 가능
mt_srand(crc32('my-seed'));
$n = mt_rand($min, $max);
자주 묻는 질문 (FAQ)
결과는 정말 무작위인가요?
보안 모드에서는 그렇습니다. 운영체제의 엔트로피 풀로 작동하는 암호학적으로 안전한 생성기인crypto.getRandomValues()에서 나옵니다. 결과는 균등하게 분포되며 예측할 수 없습니다. 시드 모드는 의도적으로 그 반대로, 재현 가능하다는 점이 핵심입니다.
한 번에 몇 개의 숫자를 생성할 수 있나요?
최대 1,000,000개까지 가능합니다. 50,000개를 넘는 추첨은 백그라운드 워커에서 계산되어 페이지 반응성이 유지되며, 화면에는 처음 2,000개와 나머지 개수가 표시됩니다. 복사하면 여전히 전체를 얻을 수 있습니다.음수를 생성할 수 있나요?
네. 최소값을 음수로 설정하면 됩니다. 양쪽 끝이 모두 음수인 범위를 포함해 JavaScript 숫자의 전체 범위를 사용할 수 있습니다.정렬은 무작위성에 영향을 주나요?
아니요. 숫자는 먼저 뽑힌 뒤에 정렬됩니다. 정렬은 보이는 순서만 바꿀 뿐입니다.같은 시드를 사용하면 내일도 같은 숫자가 나오나요?
네, 다른 기기나 브라우저에서도 마찬가지입니다. 시드 생성기는 완전히 결정론적이며 시드와 설정 외에는 아무것에도 의존하지 않습니다.균등성 검정은 무엇을 알려주나요?
각 숫자가 실제로 나온 횟수와 이론적으로 나와야 할 횟수를 비교하는 카이제곱 검정을 실행합니다. 통계량이 임계값보다 낮으면 결과가 균등 분포와 일치한다고 볼 수 있습니다. 의미 있는 결과를 얻으려면 비교적 좁은 범위와 충분한 횟수의 추첨(가능한 값당 최소 5회)이 필요합니다.가중치는 어떻게 작동하나요?
number:weight 쌍으로 작성합니다. 예를 들어 1:5, 2:1, 3:1이라면 1이 2나 3보다 다섯 배 더 뽑히기 쉽습니다. 목록에 없는 숫자는 가중치가 0으로 처리되어 절대 뽑히지 않습니다.
어떤 주사위 표기법을 지원하나요?
3d6은 6면체 주사위 세 개를 굴립니다. 3d6+2처럼 보정값을 더할 수 있습니다. kh, kl, dh, dl로 주사위를 유지하거나 버릴 수 있어, 2d20kh1은 두 개의 d20 중 높은 값을 유지(어드밴티지)하고, 4d6dl1은 네 개의 d6 중 가장 낮은 값을 버립니다.