Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Generowanie unikalnej liczby
Forum PHP.pl > Forum > PHP
Rid
Znalazłem kod w internecie do generowania unikalnych liczb:
  1. <?php
  2. function rand_except($min, $max, $except)
  3. //function returns a random integer between min and max, just like function rand() does.
  4. // Difference to rand is that the random generated number will not use any of the values
  5. // placed in $except. ($except must therefore be an array)
  6. // function returns false if $except holds all values between $min and $max.
  7. {
  8. //first sort array values
  9. sort($except, SORT_NUMERIC);
  10. //calculate average gap between except-values
  11. $except_count = count($except);
  12. $avg_gap = ($max - $min + 1 - $except_count) / ($except_count + 1);
  13. if ($avg_gap <= 0)
  14. return false;
  15. //now add min and max to $except, so all gaps between $except-values can be calculated
  16. array_unshift($except, $min - 1);
  17. array_push($except, $max + 1);
  18. $except_count += 2;
  19. //iterate through all values of except. If gap between 2 values is higher than average gap,
  20. // create random in this gap
  21. for ($i = 1; $i < $except_count; $i++)
  22. if ($except[$i] - $except[$i - 1] - 1 >= $avg_gap)
  23. return mt_rand($except[$i - 1] + 1, $except[$i] - 1);
  24. return false;
  25. }
  26. ?>
,jednakże czy jest on efektywny ,czy nie lepiej byłoby po prostu użyć mt_rand() i po prostu porównać występowanie liczby w bazie???Zdaje sobie także sprawę ,że to obciąży bazę poprzez liczne połączenia.Co będzie bardziej przymulać questionmark.gif??Druga ,rzecz czy da rady zapisać wygenerowaną liczbę poprzez polecenie ALTER,czy tylko przez INSERT questionmark.gif
modern-web
A jeśli mogę wiedzieć... w jakim celu potrzebny jest Tobie ten skrypt? Znam bardziej funkcjonalny sposób, lecz jego poprawne działanie zależy od odpowiedniego wykorzystania.
Rid
Chcę zrobić hash sesji do zbezpieczenia tzw.token ,pozostaje też kwestia zapisu takiego unikalnego numeru do bazy-da rady to zrobić poprzez polecenie ALTER??
agmakonts
Jaki jest powód tego uparcia na alter? przecież to służy do modyfikacji tabel a nie rekordów
modern-web
A nie lepiej do tego celu użyć identyfikatora sesji??
Niby spełnia wszystkie Twoje wymagania...
lukaskolista
i wszystko jasne
Rid
Wydaje mi się że, własny system generowania unikalnych liczb jest bardziej bezpieczny,jeśli ktoś przechwyci sesje to wraz z identyfikatorem ,tak mi się wydaje.Wygenerowanej losowej liczby odpowiednio zakodowanej ,z poziomu php ,która przy każdym wejściu na stronę jest inna ,wydaje mi się,że jest bezpieczniejsza.Przechwycenie sesji , która jest sprawdzana poprzez taką wygenerowaną liczbę nie będzie miało sensu.To jest tylko moja teoria.PS.Mój błąd jeśli chodzi o ALTER ,do tego służy funkcja UPDATE.Chodzi mi,ze przy wylogowaniu można zniszczyć ,zapis tejże liczby.Jednak jak, ktoś zamknie przeglądarkę a sesja nadal będzie trwała i włączy ponownie,to wywali błąd bo w komórce gdzie ,liczba się ma zapisać ,znajdują się już dane -dlatego muszę zapisywać przez UPDATE ,tylko czy tak można??
modern-web
Cytat
dlatego muszę zapisywać przez UPDATE ,tylko czy tak można??

można...

Jeśli szukasz do generowania tego losowego ciągu jakiejś alternatywy to możesz skorzystać z generatora haseł: http://forum.php.pl/lofiversion/index.php/...ml./t70281.html
Rid
Dziękuję,dość ciekawe,ale nie gwarantuje to unikalności,najprościej chyba będzie użyć mt_rand i patrzeć czy w bazie występuje ,jak nie to zapisać.Wydaje się mi ,że to trochę zamuli wszystko.
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.