Programowanie w języku PHP » FAQ

Jak wygenerować losowe hasło z nie powtarzającymi się znakami

  • 2008-05-19 19:27
  • 8 komentarzy
  • 2058 odsłon
  • Oceń ten tekst jako pierwszy
Można przy pomocy takiej funkcji:

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

abc 2008-05-19 19:36

Mam nadzieję, że niczego nie zepsułem :P

manfredek 2008-04-15 17:54

trochę zoptymalizowałem ten kod, mimo że raczej php nie znam.

Demonical Monk 2008-04-15 10:32

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.

bordeux 2008-04-15 16:17

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.

maciejplonski 2006-06-26 22:16

w którym php jest napisany ten skrypt, bo mi nie działa??

Marooned 2006-05-20 00:56

Ło matko, ależ strasznie nieoptymalny kod O_o
Totalna masakra

No tak, data powstania: 2003-02-06 19:38

luksz 2006-02-02 12:10

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

DhuCerbin 2003-12-09 18:48

funkcje strlen($zestaw_znakow) - 1 - powinnismy wystawic przed petle, co pozwoli na szybsze dzialanie programu