UUIDの衝突確率の計算
UUIDのバージョンと生成する個数を入れると、誕生日問題の近似式で、同じUUIDが生成される確率を計算します。バージョンごとのランダムな部分のビット数の違いもふまえます。
「自分でビット数を入れる」を選んだときだけ使います
個
計算方法
UUIDの衝突確率は、同じ誕生日の人がいる確率を求める「誕生日問題」と同じ考え方で近似できます。
衝突する確率 = 1 − eの(マイナス生成個数の2乗 ÷(2 × 全体の組み合わせ数))乗
全体の組み合わせ数は、ランダムな部分のビット数をnとすると2のn乗です。UUIDv4は128ビットのうち6ビットがバージョン・バリアントの固定値なので、ランダムな部分は122ビットになります。UUIDv7は先頭48ビットが時刻なので、ランダムな部分は74ビットです。
例:ビット数32(約43億通り)で10万個生成すると、衝突する確率は約1.16パーセントです。
出典:式の定義(誕生日問題の近似式。生成個数とビット数は入力した値を使います)
PR
よくある質問
UUIDv4は絶対に重複しない?
確率はゼロではありません。ただしUUIDv4は122ビットのランダム性があるため、通常の用途で生成する個数(数百万から数十億程度)では、衝突する確率は天文学的に小さい値になります。
UUIDv1やULIDは計算できる?
UUIDv1はMACアドレスや時刻を含むため、この近似式がそのまま当てはまりません。「自分でビット数を入れる」で、実際にランダムな部分のビット数を入れて概算してください。
なぜ生成個数の2乗が出てくるの?
誰か2人が同じ値になるかを考えるため、生成した個数の中からペアを選ぶ組み合わせの数(おおよそ個数の2乗を2で割った数)が効いてくるためです。