// Im Netz findet man mehrmals einen Code zur Generierung "sprechbarer"
// Passwörter. Allerdings steht auf deutschen Seiten auch die englische
// Version und außerdem erzeugt er auch solche Worte wie "cucucucu", bei
// welchem man schon von fern durch einen Blick auf die Tastatur das
// Wort während der Eingabe ausspähen kann. Deshalb habe ich den Code
// ein wenig abgeändert.


// Getestet mit D4 unter XP

// Variante 1:
//
(Die erzeugten Wörter klingen wie die Namen der japanischen Sumo-Ringer)

function PassW: string; 
const 
  kon: array[0..14] of Char = 'dfghjklmnprstwz'; 
  vok: array[0..4] of Char = 'aueio'; 
var 
  i: integer; 
  c, v, m: string; 
begin 
  result := ''; 
  randomize; 
  m := ''; 
  for i := 1 to 4 do 
  begin 
    c := kon[random(15)]; 
    if (i = 1) then begin 
      if c = 'p' then c := 'b'; 
    end else 
      if c = 'z' then c := 'sch'; 
    result := result + c; 
    repeat 
      v := vok[random(5)]; 
    until v <> m; 
    m := v; 
    result := result + v; 
  end; 
end; 
 
procedure TForm1.Button3Click(Sender: TObject); 
begin 
  showmessage(passw); 
end; 


// --------------------------------------------------


// Variante 2:
// Um die Sicherheit der Passwörter zu erhöhen, wird das letzte Zeichen
// eine Ziffer. Das kann man sich gerade noch so merken :-)

function PassW: string; 
const 
  kon: array[0..14] of Char = 'dfghjklmnprstwz'; 
  vok: array[0..4] of Char = 'aueio'; 
  zhl: array[0..9] of Char = '0123456789'; 
var 
  i: integer; 
  c, v, m: string; 
begin 
  result := ''; 
  randomize; 
  m := ''; 
  for i := 1 to 4 do 
  begin 
    c := kon[random(15)]; 
    if (i = 1) then begin 
      if c = 'p' then c := 'b'; 
    end else 
      if c = 'z' then c := 'sch'; 
    result := result + c; 
    repeat 
      if (i = 4) then v := zhl[random(10)] else 
        v := vok[random(5)]; 
    until v <> m; 
    m := v; 
    result := result + v; 
  end; 
end; 
 
procedure TForm1.Button3Click(Sender: TObject); 
begin 
  showmessage(passw); 
end;


// --------------------------------------------------

// Variante 3:
// Je länger ein Passwort ist, desto sicherer ist es. Deshalb verwenden manche
// Leute ganze Sätze. Aus diesem Grund habe ich mir hier einen neuen Code
// ausgedacht, der mehr oder minder sinnvolle Sätze bildet:

type 
  fall = array[0..2] of string; 
 
  sub = record 
    wort: string; 
    a: fall; 
  end; 
 
  vrb = record 
    wort: string; 
    fall: byte; 
  end; 
 
var 
  prpo: array[0..4] of string = ('der', 'die', 'das', 'dem', 'den'); 
  subj: array[0..14] of sub; 
  verb: array[0..14] of vrb; 
  m: integer = maxint; 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  with subj[0] do begin 
    wort := 'Putzfrau'; 
    a[0] := prpo[1]; 
    a[1] := prpo[0]; 
    a[2] := prpo[1]; 
  end; 
  with subj[1] do begin 
    wort := 'Vertreter'; 
    a[0] := prpo[0]; 
    a[1] := prpo[3]; 
    a[2] := prpo[4]; 
  end; 
  with subj[2] do begin 
    wort := 'Eichhörnchen'; 
    a[0] := prpo[2]; 
    a[1] := prpo[3]; 
    a[2] := prpo[2]; 
  end; 
  with subj[3] do begin 
    wort := 'Programmierer'; 
    a[0] := prpo[0]; 
    a[1] := prpo[3]; 
    a[2] := prpo[4]; 
  end; 
  with subj[4] do begin 
    wort := 'Bettlerin'; 
    a[0] := prpo[1]; 
    a[1] := prpo[0]; 
    a[2] := prpo[1]; 
  end; 
  with subj[5] do begin 
    wort := 'Kind'; 
    a[0] := prpo[2]; 
    a[1] := prpo[3]; 
    a[2] := prpo[2]; 
  end; 
  with subj[6] do begin 
    wort := 'Pferd'; 
    a[0] := prpo[2]; 
    a[1] := prpo[3]; 
    a[2] := prpo[2]; 
  end; 
  with subj[7] do begin 
    wort := 'Hausarzt'; 
    a[0] := prpo[0]; 
    a[1] := prpo[3]; 
    a[2] := prpo[4]; 
  end; 
  with subj[8] do begin 
    wort := 'Kuh'; 
    a[0] := prpo[1]; 
    a[1] := prpo[0]; 
    a[2] := prpo[1]; 
  end; 
  with subj[9] do begin 
    wort := 'Lehrerin'; 
    a[0] := prpo[1]; 
    a[1] := prpo[0]; 
    a[2] := prpo[1]; 
  end; 
  with subj[10] do begin 
    wort := 'Polizistin'; 
    a[0] := prpo[1]; 
    a[1] := prpo[0]; 
    a[2] := prpo[1]; 
  end; 
  with subj[11] do begin 
    wort := 'Vater'; 
    a[0] := prpo[0]; 
    a[1] := prpo[3]; 
    a[2] := prpo[4]; 
  end; 
  with subj[12] do begin 
    wort := 'Kindermädchen'; 
    a[0] := prpo[2]; 
    a[1] := prpo[3]; 
    a[2] := prpo[2]; 
  end; 
  with subj[13] do begin 
    wort := 'Kätzchen'; 
    a[0] := prpo[2]; 
    a[1] := prpo[3]; 
    a[2] := prpo[2]; 
  end; 
  with subj[14] do begin 
    wort := 'General'; 
    a[0] := prpo[0]; 
    a[1] := prpo[3]; 
    a[2] := prpo[4]; 
  end; 

  with verb[0] do begin 
    wort := 'sitzt auf'; 
    fall := 1; 
  end; 
  with verb[1] do begin 
    wort := 'spuckt auf'; 
    fall := 2; 
  end; 
  with verb[2] do begin 
    wort := 'liebt'; 
    fall := 2; 
  end; 
  with verb[3] do begin 
    wort := 'betrachtet'; 
    fall := 2; 
  end; 
  with verb[4] do begin 
    wort := 'steht neben'; 
    fall := 1; 
  end; 
  with verb[5] do begin 
    wort := 'verachtet meistens'; 
    fall := 2; 
  end; 
  with verb[6] do begin 
    wort := 'beißt'; 
    fall := 2; 
  end; 
  with verb[7] do begin 
    wort := 'imponiert'; 
    fall := 1; 
  end; 
  with verb[8] do begin 
    wort := 'hasst'; 
    fall := 2; 
  end; 
  with verb[9] do begin 
    wort := 'lächelt über'; 
    fall := 2; 
  end; 
  with verb[10] do begin 
    wort := 'schmiegt sich an'; 
    fall := 2; 
  end; 
  with verb[11] do begin 
    wort := 'denkt oft an'; 
    fall := 2; 
  end; 
  with verb[12] do begin 
    wort := 'vertraut'; 
    fall := 1; 
  end; 
  with verb[13] do begin 
    wort := 'schubst'; 
    fall := 2; 
  end; 
  with verb[14] do begin 
    wort := 'streichelt'; 
    fall := 2; 
  end; 
end; 
 
function pwsatz: string; 
var 
  i, j, k: integer; 
begin 
  randomize; 
  repeat 
    i := random(length(subj)); 
  until i <> m; 
  m := i; 
  result := subj[i].a[0] + #32 + subj[i].wort + #32; 
  result[1] := upcase(result[1]); 
  j := random(length(verb)); 
  result := result + verb[j].wort + #32; 
  repeat 
    k := random(length(subj)); 
  until (i <> k) and (subj[i].a[0] <> subj[k].a[0]); 
  result := result + subj[k].a[verb[j].fall] + #32 + subj[k].wort + '.'; 
end; 
 
// Beispielaufruf 
 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  Label1.caption := pwsatz; 
end;



 

Zugriffe seit 6.9.2001 auf Delphi-Ecke