Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Generowanie unikalnych kodow do bazy danych
Octobus
post
Post #1





Grupa: Zarejestrowani
Postów: 259
Pomógł: 1
Dołączył: 3.07.2011

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


Witam, piszę właśnie platformę która musi mieć pewien kod generowany automatycznie. Kod może być ilukolwiek znakowy ale myślałem o długości 3-5. Przy każdym zapisaniu projektu do bazy musi generować się unikalny losowy składający się ze znaków a-z0-9, mogą dojść też polskie znaki ale to już obojętnie. Przykładowy kod d4k7k Pytanie teraz jak to zrobić żeby mieć nad tym kontrolę. Nie będę przecież po 10 razy pytał bazy czy ma już ten kod a zaśmiecenie wszystkimi możliwymi kombinacjami jest chyba złym rozwiązaniem.
Utrudnieniem jest to że użytkownik może sam wybrać swój kod i może mi go zająć, ten generator jest tylko wtedy ktoś nie podał kodu i chce żeby był wygenerowany automatycznie.
Go to the top of the page
+Quote Post
lobopol
post
Post #2





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


Przy takiej opcji nie masz możliwości zrobienia czegoś takiego. Musisz weryfikować czy w bazie już kod istnieje.


--------------------
Go to the top of the page
+Quote Post
Helid
post
Post #3





Grupa: Zarejestrowani
Postów: 280
Pomógł: 20
Dołączył: 12.12.2007
Skąd: 127.0.0.1

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


Kod
<?php
//32 znakowy unikalny kod
$kod = md5(microtime());


Możesz go skrócić do 5 znaków, jednak wtedy potrzeba sprawdzić unikalność (raz wystarczy, ogólnie jest mała szansa na powtórzenie).
W innym wypadku możesz utworzyć pole auto_increment i kod będzie unikalny dla każdego rekordu ale przewidywalny.


--------------------
Go to the top of the page
+Quote Post
markonix
post
Post #4





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Najprościej użyć bazy.
Sposób bez bazy widzę jeden, zrobić swoje małe "md5" X znakowe albo napisać swój algorytm.
Coś w stylu:
Kod
111111
a11111
1a1111
11a111
111a11

oczywiście bardziej skomplikowane.
Jednak jest ryzyko, czym łatwiejszy algorytm tym ktoś może go po prostu wykorzystać, a jeszcze lepiej gdy ktoś pozna kod Twojego algorytmu.


--------------------
Go to the top of the page
+Quote Post
Octobus
post
Post #5





Grupa: Zarejestrowani
Postów: 259
Pomógł: 1
Dołączył: 3.07.2011

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


Ok dzięki za odpowiedzi. Zrobię to tak że wygeneruje sobie listę możliwych kombinacji (eh) i przy każdym dodawaniu do bazy będę musiał sprawdzać, jeżeli ktoś użyje kodu z listy będzie on z niej usunięty. @markonix będę się chyba wzorował na Twoim generatorze haseł, podrzuciło mi parę pomysłów jak zrobić generator kodów.
Problemem jest tylko to że taka lista będzie zajmowała około 1 GB dla 5 znaków ;/ ale cóż ...

Ten post edytował Octobus 18.03.2012, 19:34:05
Go to the top of the page
+Quote Post
markonix
post
Post #6





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Możesz skorzystać z:
http://www.losowe-haslo.pl/narzedzia/
jak już korzystasz z mojej strony wink.gif
Nie chce mi się liczyć więc wg przypadkowego źrodła:
"hasło 5 znakowe składające się ze znaków z alfabetu od a do z ... 26^5 co daje 11881376 kobinacji".
Skąd pomysł że to będzie zajmowało 1GB? To jest ledwo 11 milionów wink.gif


--------------------
Go to the top of the page
+Quote Post
Octobus
post
Post #7





Grupa: Zarejestrowani
Postów: 259
Pomógł: 1
Dołączył: 3.07.2011

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


masz racje, źle policzyłem, o raz za dużo *1024 wink.gif
Go to the top of the page
+Quote Post
maviozo
post
Post #8





Grupa: Zarejestrowani
Postów: 197
Pomógł: 24
Dołączył: 22.11.2010

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


Ja u siebie ustawiłem taką kolumnę jako unikalną, gdyby nawet zdarzyło się wygenerować znowu taki sam hash, to mysql wywala błąd - przechwytuję go przez php i kolejna próba. Nie chce mi się wierzyć, że skrypt trafiłby kilka razy na zajętą kombinację pod rząd..
Go to the top of the page
+Quote Post
Octobus
post
Post #9





Grupa: Zarejestrowani
Postów: 259
Pomógł: 1
Dołączył: 3.07.2011

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


Zależy jakie masz założenia. Moim założeniem jest że skrypt może wykorzystać pulę 1 mln kodów czyli 10 % bazy. Jeśliby się tak stało że nawet 3 razy trafił na kombinacje która jest będzie przedłużał. Zrobię sobie w pliku albo bazie listę kodów i będę powoli usuwał (wykorzystane) smile.gif
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 11:42