랜덤 숫자 생성기 — 범위·개수 지정, 중복 없이 뽑기
범위와 개수를 정해 뽑는 암호 난수 기반 랜덤 숫자 생성기
브라우저에서 처리 · 서버로 전송되지 않음
소개
최솟값과 최댓값, 개수를 정하면 그 범위 안에서 랜덤 숫자를 뽑아 주는 도구예요. 추첨 순서 정하기, 번호표 만들기, 테스트용 데이터 만들기, 보드게임 진행처럼 숫자 몇 개가 필요한 상황에서 바로 쓸 수 있어요. 음수 범위도 되고, 소수점 자릿수를 정해 소수를 뽑을 수도 있어요. 모든 계산은 지금 보고 있는 브라우저 안에서 일어나며 입력한 값이나 결과는 서버로 전송되지 않아요.
사용법
- 숫자 종류에서 정수 또는 소수를 고릅니다.
- 최솟값과 최댓값을 적습니다. 두 값도 결과에 포함돼요.
- 개수를 적습니다. 한 번에 최대 10,000개까지 뽑아요.
- 같은 숫자가 나오면 안 될 때는 중복 없이 뽑기를 켭니다. 소수 모드라면 소수 자릿수도 정해 주세요.
- 뽑기 버튼을 누르면 결과가 나타나요. 정렬과 구분자는 결과를 보면서 바꿀 수 있고, 복사 버튼으로 한 번에 가져갈 수 있어요.
기준
- 난수원:
crypto.getRandomValues가 주는 32비트 난수만 씁니다. 추측이 가능한Math.random은 사용하지 않아요. - 균등성: 32비트 난수를 범위 크기로 나눈 나머지를 그냥 쓰면 앞쪽 숫자가 조금 더 자주 나와요. 그래서 치우친 구간의 값은 버리고 다시 뽑는 기각 샘플링으로 모든 숫자가 같은 확률을 갖게 해요.
- 큰 범위: 범위가 2의 32제곱을 넘으면 큰 정수(BigInt)로 계산해서 ±9,007,199,254,740,991 범위 전체에서도 쏠림이 없어요.
- 중복 없이 뽑기: 플로이드(Floyd)의 표본 추출 알고리즘을 써서 필요한 개수만큼만 계산해요. 가능한 모든 조합이 같은 확률이고, 정렬하지 않으면 순서도 다시 섞어 줘요.
- 소수 모드: 지정한 자릿수로 나눈 격자(예: 소수 둘째 자리면 0.01 간격)의 모든 값 중에서 하나를 같은 확률로 골라요. 부동소수점 오차 없이 문자열로 표시해요.
- 표시 옵션: 정렬과 구분자(쉼표, 공백, 줄바꿈)는 결과를 다시 뽑지 않고 보기만 바꿔요.
예시
| 설정 | 가능한 결과 |
|---|---|
| 1–45, 6개, 중복 없이, 오름차순 | 3, 11, 19, 27, 38, 44 같은 서로 다른 6개 |
| -10–10, 5개 | 7, -3, -3, 0, 10 처럼 음수와 중복을 포함 |
| 0–1, 소수 둘째 자리, 3개 | 0.27, 0.84, 0.05 |
| 1–100, 1개 | 1부터 100 사이 숫자 하나 |
자주 묻는 질문
뽑힌 숫자가 정말 무작위인가요? Math.random과는 뭐가 다른가요?
이 도구는 브라우저가 운영체제에서 받아 오는 암호용 난수(crypto.getRandomValues)만 사용하고 Math.random은 쓰지 않아요. 또 난수를 범위로 줄일 때 생기는 쏠림을 없애려고 치우친 구간의 값은 버리고 다시 뽑는 방식(기각 샘플링)을 써서, 범위 안의 모든 숫자가 정확히 같은 확률로 나와요.
중복 없이 뽑기에서 개수가 범위보다 크면 어떻게 되나요?
1부터 5까지에서 6개를 중복 없이 뽑는 것은 불가능하므로 오류 메시지를 보여 주고 아무것도 뽑지 않아요. 범위를 넓히거나 개수를 줄이면 돼요. 범위가 매우 커도 필요한 개수만큼만 계산하기 때문에 느려지지 않아요.
얼마나 큰 숫자까지 뽑을 수 있나요?
정수 모드는 -9,007,199,254,740,991부터 9,007,199,254,740,991까지의 안전한 정수를 지원해요. 자바스크립트가 오차 없이 표현할 수 있는 한계예요. 한 번에 뽑을 수 있는 개수는 1개에서 10,000개까지예요.
정렬이나 구분자를 바꾸면 숫자가 새로 뽑히나요?
아니요. 정렬과 구분자는 이미 뽑은 숫자를 보여 주는 방식만 바꿔요. 새 숫자가 필요하면 뽑기 버튼을 다시 누르세요.