ID 충돌 확률 계산기
UUID·nanoid 같은 랜덤 ID를 몇 개까지 만들어도 안전한지 생일 문제로 계산합니다. 길이를 줄였을 때의 위험도 함께 봅니다.
128비트 중 버전 4비트·변형 2비트가 고정이라 무작위는 122비트입니다.
122.0비트 · 값이 5.32×10^36가지
10^-19.0 (1063.4경분의 1)
10억개를 만들었을 때 같은 값이 두 번 나올 확률입니다. 50%가 되는 것은 271.5경개부터입니다.
개수별 충돌 확률
이 확률을 넘지 않으려면 몇 개까지
방식별 비교 (10억 개 기준)
사용 방법
- 1ID 방식을 고르거나 알파벳 크기와 길이를 직접 넣습니다.
- 2만들 ID 개수를 넣으면 충돌 확률이 나옵니다.
- 3반대로 목표 확률을 넘지 않는 최대 개수도 확인할 수 있습니다.
자주 묻는 질문
실무에서는 겹치지 않습니다. UUID v4의 무작위 비트는 122개라 1조 개를 만들어도 충돌 확률이 10⁻¹⁵ 수준입니다. 다만 수학적으로 0은 아니므로 데이터베이스의 유니크 제약은 걸어 두는 편이 좋습니다.
128비트 중 버전을 나타내는 4비트와 변형을 나타내는 2비트가 고정값이라 무작위가 아니기 때문입니다. 그래서 실제 무작위 공간은 2¹²²입니다.
365일 중 23명만 모여도 생일이 겹칠 확률이 50%를 넘는다는 문제입니다. 값이 N가지여도 √N 언저리만 뽑으면 절반은 부딪힌다는 뜻이라, ID 설계에서 그대로 쓰입니다.
기본값 21자면 126비트로 UUID보다 넓습니다. 12자로 줄이면 72비트인데, 이 정도면 수억 개까지는 안전하지만 수천억 개를 넘어가면 위험해집니다. 만들 개수를 넣어 직접 확인해 보세요.
6자(62진)는 35.7비트뿐이라 백만 개만 만들어도 충돌 확률이 1%를 넘습니다. 짧은 ID를 쓰려면 충돌을 확인하고 다시 뽑는 로직이 있어야 하고, 데이터베이스에 유니크 제약이 걸려 있어야 합니다.
안 됩니다. 이 계산은 모든 값이 고르게 나온다는 가정 위에 있는데, Math.random()은 암호학적으로 안전하지 않아 예측 가능하고 분포도 보장되지 않습니다. ID 생성에는 crypto.getRandomValues()를 쓰세요.
알아두면 좋은 점
- 모든 값이 고르게 나오는 이상적인 난수를 가정합니다.
- 확률이 아주 작으면 10의 거듭제곱으로 표시합니다.
- p ≈ 1 − e^(−k²/2N) 근사식을 씁니다. 개수가 아주 적을 때는 실제보다 조금 크게 나옵니다.
함께 보면 좋은 도구
마지막 검증: 2026년 8월 29일 · 결과는 참고용 추정치입니다.