[DELPHI] CRIAR CAPTCHA NO DELPHI

Podemos utilizar a função abaixo para criar Captcha nos formulários que necessitam de um validação extra, dificultando a utilização de robôs no sistema.

// Adicione ao form uma TImage
// Uses ExtCtrls 

function TForm1.GetCaptcha(Img: TImage;
  Num_Caracteres: Integer): String;
var
  Chars, Captcha: String;
  I, X, y, Tamanho, Espaco, Cor: Integer;
begin
  Randomize;
  Chars := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz';

  y := 6;
  X := 10;
  Tamanho := 18;
  Espaco := 30;
  Cor := 5999857;

  // Preparando o TImage.
  with (Img) do
  begin
    Refresh;
    Canvas.LineTo(10, 20);
    Picture.Bitmap := nil;
    Canvas.Brush.Color := $00F7F8F9;
    Canvas.Pen.Color := $00F7F8F9;
    Canvas.Rectangle(0, 0, Width, Height);
  end;

  // Selecionando os caracteres.
  Captcha := '';
  for I := 0 to Num_Caracteres do
  begin
    Captcha := Captcha + Copy(Chars, Random(length(Chars)), 1);
  end;

  // Desenhando os caracteres.
  for I := 1 to length(Captcha) - 1 do
  begin
    with (Img) do
    begin
      Canvas.Font.Size := Random(Tamanho) + 15;
      Canvas.Font.Color := Random(Cor);
      Canvas.Font.Name := 'Arial';;
      Canvas.Font.Style := Canvas.Font.Style + [fsBold];
      Canvas.TextOut(X, Random(y), Copy(Captcha, I, 1));
    end;

    inc(X, Espaco);

    // Criando os traços do Capcha.
    with (Img) do
    begin
      Canvas.Pen.Width := 3;
      Canvas.Pen.Color := Random(Cor);
      Canvas.LineTo(Random(250), Random(200));
      Canvas.LineTo(Random(250), Random(200));
    end;
  end;

  // Retorna o código para validação
  result := Copy(Captcha, 1, length(Captcha) - 1);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  GetCaptcha(Image1, 4);
end;

Gostou? Deixe seu comentário... Convido você a seguir meu blog, sua presença é bem vinda!【ツ】

Um comentário:

  1. Gostei não kkk

    essa coisa Captcha enche a paciências, virou moda principalmente aquela porcaria do google o inferno kk

    Brincadeira, não leva mal não,

    mas não gosto mesmo de jeito nenhum kk

    ResponderExcluir