RobinvanderVliet.nl

Captcha



Geplaatst op: 13 november 2011, 08:28:35 - 0 reacties

Dit is een klein script wat ik een tijdje geleden heb geschreven voor deze website.
Het leek me wel leuk om hem hier ook te plaatsen.

Creative Commons Licentie
Captcha van Robin van der Vliet is in licentie gegeven volgens een Creative Commons Naamsvermelding-NietCommercieel-GelijkDelen 3.0 Unported licentie.
Gebaseerd op een werk op robinvandervliet.nl.

Het script:
<?php

/**********************************\
| De instellingen staan hieronder! |
\**********************************/

$lines 5//Aantal lijnen getekent door de captcha heen.
$length 10//Aantal karakters geschreven in de captcha.
$font "AHGBold.ttf"//Het lettertype-bestand wat moet worden gebruikt voor de tekens, als je een array met fonts geeft dan kiest hij een willekeurig font of laat leeg voor een standaard font ($angle werkt dan niet).
$characters "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"//De karakters die kunnen worden gebruikt in de captcha.
$session "captcha_example"//De sessie waar de inhoud van de captcha is opgeslagen.
$angle = array(-25,25); //De minimale en maximale hoek.


/*********************************************************************************************************************************************\
| Captcha by Robin van der Vliet (http://robinvandervliet.nl) is licensed under                                                               |
| a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License (http://creativecommons.org/licenses/by-nc-sa/3.0/).           |
| Based on a work at robinvandervliet.nl (http://robinvandervliet.nl/projecten/3/).                                                           |
|                                                                                                                                             |
| CHANGE NOTHING BELOW THIS BOX UNLESS YOU KNOW WHAT YOU ARE DOING!                                                                           |
|*********************************************************************************************************************************************|
| Captcha van Robin van der Vliet is in licentie gegeven volgens                                                                              |
| een Creative Commons Naamsvermelding-NietCommercieel-GelijkDelen 3.0 Unported licentie (http://creativecommons.org/licenses/by-nc-sa/3.0/). |
| Gebaseerd op een werk op robinvandervliet.nl (http://robinvandervliet.nl/projecten/3/).                                                     |
|                                                                                                                                             |
| VERANDER NIKS ONDER DIT VAK TENZIJ JE WEET WAT JE DOET!                                                                                     |
\*********************************************************************************************************************************************/


if ($length 1)
{
    
trigger_error("Length must be 1 or higher",256);
}

if (!(!isset(
$font) || trim($font) == ""))
{
    if (
is_array($font))
    {
        for (
$i 0$i count($font); $i++)
        {
            if (!
file_exists($font[$i]))
            {
                
trigger_error("Font file (".$font[$i].") doesn't exists",256);
            }
        }

        
$font $font[rand(0,count($font))];
    }
    else
    {
        if (!
file_exists($font))
        {
            
trigger_error("Font file (".$font.") doesn't exists",256);
        }
    }
}

if (
strlen($characters) < 1)
{
    
trigger_error("No characters specified",256);
}

$img imagecreatetruecolor((20*$length+10),50);
imagefilledrectangle($img,0,0,(20*$length)+9,49,imagecolorallocate($img,rand(250,255),rand(250,255),rand(250,255)));

for (
$i 0$i $lines$i++)
{
    
imageline($img,rand(0,20*$length),rand(0,50),rand(0,20*$length),rand(0,50),imagecolorallocate($img,rand(0,10),rand(0,10),rand(0,10)));
}

for (
$i 0$i $length$i++)
{
    
$text[$i] = substr($characters,rand(0,strlen($characters)-1),1);
}

for (
$i 0$i $length$i++)
{
    if (!isset(
$font) || trim($font) == "")
    {
        
imagestring($img,5,$i*20+10,rand(-2,imagesy($img)-14),$text[$i],imagecolorallocate($img,rand(50,200),rand(50,200),rand(50,200)));
    }
    else
    {
        
imagettftext($img,12,rand($angle[0],$angle[1]),$i*20+10,rand(15,imagesy($img)-5),imagecolorallocate($img,rand(50,200),rand(50,200),rand(50,200)),$font,$text[$i]);
    }
}

session_start();
$_SESSION[$session] = implode($text);

header("Content-type: image/png");
imagepng($img,null,9);
imagedestroy($img);

?>

Alle velden zijn verplicht op het veld website na.
Uw email wordt niet op deze pagina getoond!