PHP Tutorials, PHP lernen, PHP Forum, PHP Community and more ... MyWebsolution.de!

Sidebar

Home News Tutorials Workshops Tipps Artikel Gästebuch Sitemap Unicode Shopping

Suche

Members

Forum Login Registrierung

Statistik

Statistikbereich
Jetzt1
Heute98
Gestern286
Gesamt1624140

Captcha Tutorial - Störelemente

Autor Flitze
Klicks 51118
Rating für Captcha Tutorial
  6.4 von 10
Bewertungen41
Stand 20.06.2010
Keywords:
Captchas mit PHP erstellen, Captcha Spamschutz, Captcha Tutorial Image-Funktionen, PHP Captcha-Klasse, Captchas einbinden, Turorial intelligente Captchas, Captcha Beispiel, Captcha, Störelemente, Kreis, Linie, Stern, Sterne erstellen, Kreise erstellen, Rechtecke erstellen, Dreiecke erstellen, Störlinien erstellen,

Amazon: PHP 5.3 und MySQL 5.1
Breadcrumb:
Tutorials » Captcha Tutorial » Captcha Tutorial - Störelemente
Seite : 1 2 3 4 5 Bewerten
Article Wizard - deutscher Article Spinner

3. Störelemente (Kreis, Stern, Rechteck, Dreieck)

Durch die kombinierte Verwendung von Text und Rechenaufgabe wird es schon schwieriger, das Captcha zu entziffern. Außer Text können aber auch noch weitere Störelemente erzeugt werden. Dazu müssen erstmal neue Attribute erzeugt werden.

PHP:
<?php
    
var $elementcolor;
    var 
$elementnumber;
    var 
$elementsize;
?>


Außerdem brauche ich Methoden zum Setzen und Kontrollieren dieser Attribute.

PHP:
<?php
    
// setzt die Attribute für die Störelemente
    
function setElementAttributes ($r$g$b$n$size){
        
// Elementfarbe
        
if(!$this->checkColorValue($r,$g,$b)){
            
$this->errors[] = "Falscher Farbwert (Störelementfarbe)!";
            return 
false;
        }
        
// Anzahl
        
if(!is_Int($n)){
            
$this->errors[] = "Falscher Zahlwert (Störelementanzahl)!";
            return 
false;
        }
        
// Größe
        
if(!is_Int($size)){
            
$this->errors[] = "Falscher Zahlwert (Störelementgröße)!";
            return 
false;
        }
        
$this->elementcolor imagecolorallocate($this->bild,(int)$r,(int)$g,(int)$b);
        
$this->elementnumber = (int)$n;
        
$this->elementsize = (int)$size;
    }

    
// prüft, ob die Elementattribute gesetzt wurden
    
function checkElementAttributes(){
        if(!
is_Int($this->elementnumber)){
            
$this->errors[] = "Störelemente sind nicht initialisiert!";
            return 
false;
        }
        if(!
is_Int($this->elementcolor)){
            
$this->errors[] = "Elementfarbe ist nicht initialisiert!";
            return 
false;
        }
        if(!
is_Int($this->elementsize)){
            
$this->errors[] = "Elementgröße ist nicht initialisiert!";
            return 
false;
        }
        return 
true;
    }
?>


Nun können wir uns der Erzeugung der eigentlichen Elemente zuwenden. Ich fange mal mit Störlinien an.

Störlinien



PHP:
<?php
    
// erstellt Störlinien
    
function createLines(){
        
// Elementattribute prüfen
        
if(!$this->checkElementAttributes())
            return 
false;
        
// je größer $this->elementnumber desto mehr Linien
        
for($i=0$i<$this->elementnumber$i++){
            
$x_start rand(0,$this->width);
            
$x_end rand(0,$this->width);
            
// je größer $this->elementsize desto dicker die Linie
            
for($j=0$j<$this->elementsize$j++){
                
$x_start++;
                
$x_end++;
                
// Linie vom oberen zum unteren Rand einfügen
                
imageline($this->bild$x_start0$x_end$this->height$this->elementcolor);
            }
        }
    }
?>


Beispiele

PHP:
<?php
    
// Einfarbige Störlinien
    
$myCaptcha = new Captcha(200,100);
    
$myCaptcha->setBGColor(255,0,0);
    
$myCaptcha->setElementAttributes(50,50,50,10,5);
    
$myCaptcha->createLines();
    
$myCaptcha->setFontColor(20,20,20);
    
$myCaptcha->createText('123456');
    
$myCaptcha->setFontColor(0,0,0);
    
$myCaptcha->createArithmetic(9);
    
$myCaptcha->createCaptcha();
    
// Mehrfarbige Störlinien
    
$myCaptcha = new Captcha(200,100);
    
$myCaptcha->setBGColor(255,0,0);
    for(
$i=0$i<10$i++){
        
$r rand(0,255);
         
$g rand(0,255);
         
$b rand(0,255);
        
$myCaptcha->setElementAttributes($r,$g,$b,1,5);
        
$myCaptcha->createLines();
    }
    
$myCaptcha->setFontColor(20,20,20);
    
$myCaptcha->createText('123456');
    
$myCaptcha->setFontColor(0,0,0);
    
$myCaptcha->createArithmetic(9);
    
$myCaptcha->createCaptcha();
?>


Kreise



PHP:
<?php
    
function createCircles(){
        if(!
$this->checkElementAttributes())
            return 
false;
        for(
$i=0$i<$this->elementnumber$i++){
            
$x rand(0,$this->width);
            
$y rand(0,$this->height);
            
imagefilledellipse($this->bild$x$y$this->elementsize$this->elementsize$this->elementcolor);
        }
    }
?>


Rechtecke



PHP:
<?php
    
function createRectangles(){
        if(!
$this->checkElementAttributes())
            return 
false;
        for(
$i=0$i<$this->elementnumber$i++){
            
$x rand(0,$this->width);
            
$y rand(0,$this->height);
            
imagefilledrectangle($this->bild$x$y$x+$this->elementsize$y+$this->elementsize$this->elementcolor);
        }
    }
?>


Sterne



PHP:
<?php
    
function createStars(){
        if(!
$this->checkElementAttributes())
            return 
false;
        
$spikes 5;
        for(
$i=0$i<$this->elementnumber$i++){
            
$x rand(0,$this->width);
            
$y rand(0,$this->height);
            
$values drawStar($x$y$this->elementsize$spikes);
            
imagefilledpolygon($this->bild$values$spikes*2$this->elementcolor);
        }
    }
?>


Zum Erzeugen von Sternen mittels PHP habe ich eine eigene Funktion entwickelt, auf die ich hier zurückgreife. Dieses Funktion nennt sich drawStar() und ist im Tutorial zum Erstellen von Sternen mittels PHP erklärt.

Dreiecke



PHP:
<?php
    
function createTriangle(){
        if(!
$this->checkElementAttributes())
            return 
false;
        
$spikes 3;
        for(
$i=0$i<$this->elementnumber$i++){
            
$x rand(0,$this->width);
            
$y rand(0,$this->height);
            
$values drawStar($x$y$this->elementsize$spikes);
            
imagefilledpolygon($this->bild$values$spikes*2$this->elementcolor);
        }
    }
?>


Beispielaufruf in bunt

PHP:
<?php
    $myCaptcha 
= new Captcha(200,100);
    
$myCaptcha->setBGColor(255,0,0);
    for(
$i=0$i<10$i++){
        
$r rand(0,255);
        
$g rand(0,255);
        
$b rand(0,255);
        
$myCaptcha->setElementAttributes($r,$g,$b,1,5);
        
$myCaptcha->createLines();
    }
    for(
$i=0$i<3$i++){
        
$r rand(0,255);
        
$g rand(0,255);
        
$b rand(0,255);
        
$myCaptcha->setElementAttributes($r,$g,$b,1,rand(10,30));
        
$myCaptcha->createCircles();
    }
    for(
$i=0$i<3$i++){
        
$r rand(0,255);
        
$g rand(0,255);
        
$b rand(0,255);
        
$myCaptcha->setElementAttributes($r,$g,$b,1,rand(10,30));
        
$myCaptcha->createStars();
    }
    for(
$i=0$i<3$i++){
        
$r rand(0,255);
        
$g rand(0,255);
        
$b rand(0,255);
        
$myCaptcha->setElementAttributes($r,$g,$b,1,rand(10,30));
        
$myCaptcha->createRectangles();
    }
    for(
$i=0$i<3$i++){
        
$r rand(0,255);
        
$g rand(0,255);
        
$b rand(0,255);
        
$myCaptcha->setElementAttributes($r,$g,$b,1,rand(10,30));
        
$myCaptcha->createTriangle();
    }
    
$myCaptcha->setFontColor(20,20,20);
    
$myCaptcha->createText('123456');
    
$myCaptcha->setFontColor(0,0,0);
    
$myCaptcha->createArithmetic(9);
    
$myCaptcha->createCaptcha();
?>


Beispielaufruf mit einer Farbe pro Elementgattung

PHP:
<?php
    $myCaptcha 
= new Captcha(200,100);
    
$myCaptcha->setBGColor(255,0,0);
    
$myCaptcha->setElementAttributes(255,255,0,10,5);
    
$myCaptcha->createLines();
    
$myCaptcha->setElementAttributes(0,0,255,3,rand(10,30));
    
$myCaptcha->createCircles();
    
$myCaptcha->setElementAttributes(0,255,0,3,rand(10,30));
    
$myCaptcha->createStars();
    
$myCaptcha->setElementAttributes(0,255,255,3,rand(10,30));
    
$myCaptcha->createRectangles();
    
$myCaptcha->setElementAttributes(255,0,255,3,rand(10,30));
    
$myCaptcha->createTriangle();
    
$myCaptcha->setFontColor(20,20,20);
    
$myCaptcha->createText('123456');
    
$myCaptcha->setFontColor(0,0,0);
    
$myCaptcha->createArithmetic(9);
    
$myCaptcha->createCaptcha();
?>


Beispielaufruf einfarbig

PHP:
<?php
    $myCaptcha 
= new Captcha(200,100);
    
$myCaptcha->setBGColor(255,0,0);
    
$r 50;
    
$g 50;
    
$b 50;    
    
$myCaptcha->setElementAttributes($r,$g,$b,10,5);
    
$myCaptcha->createLines();
    
$myCaptcha->setElementAttributes($r,$g,$b,3,rand(10,30));
    
$myCaptcha->createCircles();
    
$myCaptcha->createStars();
    
$myCaptcha->createRectangles();
    
$myCaptcha->createTriangle();
    
$myCaptcha->setFontColor(20,20,20);
    
$myCaptcha->createText('123456');
    
$myCaptcha->setFontColor(0,0,0);
    
$myCaptcha->createArithmetic(9);
    
$myCaptcha->createCaptcha();
?>


So nun haben wir einige Möglichkeiten um uns ein hübsches Captcha zu basteln.

Zurück zur vorigen Seite:
Captcha Tutorial - Logische Abfragen
Weiter zur nächsten Seite:
Captcha Tutorial - Einbindung

»» Zurück zum Menu

Suchmaschinenoptimierung

Suchmaschinenoptimierung (SEO - Search Engine Optimization)

Ranking

Tutorials (13)

8.6
8.4
8.1

Workshops (3)

8.8
8.7
7.6

Tipps (13)

7.2
6.7
6.5

Artikel (29)

8.4
7.2
6.4

RSS Feeds

Full Feed Tutorials Workshops Tipps Artikel

Twitter

Follow me on Twitter

Partner & Links


Valid HTML 4.01 Transitional
Valid CSS
nach oben

Diese Seiten unterstützen MyWebsolution:
 
© MyWebsolution.de
2006-2017