랜덤 숫자 생성기

정수 또는 소수, 중복 허용 여부, 난수 방식까지 직접 고르고 결과의 합계·평균을 함께 확인하세요.

이 생성기가 숫자를 뽑는 방식

기본 설정은 브라우저의 crypto.getRandomValues로 얻은 난수를 쓰고, "중복 없이 뽑기"는피셔-예이츠(Fisher–Yates) 부분 셔플로 처리합니다. 정수 범위에서는 필요한 비트 수만큼만 난수를 받아 범위를 벗어나면 버리고 다시 뽑는 거절 샘플링으로 균등 분포를 유지합니다. 체크를 해제하면 자바스크립트 기본 Math.random()으로 바뀝니다. 같은 도구 안에서 두 방식을 비교해 볼 수 있게 한 이유는, 일상 추첨에서는 둘의 차이를 체감할 수 없지만 어떤 용도에서 차이가 의미를 갖는지 분명히 알아두는 것이 중요하기 때문입니다. 비밀번호·토큰처럼 보안이 걸린 값은 이 페이지가 아니라비밀번호 생성기와 UUID 생성기에서 같은 원칙(암호학적 난수 + 거절 샘플링)으로 만드세요.

의사난수와 암호학적 난수는 무엇이 다른가요?

컴퓨터의 "난수"는 대부분 의사난수(PRNG)입니다. 작은 내부 상태(시드)에서 수식으로 다음 값을 계속 계산하므로, 겉보기에는 무작위여도 상태를 알면 이후 값을 모두 예측할 수 있습니다. Math.random()은 통계적 품질과 속도를 목표로 설계되었고 예측 불가능성은 보장하지 않습니다. 구현은 브라우저 엔진마다 다르며, 크롬 계열(V8)은 128비트 상태를 가진 xorshift128+ 계열 알고리즘을 쓰는 것으로 알려져 있습니다. 반면crypto.getRandomValues는 운영체제의 암호학적 난수 생성기를 이용하도록 규격화되어 있어, 이전 출력을 알아도 다음 출력을 계산해 낼 수 없도록 만들어집니다.

구분Math.random()crypto.getRandomValues
성격의사난수 (통계적 품질 중심)암호학적으로 안전한 난수
예측 가능성출력 일부로 내부 상태 추정 가능예측 불가를 목표로 설계
시드 지정·재현불가(브라우저가 내부 설정)불가
적합한 용도게임, 시뮬레이션, 일상 추첨토큰, 키, 비밀번호, 공정성이 중요한 추첨

두 방식 모두 이 페이지에서는 시드를 지정해 같은 결과를 다시 만들 수 없습니다. 재현 가능한 난수가 필요한 시뮬레이션(실험 재현, 테스트 데이터)은 시드를 받는 별도 PRNG 라이브러리를 써야 합니다. 반대로 추첨에서는 이 "재현 불가"가 장점입니다. 결과를 미리 알아내거나 다시 돌려 확인할 수 없기 때문입니다.

모듈로 편향: "% 범위"로 숫자를 만들면 왜 쏠리나요?

32비트 난수(0~4,294,967,295, 총 232개)를 범위 크기 N으로 나눈 나머지로 바꾸는 방법은 가장 흔한 실수입니다. 232가 N의 배수가 아니면 나눗셈의 나머지 r개 값이 한 번씩 더 대응되어, 앞쪽 숫자가 뒤쪽보다 아주 조금 더 자주 나옵니다. 주사위(N=6)에서는 232 = 6 × 715,827,882 + 4이므로 1~4가 5~6보다 (715,827,883 / 715,827,882)배, 즉 약 10억 분의 1.4 정도 더 나옵니다. 사실상 영향이 없지만 범위가 커질수록 커집니다.

범위 크기 N232 mod N (r)더 자주 나오는 구간그 구간의 초과 확률53비트 실수×N 방식의 오차 상한
6466.67%+1.4e-7%6.7e-16
453168.89%+1.0e-6%5.0e-15
1009696.00%+2.3e-6%1.1e-14
1,00029629.60%+2.3e-5%1.1e-13
1,000,000967,29696.73%+0.023288%1.1e-10
1,000,000,000294,967,29629.50%+25.00%1.1e-7

표의 마지막 행처럼 범위가 10억이면 전체의 약 29.50%에 해당하는 앞쪽 값이 나머지 값보다 25.00% 더 자주 나옵니다. 이는 눈에 보이는 쏠림입니다. 이 생성기는 필요한 비트 수(예: N=100이면 7비트)만큼만 난수를 받아 N 이상이면 버리고 다시 뽑아 모든 값의 확률을 정확히 같게 만듭니다. 한 번 뽑을 때 버려질 확률은 항상 50% 미만이라 평균 2회 이내로 끝납니다. 그리고 Math.random() 모드는Math.floor(Math.random() * N) 형태이며 오차 상한이 N/253 수준(표 마지막 열)이라 N이 232이하인 범위에서는 무시할 수 있습니다. 같은 이유로 범위가 232를 넘으면 Math.random 모드를 허용하지 않고 암호학적 모드로 처리합니다.

정수와 실수(소수) 범위를 뽑을 때 주의점

정수 모드는 최솟값과 최댓값을 모두 포함합니다. 1~6이면 범위 크기는 6이고 각 숫자의 확률은 1/6입니다. 범위 크기는 (최댓값 − 최솟값 + 1)로 계산하며, 음수 범위(−10~10)도 같은 식으로 처리합니다. 흔한 오류가 "최대값을 빼고 계산"하는 것인데, Math.floor(Math.random() * (max - min)) + min은 max가 절대 나오지 않습니다.

소수 모드는 [0,1) 구간의 균등 난수(53비트 정밀도)에 (최댓값 − 최솟값)을 곱하고 최솟값을 더한 뒤 지정한 자릿수로 반올림합니다. 반올림 때문에 최댓값이 결과로 나올 수 있고, 소수점 자릿수가 낮을수록 같은 값이 겹칠 확률이 커집니다. 예를 들어 0~1을 소수 1자리로 뽑으면 후보는 0.0~1.0의 11개이지만 양 끝(0.0과 1.0)은 반올림 구간이 절반이라 다른 값의 절반 확률로만 나옵니다. 모든 후보를 똑같이 뽑아야 한다면 소수 모드 대신 정수 모드로 10배·100배 한 값을 뽑아 나누세요. 소수 모드에서 "중복 없이"는 의미가 없어 적용하지 않습니다.

중복 허용과 중복 없는 추출의 차이

중복 허용(복원 추출)은 뽑을 때마다 처음과 같은 조건에서 새로 뽑습니다. 그래서 같은 숫자가 두 번 나올 수 있고, 이는 오류가 아니라 정상입니다. 개수가 많아질수록 겹침은 오히려 "예상되는" 현상입니다.

범위 크기 N뽑는 개수 k하나라도 겹칠 확률
45629.4%
1001037.2%
3652350.7%
1,0005071.2%
1,000,0001,00039.3%

1~100에서 10개를 중복 허용으로 뽑으면 37.2%의 확률로 적어도 한 쌍이 겹칩니다. 365일에서 23명을 뽑으면 50.7%로 절반을 넘는 유명한 "생일 문제"도 같은 계산입니다. 즉 "겹쳤으니 난수가 이상하다"는 판단은 대부분 틀립니다. 반대로 겹치면 안 되는 상황(당첨 번호, 좌석 번호)이라면 "중복 없이 뽑기"를 체크해야 합니다.

중복 없는 추출(비복원 추출)은 0..N−1을 담은 배열에서 피셔-예이츠 알고리즘으로 앞에서부터 k개만 확정하는 방식입니다. i번째 칸에 i~N−1 중 하나를 균등하게 골라 교환하는 과정을 k번 반복하면, 가능한 모든 순서 있는 k개 조합이 정확히 같은 확률을 갖습니다. 범위 크기가 100만을 넘으면 배열을 만들지 않고 이미 뽑은 값을 기억해 겹치면 다시 뽑는 방식으로 바꾸는데, 1000개 이하를 뽑는 이 도구에서는 겹칠 확률이 매우 낮아 균등성이 유지됩니다.

검산된 예시

예시 1. 로또식 6개 뽑기. 1~45에서 중복 없이 6개를 뽑을 때 가능한 조합(순서 무시)은 C(45,6) = 8,145,060가지이며 어느 조합이든 확률은 1/8,145,060입니다. 순서까지 구분하면 6!(=720)배인 5,864,443,200가지입니다. "1,2,3,4,5,6"이 나올 확률도 "7,13,21,30,38,44"와 똑같습니다. 숫자가 규칙적으로 보이는 조합이 덜 나올 이유는 없습니다. 번호 추천 전용 도구는로또 번호 생성기를 참고하세요.

예시 2. 중복 허용 6개의 일치 확률. 1~45에서 중복을 허용해 순서대로 6개를 뽑는 경우의 수는 456 = 8,303,765,625가지입니다. 같은 6개 숫자열을 다시 뽑을 확률은 1.20e-10입니다. 한편 6개 중 적어도 한 쌍이 겹칠 확률은 29.38%로 계산됩니다(위 표 첫 행).

예시 3. 범위 10~19에서 3개, 중복 없이. 범위 크기는 19 − 10 + 1 = 10이고 가능한 순서 있는 결과는 10 × 9 × 8 = 720가지입니다. 결과가 항상 서로 다른 세 숫자라면 정상이며, 합계는 최소 10+11+12 = 33부터 최대 17+18+19 = 54 사이에 있어야 합니다. 도구의 합계 표시가 이 범위를 벗어난다면 이상 신호입니다.

흔한 실수와 오해

이 도구를 쓰면 안 되는 경우

법적 효력이 있는 경품 추첨은 공정성 증빙(참관인, 로그, 제3자 확인)이 필요하고, 도박·사행성 용도로는 사용할 수 없습니다. 암호 키·API 토큰·일회용 코드는 사람이 보는 화면에 숫자를 띄우는 방식 대신 전용 생성기를 쓰세요. 이 페이지의 결과는 브라우저 메모리에서만 만들어지고 서버로 전송·저장되지 않으며, 시드가 없어 같은 결과를 재현할 수 없습니다.

결과를 활용하는 방법

추첨 번호가 필요하면 참가자 번호 범위를 최소·최대로 넣고 "중복 없이"를 체크한 뒤 당첨 인원만큼 뽑으세요. 이름 명단에서 바로 뽑는다면 랜덤 추첨기가 편하고, 사람을 팀으로 나눌 때는 랜덤 팀 나누기를, 결과를 하나씩 배정하는 게임식 진행은사다리타기를 쓰세요. 주사위·동전처럼 작은 범위의 반복 실험은동전·주사위 굴리기가 어울립니다. 시뮬레이션에서는 개수를 늘려 합계와 평균이 기대값에 수렴하는지 확인해 볼 수 있습니다. 1~100 균등 정수의 기대 평균은 50.5이며, 표본이 커질수록 이에 가까워집니다.

자주 묻는 질문

"중복 없이 뽑기"는 언제 사용하나요?

로또 번호, 당첨자 번호, 좌석 배정처럼 같은 숫자가 두 번 나오면 안 될 때 체크합니다. 뽑을 개수가 범위 크기보다 크면 불가능하므로 오류 안내가 나옵니다. 예를 들어 1~10에서 11개는 뽑을 수 없습니다.

이 숫자는 완전한 무작위인가요?

컴퓨터로 만든 난수는 엄밀히는 알고리즘·운영체제 수집 엔트로피 기반입니다. 기본값인 crypto 방식은 예측이 매우 어렵도록 설계되었고, 일반적인 추첨·게임·학습용으로는 충분합니다. 체크를 해제하면 Math.random을 쓰는데, 예측 불가능성은 보장되지 않아 보안 용도에는 부적합합니다.

같은 설정으로 연속해 눌렀는데 같은 숫자가 나왔어요. 오류인가요?

오류가 아닙니다. 범위가 작을수록 우연히 같은 값이 나올 확률이 높습니다. 1~6에서 연속 두 번 같은 수가 나올 확률은 1/6(약 16.7%)입니다.

시드(seed)를 지정해 같은 결과를 다시 얻을 수 있나요?

아니요. 두 가지 난수 모두 브라우저가 내부적으로 관리하여 시드를 지정할 수 없습니다. 재현 가능한 난수가 필요한 테스트·실험은 시드를 받는 PRNG 라이브러리를 사용하세요.

소수 모드에서 최댓값이 나오기도 하나요?

네. 내부 값은 [최솟값, 최댓값) 범위에서 만들지만 지정한 자릿수로 반올림하면서 최댓값과 같은 표시값이 나올 수 있습니다. 정확한 포함·제외 규칙이 필요하면 정수 모드를 쓰세요.

한 번에 얼마나 많이 뽑을 수 있나요?

한 번에 최대 1000개까지입니다. 범위가 정수로 정확히 표현 가능한 크기(253 미만)를 넘는 값은 지원하지 않습니다.