![]() |
![]() ![]() |
![]() |
![]()
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. |
|
|
![]()
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.
-------------------- |
|
|
![]()
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. -------------------- |
|
|
![]()
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. -------------------- |
|
|
![]()
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 |
|
|
![]()
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 ![]() 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 ![]() -------------------- |
|
|
![]()
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
![]() |
|
|
![]()
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..
|
|
|
![]()
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)
![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 11:42 |