Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Generowanie unikalnych kodow do bazy danych
Forum PHP.pl > Forum > Przedszkole
Octobus
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.
lobopol
Przy takiej opcji nie masz możliwości zrobienia czegoś takiego. Musisz weryfikować czy w bazie już kod istnieje.
Helid
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.
markonix
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.
Octobus
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óż ...
markonix
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
Octobus
masz racje, źle policzyłem, o raz za dużo *1024 wink.gif
maviozo
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..
Octobus
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.