funkcja generująca hasło

Często w naszych systemach potrzebujemy wygenerować hasło/hasła.

Napisałem przydatną funkcję generującą hasło – używam jej przy generowaniu haseł generatorem http://aljandor.unixstorm.org/pwgen/ oraz w innych miejscach.

/**
 * generowanie hasła
 * dostępne $zestawy znaków: 'l' - małe listery
                             'u' - duże litery
                             'd' - cyfry
                             's' - znaki specjalne
 * @param int $dlugosc
 * @param array $zestawy
 */
function generujHaslo($dlugosc=25, $zestawy=array('l','u','d','s'))
{
 $sets = array();
 if(in_array('l', $zestawy) !== false) 
 $sets[] = 'abcdefghjkmnpqrstuvwxyz'; 
 
 if(in_array('u', $zestawy) !== false) 
 $sets[] = 'ABCDEFGHJKMNPQRSTUVWXYZ';

 if(in_array('d', $zestawy) !== false)
 $sets[] = '23456789';

 if(in_array('s', $zestawy) !== false)
 $sets[] = '!@#$%&*?';
 

 $wszystkie = '';
 $haslo = '';
 
 foreach($sets as $set)
 {
 $haslo.= $set[array_rand(str_split($set))];
 $wszystkie .= $set;
 }
 $wszystkie = str_split($wszystkie);
 for($i = 0; $i < $dlugosc - count($sets); $i++)
 {
 $haslo .= $wszystkie[array_rand($wszystkie)];
 }
 $password = str_shuffle($haslo);
 
 return $haslo; 
}

przykładowe wywołanie:

echo generujHaslo(25, array('l', 'u','d','s'));