Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [funkcja] generowanie unikalnego id, PHP 4, 5
Sokal
post
Post #1





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 8.02.2007

Ostrzeżenie: (10%)
X----


Napisałem tą funkcję na potrzeby jednego projektu, może się komuś przyda (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

  1. <?php
  2. /**
  3.  * create_id() - tworzenie unikalnego ID
  4.  * 
  5.  * @author Dominik Sokal
  6.  * @param array $ids
  7.  * @return string
  8.  */
  9. function create_id($ids = array())
  10. {
  11. $id = md5(mt_rand());
  12. if(in_array($id, $ids))
  13. {
  14. return create_id($ids);
  15. }
  16. return $id;
  17. }
  18. ?>


Funkcja ta generuje unikalne ID.

Ten post edytował Sokal 30.06.2007, 19:03:29
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
blooregard
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




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 (IMG:style_emoticons/default/smile.gif)

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ę (IMG:style_emoticons/default/smile.gif) ) czynnik i będzie prawie idealnie (IMG:style_emoticons/default/smile.gif)



Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.12.2025 - 09:28