Crear un captcha con Delphi



Captcha es el acrónimo de Completely Automated Public Turing test to tell Computers and Humans Apart (Prueba de Turing pública y automática para diferenciar a máquinas y humanos).
Se suele usar en páginas web en las que se solicita información que se quiere garantizar que ha sido tecleada por un humano, ya que se presume que las máquinas son incapaces de leer el captcha.
Aquí tienen el código en Delphi para generar captchas

Otra forma de hacerlo:
procedure TForm1.letrasAnguladas(c : string; angulo : integer; nextPos : Integer);
var
   logfont:TLogFont;
   font: Thandle;
begin
   LogFont.lfheight:=30;
   logfont.lfwidth:=10;
   logfont.lfweight:=900;

   LogFont.lfEscapement:=angulo;
   logfont.lfcharset:=1;
   logfont.lfoutprecision:=OUT_TT_ONLY_PRECIS;
   logfont.lfquality:= DEFAULT_QUALITY;
   logfont.lfpitchandfamily:= FF_SWISS;
   logfont.lfUnderline := 0;
   logfont.lfStrikeOut := 0;

   font:=createfontindirect(logfont);

   Selectobject(Image1.canvas.handle,font);

   SetTextColor(Image1.canvas.handle,rgb(0,180,0));
   SetBKmode(Image1.canvas.handle,transparent);

   Image1.canvas.textout(nextPos,Image1.Height div 3,c);
   SetTextColor(Image1.canvas.handle,rgb(Random(255),Random(255),Random(255)));
   deleteobject(font);
end;

//se llama así
for vX := 1 to Length(strCaptcha) do
      letrasAnguladas(strCaptcha[vX],Random(600)+1,25*vX-15);

//añadimos algunas líneas
  for i := 0 to 15 do begin
    Image1.Canvas.Pen.Color := Random(100000);
    Image1.Canvas.MoveTo(random(Image1.Width), random(Image1.Height));
    Image1.Canvas.LineTo(random(Image1.Width), random(Image1.Height));
  end;
y obtenemos esto: enter image description here


Relacionados:
Utilizar redes neuronales para resolver captchas

2 comentarios:

  1. Excelente... con unas pequeñas modificaciones lo adapte a mi programa WEB

    Excelent, with a few modifications I addapted it to my WEB BASED program

    ResponderEliminar
  2. Gracias por compartir estaba buscando como generar captcha.
    ;)

    ResponderEliminar