23 de abr. de 2011

como gerar captcha ( delphi )

1. inserir componentes no form: image1 e edit1.
2. criar essa variavel global para acolher o valor correto.

var
  valor_captcha: string;

3. criar essa rotina para gerar o captcha:

function rtngerar_imagem_captcha(Img: TImage): string;
const
  f: array [0..4] of string = ('Courier New', 'Impact', 'Times New Roman',
                               'Verdana', 'Arial');
  s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  c: array [0..14] of TColor = (clAqua, clBlack, clBlue, clFuchsia, clGray,
                                clGreen, clLime, clMaroon, clNavy, clOlive,
                                clPurple, clRed, clSilver, clTeal, clYellow);
var
  i, x, y: integer;
  r: string;
begin
  randomize;
  Img.Width := 160;
  Img.Height := 60;
  for i := 0 to 3 do
    r := r + s[Random(length(s)-1)+1];
  with Img.Picture.Bitmap do
  begin
    width := Img.Width;
    Height := Img.Height;
    Canvas.Brush.Color := $00EFEFEF;
    Canvas.FillRect(Img.ClientRect);
    for i := 0 to 3 do
    begin
      Canvas.Font.Size := random(20) + 20;
      Canvas.Font.Name := f[High(f)];
      Canvas.Font.Color := c[random(High(c))];
      Canvas.TextOut(i*40,0, r[i+1]);
    end;
    for i := 0 to 2 do
    begin
      Canvas.Pen.Color := c[random(High(c))];
      Canvas.Pen.Width := 2;
      canvas.MoveTo(random(Width), 0);
      Canvas.LineTo(random(Width), Height);
      Canvas.Pen.Width := 1;
      x := random(Width-10);
      y := random(Height-10);
      Canvas.Rectangle(x, y, x+10, y+10);
    end;
  end;
  Result := r;
end;

como usar:
no momento que for gerado a imagem, enviar o retorno para a variavel global.

valor_captcha:= rtngerar_imagem_captcha(Image1);

agora poderemos fazer uma verificacao se o valor digitado no edit1 eh o mesmo.

begin
  if (Edit1.Text = valor_captcha) then
    showmessage('ok')
  else
    showmessage('falhou');
end;

Um comentário:

  1. Parabéns! Teu Blog é muito bom sempre venho aqui conferir as novidades. O delphi realmente faz milagres D:

    ResponderExcluir