Tanpa menggunakan lebih banyak entropi, uniqid
pada dasarnya melakukan hal berikut (lihat sumber uniqid.c
):
$time = explode(' ', microtime(false));
return sprintf('%s%08x%05x', $prefix, $time[1], $time[0] * 1000000);
Jadi pada dasarnya membutuhkan waktu saat ini dalam mikrodetik dan mengubahnya menjadi representasi heksadesimal dan menambahkannya ke awalan. Ini sudah memberikan nilai unik.
Tetapi nilainya tidak cukup acak. Untuk mendapatkan lebih banyak nilai acak, Anda harus menambahkan lebih banyak entropi dengan menyetel parameter kedua more_entropy . Dalam hal ini generator kongruensial linier
internal PHP php_combined_lcg
(lihat sumber lgc.c
) digunakan untuk menghasilkan angka pseudo-acak yang dilampirkan di bagian akhir, menambahkan sekitar 30 bit entropi tambahan untuk membuatnya lebih acak.