my-blog.org

랜덤 뽑기

숫자를 뽑거나, 이름 목록에서 당첨자를 고르거나, 순서를 무작위로 섞습니다. 추첨은 암호학적 난수로 하고 결과는 어디에도 저장되지 않습니다.

숫자 뽑기

부터 까지
뽑은 숫자 -

이름·항목 뽑기

한 줄에 하나씩 입력하세요.

명 뽑기
결과 -

입력한 이름은 브라우저 밖으로 나가지 않습니다.

"무작위"에도 좋고 나쁨이 있습니다

대부분의 추첨 도구는 Math.random()을 씁니다. 빠르지만 예측이 가능한 방식이고, 같은 조건에서 다음 값을 맞힐 수 있는 구현도 있습니다. 이 페이지는 브라우저에 내장된 암호학적 난수 생성기를 사용합니다.

나머지 연산의 함정

난수를 원하는 범위로 줄일 때 흔히 나머지 연산을 씁니다. 그런데 난수의 전체 범위가 뽑으려는 범위로 딱 나누어떨어지지 않으면 앞쪽 숫자가 아주 조금 더 자주 나옵니다. 한두 번 뽑을 때는 티가 안 나지만, 추첨을 반복하면 쌓입니다.

그래서 이 도구는 치우침이 생기는 구간의 값이 나오면 버리고 다시 뽑습니다. 결과의 공정함이 이 도구의 유일한 기능이기 때문입니다.

섞기는 어떻게 하나요

피셔-예이츠(Fisher–Yates) 방식으로 섞습니다. 뒤에서부터 하나씩 짚어 가며 아직 안 정해진 자리 중 하나와 맞바꾸는 방법이고, 모든 순서가 똑같은 확률로 나오는 것이 증명돼 있습니다. "정렬 함수에 난수를 넣어 섞는" 흔한 방법은 순서가 고르게 나오지 않습니다.

이럴 때 이렇게 씁니다

경품 당첨자를 뽑을 때

응모자 명단을 붙여넣고 뽑을 인원을 정하면 중복 없이 뽑습니다. 뽑은 결과는 다시 만들 수 없으므로 화면을 갈무리해 두면 나중에 근거로 쓸 수 있습니다.

조를 나눌 때

순서 섞기로 명단을 한 번 섞은 뒤 위에서부터 잘라 나누면 조가 고르게 나뉩니다. 조마다 따로 뽑는 것보다 한 번에 섞는 쪽이 간단하고 치우침도 없습니다.

발표·당번 순서를 정할 때

이름 목록을 넣고 섞으면 그대로 순번이 됩니다. 가나다순이나 번호순은 늘 같은 사람이 먼저가 되므로, 반복되는 일에는 매번 섞는 편이 공평합니다.

자주 틀리는 곳

사람이 고르는 숫자는 무작위가 아닙니다

1에서 10 중에 아무거나 고르라고 하면 7이 압도적으로 많이 나옵니다. 양 끝과 반복되는 숫자를 무의식적으로 피하기 때문입니다. 공정해야 하는 자리에서는 사람의 직감 대신 뽑기를 쓰는 편이 낫습니다.

같은 결과를 다시 만들 수 없습니다

이 도구는 매번 새 난수를 씁니다. 결과를 남겨야 한다면 뽑은 직후에 갈무리하거나 옮겨 적으세요. 새로고침하면 사라집니다.

법적 효력이 필요한 추첨은 절차가 따로 있습니다

경품 고시 대상이나 공공 추첨처럼 공정성을 증명해야 하는 자리는 공증이나 정해진 기관 절차를 따라야 합니다. 이 도구는 그런 절차를 대신하지 않습니다.

자주 묻는 질문

이 추첨은 공정한가요?

브라우저에 내장된 암호학적 난수 생성기(crypto.getRandomValues)를 사용하고, 나눗셈에서 생기는 미세한 치우침까지 제거하는 방식(rejection sampling)으로 뽑습니다. 지원하지 않는 오래된 브라우저에서는 일반 난수로 대체됩니다.

중복 없이 뽑는다는 것은 무슨 뜻인가요?

한 번 나온 숫자는 다시 나오지 않는다는 뜻입니다. 로또처럼 서로 다른 숫자를 여러 개 뽑을 때 씁니다. 중복을 허용하면 주사위를 여러 번 굴리는 것과 같아 같은 숫자가 다시 나올 수 있습니다.

뽑은 결과가 서버에 저장되나요?

저장되지 않습니다. 계산과 추첨이 모두 브라우저 안에서 이뤄지고, 입력한 이름이나 항목도 서버로 전송되지 않습니다.

이름 뽑기에서 순서를 섞을 수도 있나요?

섞기 버튼을 누르면 입력한 목록 전체가 무작위 순서로 다시 배열됩니다. 발표 순서나 조 편성을 정할 때 씁니다.