유틸리티

랜덤 숫자 뽑기, 추첨·제비뽑기·주사위까지 한 곳에서

회식 장소를 정할 때, 당번을 뽑을 때, 경품 추첨을 할 때. 누군가 "공정하게 뽑자"라고 하면 결국 랜덤 숫자 뽑기로 귀결된다. 손으로 제비를 만들 필요 없이 숫자 범위만 넣으면 된다.

랜덤 숫자가 필요한 상황 5가지

1. 순서 정하기

발표 순서, 청소 당번, 회의 진행자. 1부터 인원수까지 범위를 넣고 뽑으면 불만 없이 결정된다.

2. 경품 추첨

참가자에게 번호를 부여하고 랜덤으로 뽑는 방식이 가장 깔끔하다. 중복 제외 옵션을 켜면 같은 번호가 두 번 나오는 일이 없다.

3. 로또 번호 생성

1~45에서 중복 없이 6개를 뽑는 프리셋이 있으면 바로 쓸 수 있다. 물론 당첨 확률과는 무관하다.

4. 보드게임·주사위

주사위가 없을 때 1~6 범위로 돌리면 된다. 주사위 2개가 필요하면 개수를 2로 설정한다.

5. 데이터 테스트

개발 중 더미 데이터가 필요할 때. 1~10000 사이 정수 100개를 한 번에 생성해서 테스트용으로 쓸 수 있다.

공정한 추첨을 위한 조건

"진짜 랜덤이냐"는 질문이 자주 나온다. 제대로 된 랜덤 생성기는 브라우저의 암호학적 난수 생성기(CSPRNG)를 사용한다. Math.random()과 달리 예측이 불가능하기 때문에 추첨 용도로도 신뢰할 수 있다.

참고 암호학적 난수란 이전 결과로 다음 결과를 예측할 수 없는 수를 말한다. 경품 추첨이나 순서 결정처럼 공정성이 중요한 상황에서도 쓸 수 있는 수준이다.

랜덤 숫자 생성기는 범위, 개수, 중복 여부, 정렬까지 설정할 수 있어서 단순 추첨부터 대량 데이터 생성까지 커버된다. 생성 기록이 자동 저장되니까 "아까 뽑은 번호 뭐였지?" 하는 상황에도 돌아가서 확인할 수 있다.

사람이 "아무 숫자나" 고르면 특정 범위에 편향되기 마련이다. 진짜 무작위가 필요하면 기계에 맡기는 게 낫다.