Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Generowanie unikalnej liczby
Rid
post
Post #1





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


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
Go to the top of the page
+Quote Post
modern-web
post
Post #2





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


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.


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
Rid
post
Post #3





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Chcę zrobić hash sesji do zbezpieczenia tzw.token ,pozostaje też kwestia zapisu takiego unikalnego numeru do bazy-da rady to zrobić poprzez polecenie ALTER??

Ten post edytował Rid 21.12.2010, 20:17:21
Go to the top of the page
+Quote Post
agmakonts
post
Post #4





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 20.08.2008
Skąd: Gliwice

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


Jaki jest powód tego uparcia na alter? przecież to służy do modyfikacji tabel a nie rekordów


--------------------
Folio :: Blog
Go to the top of the page
+Quote Post
modern-web
post
Post #5





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


A nie lepiej do tego celu użyć identyfikatora sesji??
Niby spełnia wszystkie Twoje wymagania...


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
lukaskolista
post
Post #6





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


i wszystko jasne

Ten post edytował lukaskolista 21.12.2010, 21:30:32
Go to the top of the page
+Quote Post
Rid
post
Post #7





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


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??
Go to the top of the page
+Quote Post
modern-web
post
Post #8





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


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


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
Rid
post
Post #9





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


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.

Ten post edytował Rid 21.12.2010, 22:23:51
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: 19.08.2025 - 07:47