To teraz ja się "czepnę":
Fragment z dokumentacji dla mt_rand() (
http://pl.php.net/mt_rand )
Cytat
Jeśli funkcja zostanie wywołana bez opcjonalnych argumentów min i max , funkcja mt_rand() zwróci liczbę pseudolosową z przedziału pomiędzy 0 a RAND_MAX.
Cytat
Funkcja ta generuje unikalne ID.
Otóż nie unikalne. Generator liczb losowych, jeśli ma określony zakres, zawsze MOŻE wygenerować Ci jakąś wartość ponownie, co oznacza, że ID już nie będą unikalne (bo będą się powtarzać).
RAND MAX z kolei ma wartość, którą można odczytać przy pomocy f-cji getrandmax() - jest to 32767. Czyli mamy 32768 kmbinacji. Troszkę mało

Ale mam dla Ciebie rozwiązanie - dodawaj do wygenerowanej przez mt_rand() wartości wynik zwracany przez microtime() (UNIX-owy znacznik czasu wraz z mikrosekundami - 1000 unikalnych wartości w ciągu sekundy). Wtedy dochodzi Ci stale zmieniający się (i naprawdę unikalny - czas nie biegnie w dowolną stronę

) czynnik i będzie prawie idealnie