Jump to content
Sign in to follow this  
Powie

Captcha Klasse

Recommended Posts

Um das im Gästebuch und eventuell auch an anderen Stellen in Zukunft zu benutzen hab ich mal ne Klasse konstruiert um einen 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'] );
    }
}
}
?>

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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 HN CAPTCHA Class bietet.


Gruß Smith

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites
Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...