Generator ciągu znaków zawierający zarówno litery jak i cyfry

0

Witam,

Potrzebuję wygenerować pięcioznakowy kod, który musi zawierać duże litery i cyfry.
Stosowałem poniższe rozwiązania ale w obu przypadkach zdarzają się ciągi, które zawierają tylko litery lub tylko cyfry:

strtoupper(substr(bin2hex(random_bytes(3)), 0, -1))
substr(str_shuffle("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"), -5)
1

Czyli ciąg nie może być jednak losowy.
Musisz więc dodać pętlę sprawdzającą czy wytworzony ciąg spełnia Twoje wymagania i jeśli nie generować go ponownie. Aby sprawdzić czy jest liczbą można użyć preg_match() lub is_numeric();
Jak chcesz sprawdzić czy zawiera tylko wielkie litery to cały ciąg dajesz strtoupper() i porównujesz czy jest taki sam, lub używasz wyrażenia regularnego np. !preg_match("/[a-z]/", $string)
Tak samo by sprawdzić czy są tylko małe litery.

1

Należy stworzyć tablicę tylko z literami i cyframi, nastepnie z tej tablicy wylosować wymaganą liczbę znaków - czyli w tym przypadku 5 znaków.

Jeżeli chcesz mieć pewność że zawsze będzie przynajmniej jedna litera lub cyfra, robisz dwie osobne tablice, następnie losujesz liczbę z przedziału 1-4 (ilość do wylosowania minus 1), to jest np. liczba liter, a następnie odejmujesz wylosowaną liczbę od 5 - i masz liczbę cyfr. Nastepnie losujesz litery i cyfry, łączysz razem, i możesz je jeszcze przemieszać.

Tak funkcja wykona się tylko RAZ i masz gwarancję, że będą i litery i cyfry. Natomiast przy rozwiązaniu wyżej, nie wiesz ile razy będziesz musiał wykonać procedurę, zanim trafią się i cyfry i litery razem. TAK SIĘ NIE ROBI.

Pewnie można wymyślić jeszcze szybszy i oszczędniejszy algorytm.

0

w zależności ile chcesz mieć liter, a ile cyfr zmień sobie 20 i 7

<?php
  $litery = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  $cyfry = '0123456789';
  $w = str_shuffle(substr(str_shuffle($litery), 20) . substr(str_shuffle($cyfry), 7));
  echo $w;
?>

1 użytkowników online, w tym zalogowanych: 0, gości: 1