Neuigkeiten:

still alive...

Hauptmenü

Captcha Klasse

Begonnen von Powie, 10. Januar 2006, 21:19:04

Vorheriges Thema - Nächstes Thema

Powie

Um das im Gästebuch und eventuell auch an anderen Stellen in Zukunft zu benutzen hab ich mal ne Klasse konstruiert um einen http://de.wikipedia.org/wiki/Captcha\" rel=\"external nofollow\">Captcha zu realisieren.
Das Bild wird simpel angezeigt mit:
 

showCaptcha();
?>

 
 
Überprüft werden kann es auf dem folgenden Formular simpel mit:


Wenn jemand Ideen dazu hat..... Bitte her damit.
pcap_code      = \"\";
$this->pcap_font      = \"captcha.ttf\";
$this->pcap_bg        = \"captcha.png\";
$this->pcap_fontsize  = 24;
$this->pcap_len       = 6;
if ($this->pcap_code == \"\" ) {
           $this->newCode();
} else {
    $_SESSION[\'pcaptchacode\'] = $this->pcap_code;
}
}
// PHP 4 Contructor
function pCaptcha( $pcap_code = \"\" )
{
$this->__construct( $pcap_code ) ;
}
function showCaptcha ()
{
    $img_format = \'png\';
    //Daten des BG
    $imgsize = GetImageSize($this->pcap_bg);
       switch($imgsize[2]):
       case 1 : $bg = ImageCreateFromGIF($this->pcap_bg);
           break;
       case 2 : $bg = ImageCreateFromJPEG($this->pcap_bg);
           break;
       case 3 : $bg = ImageCreateFromPNG($this->pcap_bg);
           break;
       endswitch;
    //Textgrösse
    $pos = imagettfbbox($this->pcap_fontsize,0,$this->pcap_font,$this->pcap_code);
    //var_dump($pos);
       $width  = intval(abs($pos[0])+abs($pos[2])+6);
       $height = intval(abs($pos[1]+$pos[7])+6);
       $posx   = 3;
       $posy   = $height - 3;
    $pcap_im = imagecreatetruecolor($width,$height);
       imagecopyresampled($pcap_im,$bg,0,0,0,0,$width,$height,ImageSX($bg),ImageSY($bg));
    //Text einfügen
      // colors
      $color_white    = imagecolorallocate($pcap_im, 0xFF, 0xFF, 0xFF);
      $color_black    = imagecolorallocate($pcap_im, 0x00, 0x00, 0x00);
       imagettftext($pcap_im,$this->pcap_fontsize,0,$posx,$posy,$color_black,$this->pcap_font,$this->pcap_code);
       imageinterlace($pcap_im,false);
       $pcap_image = \'image\'.$img_format;
      // sending image
    header(\'Content-type: image/\'.$img_format);
       $pcap_image($pcap_im);
}
function newCode ()
{
    if ( !isset($_SESSION[\'pcaptchacode\']) ) {
        $iid= md5(uniqid(rand()));
        $iid= substr($iid,0,$this->pcap_len);
        $_SESSION[\'pcaptchacode\'] = $iid;
        $this->pcap_code = $iid;
    } else {
        $this->pcap_code = $_SESSION[\'pcaptchacode\'];
    }
}
function delCode()
{
    if ( isset($_SESSION[\'pcaptchacode\']) ) {
        unset ( $_SESSION[\'pcaptchacode\'] );
    }
}
}
?>


d-day

ich weiss, es ist PEAR, aber um schönere Passwörter zu generieren wäre es doch ganz nett:
anstatt:


$iid= md5(uniqid(rand()));
$iid= substr($iid,0,$this->pcap_len);

 
 
müsste dann
 


require_once \"Text/Password.php\";
$iid = Text_Password::create($this->pcap_len, \'pronounceable\');

 
da rein.
pronounceable heisst: für einen englischsprachigen Menschen aussprechbar.
es gibt noch
unpronounceable
passwords based on a given string
Gruß,
D-Day
http://www.couro.de\" rel=\"external nofollow\">Couro do Brasil

smith

Hallo Powie,
Nette Features wären z.B. noch:
- Zufällige Schriftfarbe für jedes Zeichen
- Zufällige Schriftart  für jedes Zeichen
- Zufällige Schriftgröße für jedes Zeichen
- Zufällige Schriftwinkel für jedes Zeichen (0 bis +/- 30 Grad)
- Unterschiedlicher Abstand der Zeichen voneinander sowohl in der Höhe als auch in der Breite
- Variabel generierter Hintergrund
- Verzerrte Zeichen
Also in etwas die Funktionen die die http://www.nogajski.de/horst/php/captcha/index.php\" rel=\"external nofollow\">HN CAPTCHA Class bietet.
Gruß Smith

Powie

das ist immer eine Frage der notwendigkeit, ich glaube um den \"Zweck\" zu erfüllen reicht die aktelle Version absolut vollkommen aus.
Ich persönlich ärgere mich oft über Captcha Grafiken bei denen man raten muss um bestimmte Zeichen zu erkennen.

all your base are belong to us / Discord