2011-12-20 13 views
1

タイトルが尋ねるものとまったく同じです - 私は自分の登録フォームにcaptcha認証を使用することができますか?(デルファイ2010を使用して)delphi 2010でのcaptcha検証の作成方法は?

+3

明らかに、サーバー側でキャプチャを生成する必要があります。自分でキャプチャを作成することは強くお勧めしますが、recaptchaなど既存のものを埋め込む方法を探してください。 – CodesInChaos

+1

サーバー側のアプリケーション(Webアプリケーションなど)ですか?またはクライアント/サーバーアプリケーションですか? – mjn

答えて

2

Captchaそれはちょっとしたテキストのテキストです。したがって、画像を作成して、 というテキストを出力することができます。さらに詳しい情報が必要な場合は、さらに詳しく説明する必要があります。 あなたが理解していないキャプチャを作成する方法についてです。

データベーステーブルに可能なすべての単語のリストを保存し、単語のID番号 をあなたのcaptcha関数に渡すことができます。こうすれば、ユーザーが正しい単語を入力し、必要に応じて補足チェックを行うかどうかを知る方法が得られます。

Writing Transparent Text on Image

を、インターネット上の多くの例があります。ここでは

あなたは、画像の上に透明テキストを描画する方法があります。

または、コンポーネントを使用して作業を行うことができます。

0

多分、あなたはGoogleのrecaptcha APIを呼び出すことができます。

4

Imageコントロールを使用してさまざまな要素を描画し、Captchaを取得します。 あなたはこのようなコードを使用して、いくつかの文字を描くことができます:

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

最後に、あなたがこのようなコードを使用してキャプチャするためにいくつかの行を追加することができます:

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; 

をあなたはこのようにそれを使用することができます

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; 

パラメータを変更し、他のパラメータを変更して結果を変更してください。

enter image description here

よろしく: あなたは、このようないくつかの画像を得ることができます。

+1

このコードはちょっとしたバグを除いて完璧に機能します。TextOutの行とSetTextColorの行は、それぞれの文字が効果的に別の色で描画されるように反転する必要があります。 – fpiette