unit parole;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type Chiave=class
private
valori:string;
lunghezza:integer;
ripetizioni:boolean;
minuscole:boolean;
maiuscole:boolean;
numeri:boolean;
simboli:boolean;
procedure setRipetizioni(rip:boolean);
procedure setMaiuscole(valore:boolean);
procedure setNumeri(valore:boolean);
procedure selezionaValori;
procedure setLungheza(valore:integer);
procedure setSimboli(valore:boolean);
procedure setMinuscole(valore:boolean);
public
constructor crea(l:integer);
property estensione:integer read lunghezza write setLungheza;
property doppi:boolean read ripetizioni write setRipetizioni;
property lettereMaiuscole:boolean read maiuscole write SetMaiuscole;
property lettereMinuscole:boolean read minuscole write Setminuscole;
property punteggiatura:boolean read simboli write setSimboli;
property alfanumerico:boolean read numeri write setNumeri;
function singolo:string;
end;
implementation
procedure Chiave.setRipetizioni(rip:boolean);
begin
ripetizioni:=rip;
selezionaValori
end;
procedure Chiave.selezionaValori;
var i:integer;
testAzzeramento:boolean;
begin
valori:='';
testAzzeramento:=minuscole or maiuscole or numeri or simboli;
if not testAzzeramento then minuscole:=True;
if minuscole then
begin
i:=ord('a');
while i<=ord('z') do
begin
valori:=valori+char(i);
i:=i+1;
end;
end;
if maiuscole then
begin
i:=ord('A');
while i<=ord('Z') do
begin
valori:=valori+chr(i);
i:=i+1;
end;
end;
if numeri then valori:=valori+'0123456789';
if simboli then valori:=valori+'\|!"£$%&/()[]{}+-*/@#§_,.;:=?^'
end;
constructor Chiave.crea(l:integer);
begin
self.estensione:=l;
maiuscole:=True;
self.ripetizioni:=False;
self.numeri:=True;
self.simboli:=True;
selezionaValori;
randomize;
end;
procedure Chiave.setLungheza(valore:integer);
begin
valore:=abs(valore);
if (valore>=4) and (valore<=32) then lunghezza:=valore
else lunghezza:=8;
end;
function Chiave.singolo:string;
var i,generato:integer;
copiaSacco,risultato:string;
begin
copiaSacco:=valori;
risultato:='';
for i:=1 to lunghezza do
begin
generato:=1+random(length(copiaSacco));
risultato:=risultato+copiaSacco[generato];
if (not ripetizioni) and (length(copiaSacco)>1) then
Delete(copiaSacco, generato, 1);
end;
singolo:=risultato;
end;
procedure Chiave.setMaiuscole(valore:boolean);
begin
maiuscole:=valore;
selezionaValori
end;
procedure Chiave.setNumeri(valore:boolean);
begin
numeri:=valore;
selezionaValori
end;
procedure Chiave.setSimboli(valore:boolean);
begin
simboli:=valore;
selezionaValori
end;
procedure Chiave.setMinuscole(valore:boolean);
begin
minuscole:=valore;
selezionaValori;
end;
end.