Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak wygenerować 4 znakowy kod (cyfry + duże litery)?
Forum PHP.pl > Forum > Przedszkole
Gość
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.
b4rt3kk
  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?
Gość
Dzięki, genialne smile.gif
markonix
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?
b4rt3kk
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,
markonix
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.
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.