26 janeiro 2012

Gerar Senhas Aleatórias em Delphi

Fiz essa função para uma necessidade minha de gerar senha a usuários.
Ela gera aleatoriamente senhas com números  e letras, só numeros, só minusculas ou maiúsculas e minúsculas, dependendo da parametrização que você mandar pra ela. Bom proveito.


function GeraSenha(QtdCaracteres: Byte; SoNumeros: Boolean = False; MaisculasEMinusculas: Boolean = True): String;
//Gera uma senha aleatória com letras e numeros ou só numeros
const
  Letras: array[0..25] of string = ('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
var
  ParteNumerica, i, MaiMin: Byte;
  ParteCaracter: string;
  ContaMais1: Boolean;


begin
  Result:= '';
  Randomize;
  ContaMais1:= False;
  for I := 1 to QtdCaracteres  do
  begin
    if not ContaMais1 then
    begin
      ParteNumerica:= Random(9);
      Result:= Result+ IntToStr(ParteNumerica);


      if not SoNumeros then
      begin
        ParteCaracter:= Letras[Random(26)];


        if MaisculasEMinusculas then
        begin
          MaiMin:= Random(2);
          case MaiMin of
            0: Result:= Result+ LowerCase(ParteCaracter);
            1: Result:= Result+ UpperCase(ParteCaracter);
          end;
        end
        else
          Result:= Result+ LowerCase(ParteCaracter);
        ContaMais1:= True; //incrementa contador de caracteres pois no mesmo loop gerou um numero e uma letra
      end;
    end
    else
      ContaMais1:= False;
  end;
end;