Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Generowanie unikalnych id. Algorytm hashujący bez kolizji.
SnakeEater
post
Post #1





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 12.03.2010

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


Witam,
Buduję aplikację w której obiekt byłby identyfikowany na podstawie unikalnego id w postaci xxx-xxx-xxx-xxx, gdzie x to znak alfabetu a-z lub cyfra. id to miałoby być na tyle unikalne, żeby nie dało się zgadnąć. URL będzie wyglądał tak:

www.mojadomena.pl/books/394-a34-g34-dd2

W jaki sposób zahashować taki id do bazy? Chodzi o taki algorytm, żeby nie było kolizji, więc chyba md5 odpada. Wygenerowany hash ze względu na unikalność może być równie długi lub dłuższy, gdyż ze względu na założenia nie może być krótszy. To wiem. Problem tylko skąd wziąć taki algorytm? Zna ktoś może jakiś? A może zwyczajnie pozamieniać litery w stylu znak klucz -> znak wartość? Tylko wtedy chyba na podstawie kilku "tokenów" i ich zahaszowanych wersji da się złamać kod. Czyż nie?

Ten post edytował SnakeEater 26.03.2010, 15:26:51
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ź




Ja bym to zrobił tak:

Generowałbym MD5 lub SHA1 (obojętnie) z czterech różnych unikalnych wartości, np. piewrszy z microtime(), drugi z daty z godziną w postaci tekstowej, trzeci z losowo wybranego znaku ASCII, czwarty jeszzce z czegoś tam.

Z każdego z haszy wycinałbym np. 3 pierwsze znaki z pierwszego, 3 licząc od 12 z drugiego, 3 licząc od 5 od końca z trzeciego i powiedzmy 3 ostatnie z czwartego.
Sklejałbym je poprzez '-' i otrzymywał to, co Ty potrzebujesz.
Przed zapisem w bazie sprawdziłbym tylko, czy zestaw jest unikalny, tak dla pewności, jeśli jakimś cudem by był, to powtórka.

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: 28.12.2025 - 11:05