Jak wygenerować losowe hasło / przypadkowy ciąg znaków w PHP

W artykule tym przedstawię kilka sposobów na to jak wygenerować przypadkowy ciąg znaków / lub nowe hasło dla użytkownika, za pomocą PHP.

Thank you for reading this post, don't forget to subscribe!

Sposób pierwszy.
Z wykorzystaniem funkcji kodowania md5

// tworzenie funkcji "losowy_ciag" - z parametrem $dlugosc
//gdzie $dlugosc może być z zakresu od 0 do 32 - w przypadku wpisania wiekszej liczby niż 32 i tak funkcja zwróci 32 znaki
function losowy_ciag($dlugosc){

// generujemy losowy ciąg znaków
// pobieramy aktualny czas a następnie przeprowadzamy kodowanie tego czasu za pomocą funkcji szyfrującej md5
  $string = md5(time());

//przycinamy ciąg znaków do podanej długości, począwszy od 1 znaku a skończywszy na $długosc
  $string = substr($string,0,$dlugosc);

//zwraca ciąg znaków
  return($string);
}


// teraz zapisujemy do zmiennej i wyświetlamy na ekranie;
$ciag_znakow=losowy_ciag(10);
echo $ciag_znakow;


Przykładowym wynikiem naszego programu dla długości 10 będzie: 75ef4da3dc
Funkcja ciekawa lecz narzuca nam ograniczenie w postaci maksymalnej długości znaków do 32 sztuk.
Poniżej wiec zaprezentuje przykładową funkcje, która nie ma takiego ograniczenia.

Sposób drugi.

// tworzenie funkcji "losowy_ciag_2" - z parametrem $dlugosc
function losowy_ciag_2($dlugosc)
{

//przypisanie do zmiennej $znaki ciągu znaków od 0 do Z 
$znaki= "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
// zadeklarowanie zmiennej $losowy_ciag jako pusty / aby nie wyświetlało nam się ostrzeżenie 
$losowy_ciag="";

// pętla for która generuje nam znaki w zależności od podanej długości
for ($i=0; $i < $dlugosc; $i++)
{

//każdorazowe przejście pętli nadpisuje nam zmienna $losowy_ciag, dopisuje kolejny losowy znak
//jak zostaje wybrany ten znak? - zacznijmy od środka
//strlen($znaki)-1) liczy ile znaków znajduje się w zmiennej $znaki i odejmuje 1 
//rand(0, strlen($znaki)-1) - wybiera losową wartość z zakresu 0 do wartości strlen($znaki)-1
//oraz ostatnia funkcja substr($znaki, rand(0, strlen($znaki)-1), 1) - wybiera znak z ciągu znaków zmiennej $znaki, znajdujący się na pozycji wygenerowanej przez funkcję rand()
$losowy_ciag .= substr($znaki, rand(0, strlen($znaki)-1), 1);
}

// zwracanie całego losowego ciągu znaków
return $losowy_ciag;
}

//Jeśli chcemy wyświetlić losowy ciąg o długości 10. znaków, wpisujemy:

echo losowy_ciag_2(10);

Przykładowy wynik działania tej funkcji z długością 60 jest: LW7GKnKcR47oHLzKlDXdqrChZonUFbByx48dcJjkJqZSJPuljcFF3fRl3aVk

Sposób trzeci – prosty
wykorzystanie wbudowanej funkcji uniqid()


//funkcja generuje 13 znakowy ciąg na podstawie aktualnego czasu
echo uniqid(); 
// wynik przykładowy: 50cb9f1565879
//można zwiększyć ilość losowych znaków do 23 stosując jako drugi parametr wartość true
echo uniqid('',true);
// wynik przykładowy dla tego rozwiązania: 50cb9f69d06bf8.51904596

//istnieje także możliwość nadania własnej formy stałej do generowanego ciągu
 echo uniqid('haslo'); 
//wynikiem w tym przypadku, przykładowo będzie: haslo50cba05c355bd

Przedstawiłem tu 3 sposobny na wygenerowanie losowego ciągu znaków. Oczywiście jest ich więcej.
Można kombinować na masę sposobów, wykorzystując inne nie podane w tych artykule funkcje.. np crypt() czy crc32(). Każde funkcje można ze sobą łączyć, zapętlać, zamieniać kolejności itd itp.
np.

 echo md5(uniqid(rand(), true));

Ogranicza nas tylko wyobraźnia…

Mam nadzieje, że artykuł Wam się przyda…