Без да използвате повече ентропия, uniqid
прави основно следното (вижте източник на uniqid.c
):
$time = explode(' ', microtime(false));
return sprintf('%s%08x%05x', $prefix, $time[1], $time[0] * 1000000);
Така че основно отнема текущото време в микросекунди и ги превръща в шестнадесетично представяне и го добавя към префикса. Това вече предоставя уникални стойности.
Но стойностите не са съвсем случайни. За да получите повече произволни стойности, трябва да добавите повече ентропия, като зададете втория параметър more_entropy . В този случай вътрешният линеен конгруентен генератор на PHP
php_combined_lcg
(вижте източник на lgc.c
) се използва за генериране на псевдослучайно число, което е прикрепено в края, добавяйки около 30 бита допълнителна ентропия, за да ги направи по-случайни.