2009-09-19 17 views

Odpowiedz

19

EDIT:

Jezu! Zapomniałem o tej mojej starożytnej odpowiedzi. Aby wyjaśnić zamieszanie wywołane przez moją naiwność (zgodnie z komentarzem zamieszczonym poniżej): MD5 (jak większość przydatnych skrótów, ze względu na swój charakter) są nie wstrzykiwany, więc ich wydajność nie jest gwarantowana jako unikalna dla wszystkich wejść.

Jeśli kolizje haftujące są problemem (w tym przypadku są), użycie tej techniki będzie wymagało sprawdzenia, po haszowaniu, czy już został wygenerowany identyczny klucz.


Od uniqid wykorzystuje aktualny czas w mikrosekund do wygenerowania identyfikatora GUID, nie ma praktycznie żadnych szans kiedykolwiek będziesz biegać w tym samym jednym dwukrotnie.

Więc jeśli używasz go tylko do tworzenia unikalnych nazw plików, uniqid() będzie wystarczający. Jeśli chcesz uniemożliwić użytkownikom odgadywanie GUID, równie dobrze możesz go utrudnić, a także Md5.

+1

Lubię ideę md5'ing go :) –

+4

Ale MD5 nie robi Zachowaj wyjątkowość. – Gumbo

+2

Jeśli md5 klucz, który jest już wyjątkowy, pozostanie unikalny. – BraedenP

6

GUID to wersja UUID firmy Microsoft. Uniqid PHP to wersja 4 UUID. Zdecydowanie wystarczająco dobry.

2

ja też chce utworzyć GUID nazywając .net api i ta funkcja generowania klucza w formacie guid i to działa na mnie

function generateGuid($include_braces = false) { 
    if (function_exists('com_create_guid')) { 
     if ($include_braces === true) { 
      return com_create_guid(); 
     } else { 
      return substr(com_create_guid(), 1, 36); 
     } 
    } else { 
     mt_srand((double) microtime() * 10000); 
     $charid = strtoupper(md5(uniqid(rand(), true))); 

     $guid = substr($charid, 0, 8) . '-' . 
       substr($charid, 8, 4) . '-' . 
       substr($charid, 12, 4) . '-' . 
       substr($charid, 16, 4) . '-' . 
       substr($charid, 20, 12); 

     if ($include_braces) { 
      $guid = '{' . $guid . '}'; 
     } 

     return $guid; 
    } 
} 
Powiązane problemy