Captcha Tutorial - Logische Abfragen
Autor
Flitze
Klicks 71675
Keywords:
Captchas mit PHP erstellen, Captcha Spamschutz, Captcha Tutorial Image-Funktionen, PHP Captcha-Klasse, Captchas einbinden, Turorial intelligente Captchas, Captcha Beispiel, logik, rechenaufgabe, text
Klicks 71675
Rating für Captcha Tutorial
6.4 von 10
Bewertungen41
Stand
20.06.2010
6.4 von 10
Bewertungen41
Keywords:
Captchas mit PHP erstellen, Captcha Spamschutz, Captcha Tutorial Image-Funktionen, PHP Captcha-Klasse, Captchas einbinden, Turorial intelligente Captchas, Captcha Beispiel, logik, rechenaufgabe, text
Breadcrumb:
Tutorials » Captcha Tutorial » Captcha Tutorial - Logische Abfragen
2. Text oder Rechenaufgabe einfügen
[ADSENSE_LINE]Um unser Captcha mit Leben zu füllen, füge ich jetzt 2 weitere Methoden hinzu, mittels derer wir einen Text oder eine (einfache) Rechenaufgabe in die Grafik einfügen können. Wir ergänzen die Klasse also um folgenden Code:PHP:
<?php
var $fontcolor; // Textfarbe
// setzt die Textfarbe
function setFontColor ($r, $g, $b){
if(!$this->checkColorValue($r,$g,$b)){
$this->errors[] = "Falscher Farbwert (Textfarbe)!";
return false;
}
$this->fontcolor = imagecolorallocate($this->bild,(int)$r,(int)$g,(int)$b);
}
// erstellt einen Text in der Grafik
function createText($text){
if(trim($text) == ''){
$this->errors[] = "Kein Text eingegeben!";
return false;
}
if(!is_Int($this->fontcolor)){
$this->errors[] = "Schriftfarbe ist nicht initialisiert!";
return false;
}
// Schrift einfügen
// 'padding'
$p = 10;
// Verhältnis zwischen Buchstabenanzahl und Grafikbreite
$c = round(($this->width-2*$p)/strlen($text));
// Für jeden Buchstaben neue Werte ermitteln
for($i=0; $i<strlen($text); $i++){
// Schriftgröße
$fontsize = $c+rand(0,10);
// Schriftwinkel
$winkel = -20+rand(0,50);
// x-Position in der Grafik,
// wird mir jedem Buchstaben größer
$x = $p+$i*$c;
// y-Position in der Grafik,
// in Abhängigkeit der Schriftgröße, des Paddings, und der Bildhöhe
$y = $p+$fontsize+rand(0,$this->height-$p-$fontsize);
// Buchstaben in die Grafik einfügen
ImageTTFText ($this->bild,$fontsize,$winkel,$x,$y,$this->fontcolor,'fonts/arial.ttf',$text{$i});
}
}
// erstellt eine Gleichung in der Grafik
function createArithmetic($n){
if(!is_Int($n)){
$this->errors[] = "Ungültige Zahl eingegeben!";
return false;
}
if(!is_Int($this->fontcolor)){
$this->errors[] = "Schriftfarbe ist nicht initialisiert!";
return false;
}
// Zufallszahl ermitteln
$zahl_2 = rand(1,$n-1);
// Rechenoperation und 2. Zahl ermitteln
if(rand(0,1)){
$zeichen = "+";
$zahl_1 = $n-$zahl_2;
}
else{
$zeichen = "-";
$zahl_1 = $n+$zahl_2;
}
// Rechenaufgabe als String zusammenfügen
$text = $zahl_1.$zeichen.$zahl_2;
$p = 10;
$c = round(($this->width-2*$p)/strlen($text));
// in einheitlicher Größe, Winkel und y-Position
// in die Grafik einfügen
for($i=0; $i<strlen($text); $i++){
$fontsize = $c+10;
$winkel = 0;
$x = $p+$i*$c;
$y = $this->height/2+$fontsize/2;
ImageTTFText ($this->bild,$fontsize,$winkel,$x,$y,$this->fontcolor,'fonts/arial.ttf',$text{$i});
}
}
?>
Zuerst muss mit setFontColor() eine Schriftfarbe gesetzt werden. Danach kann mit createText() ein Text und mit createArithmetic() eine Rechenaufgabe in das Bild eingefügt werden. Dazu wird die Funktion ImageTTFText() verwendet, deren Parameter im obigen Beispiel kommentiert sind. Bei createText() wird dabei jeder einzelne Buchstabe durch Zufallswerte etwas verfälscht (Winkel, Größe) um einem Bot das Erkennen zu erschweren.
createArithmetic() erwartet eine ganze Zahl als Parameter, aufgrund derer eine Rechenaufgabe konstruiert wird, die den Parameter als Lösung hat.
Hier einige Beispiele:
PHP:
<?php
// Reiner Text
$myCaptcha = new Captcha(200,100);
$myCaptcha->setBGColor(255,0,0);
$myCaptcha->setFontColor(0,0,0);
$myCaptcha->createText('Hallo');
$myCaptcha->createCaptcha();
// Reine Rechenaufgabe
$myCaptcha = new Captcha(200,100);
$myCaptcha->setBGColor(255,0,0);
$myCaptcha->setFontColor(0,0,0);
$myCaptcha->createArithmetic(9);
$myCaptcha->createCaptcha();
// Text im Hintergrund der Aufgabe
$myCaptcha = new Captcha(200,100);
$myCaptcha->setBGColor(255,0,0);
$myCaptcha->setFontColor(50,50,50);
$myCaptcha->createText('123456');
$myCaptcha->setFontColor(0,0,0);
$myCaptcha->createArithmetic(9);
$myCaptcha->createCaptcha();
?>
Zurück zur vorigen Seite:
Captcha Tutorial - Captcha-Klasse Weiter zur nächsten Seite:
Captcha Tutorial - Störelemente