Profil | Mitglieder | Registrieren | Start | Suche


PHP-Support.de » Programmierung » PHP & MySQL » Codeschnipsel » Captcha mit Hintergrundrauschen.    » Hallo Gast [Login | Registrieren]

Neues Thema | Antworten   

Autor Beitrag
php-elite.de
Mitglied
Guter User


Dabei seit: 28.11.2010
Herkunft: keine Angabe
Posts: 250
     Captcha mit Hintergrundrauschen. Zitat | Bearbeiten

Hier mal eine Klasse die es dir ganz einfach ermöglicht ein Captcha mit Hintergrundrauschen zu erstellen.

 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
<?php
class captcha {
    
/**
     * $breite
     * @var <int> Bild Breite in Pixel
     */
    
private $breite         90;
    
/**
     * $hoehe
     * @var <int> Bild Höhe in Pixel
     */
    
public $hoehe           30;
    
/**
     * $rauschen
     * @var <int> ANzahl der Punkte im Hintergrund
     */
    
public $rauschen        500;
    
/**
     * $anzahl_zeichen
     * @var <int> Anzahl der Zeichen
     */
    
public $anzahl_zeichen  6;
    
/**
     * $zeichen
     * @var <array> Captcha Zeichen
     */
    
public $zeichen         = array('A''B''C''D''E''F''G''H''I''J''K''L''M''N''O''P''Q''R''S''T''U''V''W''X''Y''Z');
    
/**
     * $bild
     * @var <type> Bild
     */
    
private $bild           NULL;
 
    public function  
__construct() {
        
session_start();
        unset(
$_SESSION['zeichen']);
    }
 
    
/**
     * Captcha Ausgeben
     */
    
public function create() {
        
$this -> breite $this -> anzahl_zeichen 18;
        
$this -> bild imagecreatetruecolor($this -> breite,$this -> hoehe);
        
imagefilledrectangle($this->bild,0,0,400,300,imagecolorallocate($this->bild,rand(200,255),rand(200,255),rand(200,255)));
        
$i       0;
        
$zeichen '';
        while(
$i $this -> rauschen) {
            
$x1 $x2 rand(0$this -> breite);
            
$y1 $y2 rand(0$this -> hoehe);
            
$color imagecolorallocate($this -> bild,rand(100,255),rand(100,255),rand(100,255));
            
imageline($this -> bild$x1$y1$x2$y2$color);
            
$i ++;
        }
        
$i=0;
        while(
$i $this -> anzahl_zeichen) {
            
$key $this -> zeichen[rand(0count($this -> zeichen) - 1)];
            
$zeichen .= $key;
            
$farbe=imagecolorallocate($this -> bild,rand(0,200),rand(0,200),rand(0,200));
            
imagestring($this -> bild,18 ,(18 $i),(0+rand(015)),$key,$farbe);
            
$i++;
        }
        
$_SESSION['zeichen'] = $zeichen;
        
header("Content-type: image/png");
        
imagepng($this -> bild);
    }
}
?>


Die Verwendung der Klasse:
 PHP 
1:
2:
3:
4:
5:
6:
<?php
include "captcha.klasse.php";
$c = new captcha();
$c -> rauschen 1000;
$c -> create();
?>


Das ganze schaut dann so aus:


Der Code zum gegen prüfen wird in der Session Variable $_SESSION["zeichzen"] gespeichert.

Viel Spaß damit.

Mehr dazu auf php-elite.de


12.03.2011, 15:54 Profil | PM | E-Mail  
Teralios
Moderator
Perfekter User


Dabei seit: 18.09.2005
Herkunft: Berlin
Posts: 2542
      Zitat | Bearbeiten

Du solltest die Klasse etwas von der PHP-Session trennen. Ich verwende prinzipiell ein eigenes Session-System z.B. da es sogar schneller arbeitet und sicherer ist.

Ansonsten eine gute Idee, gibt aber noch mehr Tricks dafür. Buchstaben in bestimmten Winkeln drehen, Verzerrungen, Hintergrund-Bilder. Farbwechsel des Hintergrunds und der Buchstaben. Auch absichtlich mal schlechteren Kontraste oder sehr grelle.


18.03.2011, 11:50 Profil | PM | E-Mail  
php-elite.de
Mitglied
Guter User


Dabei seit: 28.11.2010
Herkunft: keine Angabe
Posts: 250
      Zitat | Bearbeiten

k, ich werde das ganze noch mal "ausreifen" lassen und dann hier updaten.

Ich möchte halt eine möglichst lesbare Version erstellen, viele Captchas kann man einfach nicht mehr lesen, das finde ich dann doch schon zu übertrieben.

Das mit den Session Variablen und die Schrägstellung der Buchstaben, werde ich in der nächsten Version implementieren.

Die Buchstaben und der Hintergrund wechseln die Farben bereits in der Version, nur durch extremen Rauschen schaut das immer fast gleich aus.

mfg
php-elite.de




Post wurde schon 1x editiert, das letzte mal am 18.03.2011 um 15:31 von php-elite.de
18.03.2011, 15:30 Profil | PM | E-Mail  
Teralios
Moderator
Perfekter User


Dabei seit: 18.09.2005
Herkunft: Berlin
Posts: 2542
      Zitat | Bearbeiten

Du könntest z.B. .ttfs noch mitliefern die als GPL/LGPL sind und so auch das ein bauen, dass macht echt spaß.

Tipp zur Verbesserung, du könntest noch ein System bauen, dass ein Konsonant nur von einem Vokal gefolgt wird und andersrum. Dadurch entstehen auch gut lesbare Captchas. Verzerrungen und Linien bringen auch was, da muss man dann nicht viel machen.


18.03.2011, 15:58 Profil | PM | E-Mail  
php-elite.de
Mitglied
Guter User


Dabei seit: 28.11.2010
Herkunft: keine Angabe
Posts: 250
      Zitat | Bearbeiten

Das mit den Konsonanten und Vokalen und die Möglichkeit die eigene Session Verwaltung zu nutzen, hab ich heute mal realisiert.

http://php-elite.de/php/verbesserte-captcha-klasse/






Post wurde schon 1x editiert, das letzte mal am 07.05.2011 um 20:53 von php-elite.de
07.05.2011, 20:47 Profil | PM | E-Mail  
Seiten (1):  1 
PHP-Support.de » Programmierung » PHP & MySQL » Codeschnipsel » Captcha mit Hintergrundrauschen.   

Neues Thema | Antworten   


Powered by Command Board 1.0 - Beta 2.0 © 2004-08 PHP-Einfach | Impressum | Datenschutz