Karena sebagian besar jawaban berfokus pada teori, saya pikir saya dapat menambahkan sesuatu ke dalam diskusi dengan memberikan tes praktis yang saya lakukan. Dalam database saya, saya memiliki sekitar 4,5 juta UUID yang dihasilkan menggunakan Java 8 UUID.randomUUID (). Berikut ini adalah beberapa yang saya temukan:
c0f55f62 -b990-47bc-8caa-f42313669948
c0f55f62 -e81e-4253-8299-00b4322829d5
c0f55f62 -4979-4e87-8cd9-1c556894e2bb
b9ea2498-fb32-40ef-91ef-0ba 00060fe64
be87a209-2114-45b3-9d5a-86d 00060fe64
4a8a74a6-e972-4069-b480-b dea1177b21f
12fb4958-bee2-4c89-8cf8-e dea1177b21f
Jika itu benar-benar acak, kemungkinan memiliki UUID serupa semacam ini akan sangat rendah (lihat edit), karena kami hanya mempertimbangkan 4,5 juta entri. Jadi, meskipun fungsi ini baik, dalam hal tidak memiliki tabrakan, bagi saya itu tidak tampak bahwa baik karena akan dalam teori.
Edit :
Banyak orang tampaknya tidak memahami jawaban ini jadi saya akan menjelaskan maksud saya: Saya tahu bahwa kesamaannya "kecil" dan jauh dari tabrakan penuh. Namun, saya hanya ingin membandingkan UUID.randomUUID () Java dengan generator nomor acak yang sebenarnya, yang merupakan pertanyaan sebenarnya.
Dalam penghasil bilangan acak sejati, probabilitas kasus terakhir terjadi adalah sekitar = 0,007%. Karena itu, saya pikir kesimpulan saya benar.
Formula dijelaskan dalam artikel wiki ini en.wikipedia.org/wiki/Birthday_problem