Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Funkcje haszujace i unikalny identyfikator
Sekwer
post
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 2
Dołączył: 18.01.2009

Ostrzeżenie: (0%)
-----


Witam, zastanawiam się nad generowaniem unikalnego identyfikatora o jak najkrótszym łańcuchu znaków. Szukałem na forum i nie znalazłem odpowiedniego tematu. Moją uwage zwróciło kilka funkcji.

CRC32
ADLER32
uniqid() (funkcja w php)

Nie chodzi tu o szyfrowanie haseł, a o budowanie krótkich linków czy krótkich nazw plików.
Która funkcje byście polecali?

PS Swoja droga ciekawe jakie jest prawdopodobieństwo kolizji. Myślę, że do takich zastosowań jak nazwy plików się nada (IMG:style_emoticons/default/smile.gif)

Ten post edytował Sekwer 12.05.2010, 19:26:25
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
croc
post
Post #2





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


Ja bym skorzystał mimo wszystko z md5, tylko wyciął z niego np. losowo 8 znaków.

  1. $hash = md5(time() . '-' . rand(0, 1000));
  2. $hash = substr($hash, rand(0, 24), 8);


I zabezpieczyłbym się przed kolizjami, np. tak (jeżeli chodzi o unikalne nazwy plików, analogicznie możesz zrobić np. wyszukiwanie po hashu z bazy danych):

  1. do {
  2. $hash = md5(time() . '-' . rand(0, 1000));
  3. $hash = substr($hash, rand(0, 24), 8);
  4. }
  5. while(file_exists('pliki/' . $hash . '.txt'));
Go to the top of the page
+Quote Post
Sekwer
post
Post #3





Grupa: Zarejestrowani
Postów: 36
Pomógł: 2
Dołączył: 18.01.2009

Ostrzeżenie: (0%)
-----


Cytat(croc @ 13.05.2010, 09:28:10 ) *
Ja bym skorzystał mimo wszystko z md5, tylko wyciął z niego np. losowo 8 znaków.

  1. $hash = md5(time() . '-' . rand(0, 1000));
  2. $hash = substr($hash, rand(0, 24), 8);


I zabezpieczyłbym się przed kolizjami, np. tak (jeżeli chodzi o unikalne nazwy plików, analogicznie możesz zrobić np. wyszukiwanie po hashu z bazy danych):

  1. do {
  2. $hash = md5(time() . '-' . rand(0, 1000));
  3. $hash = substr($hash, rand(0, 24), 8);
  4. }
  5. while(file_exists('pliki/' . $hash . '.txt'));


Twoje rozwiązanie nie jest profesjonalne.

BTW Po co mam robić dodatkowe zapytanie do bazy o klucz?

Moje rozwiązanie musi działać bez bazy, ponieważ raz mogę mieć bazę w projekcie a raz nie.

Wydaje mi się, ze nie da się zejść poniżej 8 znaków, mówią to proste obliczenia matematyczne jeżeli haszem jest liczba heksadecymalna.

Pozdrawiam (IMG:style_emoticons/default/smile.gif)

PS Łatwo chyba zapamiętać 8 znaków (IMG:style_emoticons/default/yahoo.gif)

Ten post edytował Sekwer 14.05.2010, 14:01:25
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: 2.10.2025 - 18:44