Jak wygenerować losowe hasło z nie powtarzającymi się znakami
function generujHaslo($dlugosc_hasla = 8, $zestaw_znakow = 'abcdefghijklmnopqrstuvwxyz0123456789') { srand(microtime(true)); $zakres=strlen($zestaw_znakow); for ($i=0;$i<$dlugosc_hasla;$i++) { --$zakres; $haslo.=$zestaw_znakow[$wylosowano=(rand(0,$zakres))]; $tmp=$zestaw_znakow[$wylosowano]; @$zestaw_znakow[$wylosowano]=$zestaw_znakow[$zakres]; @$zestaw_znakow[$zakres]=$tmp; } return $haslo; }
Przykład:
echo 'Losowe hasło: '.generujHaslo();
8 komentarzy
trochę zoptymalizowałem ten kod, mimo że raczej php nie znam.
Ludzie! Chyba od tego mamy parametry w funkcji żeby je definiować, a nie siedzi sobie w środku długość i znaki a parametrów zero.
Demonical Monk: Mamy też domniemanie.. I co! teraz aby na szybko wygenerowac haslo musze podawac caly alfabet????? Chyba cos nie pasuje....
Tak powinna wygladac funkcja:
function generujHaslo($dlugosc_hasla = 8, $zestaw_znakow = 'abcdefghijklmnopqrstuvwxyz0123456789')
{
srand((double)microtime() * 1000000);
while(strlen($haslo) < $dlugosc_hasla)
{
$znak = $zestaw_znakow[rand(0, strlen($zestaw_znakow) - 1)];
if(!is_integer(strpos($haslo, $znak))) $haslo .= $znak;
}
return $haslo;
}
Takie coś jak długość hasła czy z jakich znaków ma być, to dodatki.. W domniemaniu się pisze.
w którym php jest napisany ten skrypt, bo mi nie działa??
Ło matko, ależ strasznie nieoptymalny kod O_o
Totalna masakra
No tak, data powstania: 2003-02-06 19:38
podobne używając for zamiast while unikniemy ciągłego wywoływania strlen($haslo)
$dlugosc_hasla jako paramtr funkcji dodał by trochę uniwersalności
funkcje strlen($zestaw_znakow) - 1 - powinnismy wystawic przed petle, co pozwoli na szybsze dzialanie programu
Mam nadzieję, że niczego nie zepsułem :P