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
6.09.2012, 12:03:41
$string = 'abcdefghijklmnop...itd...ABCDEF...itd';
$i = 0;
while ($i<4) {
if (!in_array($losuj, $znaki)) { $znaki[$i] = $losuj; $i++; } }
może tak?
markonix
6.09.2012, 12:36:00
Cytat(b4rt3kk @ 6.09.2012, 13:03:41 )

$string = 'abcdefghijklmnop...itd...ABCDEF...itd';
$i = 0;
while ($i<4) {
if (!in_array($losuj, $znaki)) { $znaki[$i] = $losuj; $i++; } }
może tak?
W jaki sposób ten skrypt zapewnia unikalność danego ciągu?
b4rt3kk
6.09.2012, 12:44:09
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
6.09.2012, 12:51:20
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.