sql >> Databáze >  >> RDS >> Mysql

PHP - uniqid(,true) versus uniqid()+mt_rand()

Bez použití větší entropie, uniqid dělá v zásadě následující (viz zdroj uniqid.c ):

$time = explode(' ', microtime(false));
return sprintf('%s%08x%05x', $prefix, $time[1], $time[0] * 1000000);

Takže v podstatě vezme aktuální čas v mikrosekundách a převede je do šestnáctkové reprezentace a připojí ji k předponě. To již poskytuje jedinečné hodnoty.

Hodnoty ale nejsou zcela náhodné. Chcete-li získat více náhodných hodnot, měli byste přidat více entropie nastavením druhého parametru more_entropy . V takovém případě interní lineární generátor kongruenci PHP php_combined_lcg (viz zdroj lgc.c ) se používá ke generování pseudonáhodného čísla, které je připojeno na konec a přidává přibližně 30 bitů dodatečné entropie, aby byly náhodnější.



  1. Aktualizace databáze a aplikace Android SQLite

  2. SQL Server:poskytuje NEWID() vždy jedinečné ID?

  3. Jak vložit více hodnot textového pole do jednoho pole s různým odlišným ID?

  4. Jak efektivně používat MySQLDB SScursor?