Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Jak wygenerować 4 znakowy kod (cyfry + duże litery)?
-Gość-
post 6.09.2012, 11:55:39
Post #1





Goście







Jak w PHP wygenerować unikalny 4 znakowy kod (w którym znaki będę cyframi lub dużymi literami)?

Gdyby to były same cyfry, to wówczas można by było spróbować użyć generatora pseudolosowego, ale w kodzie będą też duże litery, więc jak to zrobić?

Unikalność kodu zamierzam zapewnić w ten sposób, że po prostu będę z bazy danych pobierał wszystkie do tej pory wygenerowane kody i jeżeli już taki kod znajduje się w bazie, to będę generował kod jeszcze raz, aż w bazie danych nie będzie takiego kodu. Chyba, że da się to unikalność zrobić jakoś lepiej/szybciej?

Kod będzie miał tylko 4 znaki, żeby był łatwy do zapamiętania przez użytkowników.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
b4rt3kk
post 6.09.2012, 12:03:41
Post #2





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


  1. $string = 'abcdefghijklmnop...itd...ABCDEF...itd';
  2. $znaki = array();
  3. $i = 0;
  4.  
  5. while ($i<4) {
  6. $losuj = $string[mt_rand(0, strlen($string)-1)];
  7. if (!in_array($losuj, $znaki)) { $znaki[$i] = $losuj; $i++; }
  8. }
  9.  
  10. $kod = implode('',$znaki);


może tak?

Ten post edytował b4rt3kk 6.09.2012, 12:10:03


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
-Gość-
post 6.09.2012, 12:11:44
Post #3





Goście







Dzięki, genialne smile.gif
Go to the top of the page
+Quote Post
markonix
post 6.09.2012, 12:36:00
Post #4





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

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


Cytat(b4rt3kk @ 6.09.2012, 13:03:41 ) *
  1. $string = 'abcdefghijklmnop...itd...ABCDEF...itd';
  2. $znaki = array();
  3. $i = 0;
  4.  
  5. while ($i<4) {
  6. $losuj = $string[mt_rand(0, strlen($string)-1)];
  7. if (!in_array($losuj, $znaki)) { $znaki[$i] = $losuj; $i++; }
  8. }
  9.  
  10. $kod = implode('',$znaki);


może tak?


W jaki sposób ten skrypt zapewnia unikalność danego ciągu?


--------------------
Go to the top of the page
+Quote Post
b4rt3kk
post 6.09.2012, 12:44:09
Post #5





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Cytat(markonix @ 6.09.2012, 13:36:00 ) *
W jaki sposób ten skrypt zapewnia unikalność danego ciągu?


Cytat
Unikalność kodu zamierzam zapewnić w ten sposób, że po prostu będę z bazy danych pobierał wszystkie do tej pory wygenerowane kody i jeżeli już taki kod znajduje się w bazie, to będę generował kod jeszcze raz,


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
markonix
post 6.09.2012, 12:51:20
Post #6





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

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


To nie brzmi jakoś specjalnie optymalnie bo gdy kodów już będzie bardzo dużo to wygenerowanie każdego nowego będzie się wiązało z bardzo dużą liczbą obrotów pętli (prawdopodobnie while), a gdy zabraknie kodów pętla się zapętli (jak dobrze liczę to gdzieś przy 1.6mln kodów).

Rozwiązanie ok gdyby np. ograniczyć liczbę kodów i je resetować.

Bez użycia bazy w miarę unikalne stringi zapewnia uniqid.

Ten post edytował markonix 6.09.2012, 12:53:47


--------------------
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 12:39