Home » Tipps & Tricks » Object Pascal » Strings » Zufallspasswort generieren

Zufallspasswort generieren

Folgende Funktion genertiert ein Zufallspasswort. Als Parameter erwartet die Funktion eine Zahl, die die Länge des Passworts ausgibt:

function RandomPassword(PLen:Integer):String; 
var 
  str:String; 
begin 
  Randomize; 
  //string with all possible chars 
  str:='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
  Result:=''; 
  repeat 
    Result:=Result+str[Random(Length(str))+1]; 
  until(Length(Result)=PLen) 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
  //generate a password with 10 chars 
  Label1.Caption:=RandomPassword(10); 
end;

Diese Function generiert ein Passwort mit festgelegter Länge

type
TPasswordMode = set of (pmUpper, pmLower, pmNumbers, pmExtra);


function GeneratePassword(ALength: Integer; Mode: TPasswordMode):string;
const
  cLower   = 'abcdefghijklmnopqrstuvwxyz';
  cUpper   = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  cNumbers = '0123456789';
  cExtra   = '°!"§$&/()=-+*?ß}{][@.,;:_~';
  
var
  i : Integer;
  S : string;
  iM: BYTE;
begin
  // Kein mode angegeben, dann raus...
  if Mode = [] then Exit;

  i := 0;
  Randomize;
  
  while (i < ALength)  do
  begin
    iM := RANDOM(4);
    case iM of
      // Kleinbuchstaben
      0: if (pmLower in Mode) then begin
            S := S + cLower[1+RANDOM(Length(cLower))];
           Inc(i);
          end;
      // Grossbuchstaben
     1: if (pmUpper in Mode) then begin
           S := S + cUpper[1+RANDOM(Length(cUpper))];
          Inc(i);
         end;        
      // Nummern
      2: if (pmNumbers in Mode) then begin
           S := S + cNumbers[1+RANDOM(Length(cNumbers))];
           Inc(i);
          end;
      // Sonderzeichen
      3: if (pmExtra in Mode) then begin
           S := S + cExtra[1+RANDOM(Length(cExtra))];
           Inc(i);
         end;
    end;
  end;
  // Generiertes Passwort zurueckgeben
  Result := S;
end;

Aufruf zum Beispiel so:

// 12 Stelliges Passwort mit Klein und Grossbuchstaben sowie Zahlen
// generieren.
Edit1.Text := GeneratePassword(12, [pmUpper, pmLower, pmNumbers]);