figurencaptcha-nooit-onleesbaar

Gesponsorde koppelingen

PHP script bestanden

  1. figurencaptcha-nooit-onleesbaar

« Lees de omschrijving en reacties

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
<?php

/********************************************************\
*                                                        *
*                   © Herjan Treurniet                   *
*                  [email protected]                  *
*  Mag vrij gebruikt worden mits dit blokje blijf staan  *
*          en je je aan de GNU/GPL-regels houdt          *
*                                                        *
\********************************************************/

/********************************************************\
*                                                        *
*                         Config                         *
*                                                        *
\********************************************************/


$margin = 15; // Hoe groot moeten de figuurtjes zijn?
$rows = 2; // Hoeveel rijen wil je onder elkaar?
$space = 6; // Hoeveel ruimte wil je tussen de figuurtjes?
$blocks = 6; // Hoeveel figuurtjes wil je per rij?

//Alle waarden zijn in pixels!!

/********************************************************\
*                                                        *
*                      Einde config                      *
*                                                        *
\********************************************************/


if(isset($_GET['image'])) //Kijk of het plaatje gemaakt moet worden
    {
        
        header("Content-type: image/gif"); //Vertel de browser dat het een plaatje is
        session_start(); //Start de sessie
        
        $space = floor($space/2); //Bereken de ruimte tussen de blokjes
        $width = $blocks * ($margin+(2*$space)); //Bereken de totale breedte van het plaatje
        $height = $rows * ($margin+(2*$space)); //Bereken de totale hoogte van het plaatje
        $img = imagecreatetruecolor($width, $height); //Maak een plaatje
        $white = imagecolorallocate($img, 255, 255, 255); //Maak de kleur wit
        $colors['red'] = imagecolorallocate($img, 255, 0, 0); //Maak de kleur rood
        $colors['blue'] = imagecolorallocate($img, 0, 0, 255); //Maak de kleur blauw
        $colors['green'] = imagecolorallocate($img, 0, 200, 0); //Maak de kleur groen
        imagefill($img, 0, 0, $white); //Maak het plaatje helemaal wit
        $left = 0; //Zet de margin vanaf de linkerkant op 0
        $used = array(); //Maak een array waarin het script kan zetten hoe vaak hij elk figuur heeft gebruikt
        $row = 0; //Vertel het script dat hij bij de eerste rij is
        $rows--; //Haal 1 van het aantal rijen af, want het script begint bij 0 ipv 1
        $blocknr = 0; //Vertel het script dat het het 0de blokje van het geheel is
        
        for($i = 0; $i < $blocks; $i++) //Voer voor alle figuurtjes het volgende script uit
            {
                 $number = $_SESSION['captcha']['touse'][$blocknr]; //Haal uit de sessie wat voor figuurtje hij moet maken
                switch($number) //Voer wat expressions uit met $number
                    {
                        case
0: //Als $number 0 is
                            imagefilledrectangle($img, ($left+$space), ($row*($margin+(2*$space))+$space), ($left+$margin+$space), ($row*($margin+(2*$space))+$margin+$space), $colors[array_rand($colors)]); //Maak een vierkantje
                            $used['vierkantjes']++; //Stop in een variabele dat je vierkantje een keer gebruikt hebt
                            $last = 'vierkantjes'; //Zeg dat het laatstgebruikte figuurtje een vierkantje is
                        break; //Einde van "Als $number 0 is"


                        case 1: //Als $number 1 is
                            imagefilledellipse($img, ($left+$space+floor($margin/2)), ($row*($margin+(2*$space))+$space+floor($margin/2)), $margin, $margin, $colors[array_rand($colors)]); //Maak een rondje
                            $used['rondjes']++; //Stop in een variabele dat je rondje een keer gebruikt hebt
                            $last = 'rondjes'; //Zeg dat het laatstgebruikte figuurtje een rondje is
                        break; //Einde van "Als $number 1 is"


                        case 2: //Als $number 2 is
                            $points = array(
                                (
$left+$space), ($row*($margin+(2*$space))+$margin+$space),
                                (
$left+$space+floor($margin/2)), ($row*($margin+(2*$space))+$space),
                                (
$left+$margin+$space), ($row*($margin+(2*$space))+$margin+$space)
                            );
//Stop alle punten voor de driehoek in een array
                            imagefilledpolygon($img, $points, 3, $colors[array_rand($colors)]); //Maak een driehoekje
                            $used['driehoekjes']++; //Stop in een variabele dat je driehoekje een keer gebruikt hebt
                            $last = 'driehoekjes'; //Zeg dat het laatstgebruikte figuurtje een driehoekje is
                        break; //Einde van "Als $number 2 is"
                    } //Einde van de expressions voor $number
                $left += $margin+(2*$space); //Zet de left-margin van het plaatje omhoog
                if($i == ($blocks-1) && $row < $rows) //Als dit het laatste figuurtje van de rij is
                    {
                        $i = -1; //Vertel het script dat het het -1de figuurtje is (geen idee waarom het met 0 niet werkt :S)
                        $row++; //Vertel het script dat hij bij de volgende rij is
                        $left = 0; //Zet de margin vanaf de linkerkan weer op 0
                    }
                $blocknr++; //Vertel het script dat hij bij het volgende blokje is
            }
        
        //print_r($_SESSION);
        
        imagegif($img); //Output de image naar de browser
        imagedestroy($img); //Verwijder het plaatje uit het geheugen
        exit(); //Stop het script
    }

session_start(); //Start de sessie

if($_SERVER['REQUEST_METHOD'] == "POST") //Als je deze pagina opent door te posten
    {
        $howmany = $_POST['howmany']; //Stop het gegeven antwoord in een variabele
        if(!ctype_digit($_POST['howmany'])) //Kijk of het gegeven antwoord wel een getal is
            {
                echo 'Hee, wel een getal invoeren!!'; //Zoniet, laat het de client weten...
                exit(); //...en beëindig het script!
            }
        $answer = ''.$_SESSION['captcha']['used'][$_SESSION['captcha']['shape']].''; //Stop het goede antwoord als string in een variabele
        if($answer == $howmany) //Als het gegeven antwoord gelijk is aan het goede antwoord
            {
                echo 'Goed'; //Laat de client weten dat het antwoord goed is
            }
        else //Als het gegeven antwoord niet gelijk is aan het goede antwoord
            {
                echo 'Fout<br />
Je zei: '
.$howmany.'<br />
Het was: '
.$answer; //Laat de client weten dat het antwoord fout is en vertel hem het goede antwoord
            }
    }

else //Als je deze pagina niet bereikt door te posten
    {
        unset($_SESSION['captcha']); //Gooi de oude gegevens weg
         for($i = 0; $i < $blocks * $rows; $i++) //Voer voor elk figuurtje dit script uit:
             {
                $_SESSION['captcha']['touse'][$i] = rand(0, 2); //Bepaal welk figuurtje het wordt
                switch($_SESSION['captcha']['touse'][$i]) //Voer wat expressions uit met het figuurtje
                    {
                        case
0: //Als figuurtje 0 is
                            $used['vierkantjes']++; //Stop in een variabele dat er een vierkantje is gebruikt
                            $lastshape = 'vierkantjes'; //Stop in een variabele dat het laatstgebruikte figuurtje een vierkantje is
                        break; //Einde van "Als figuurtje 0 is"


                        case 1: //Als figuurtje 1 is
                            $lastshape = 'rondjes'; //Stop in een variabele dat er een rondje is gebruikt
                            $used['rondjes']++; //Stop in een variabele dat het laatstgebruikte figuurtje een rondje is
                        break; //Einde van "Als figuurtje 1 is"


                        case 2: //Als figuurtje 2 is
                            $lastshape = 'driehoekjes'; //Stop in een variabele dat er een driehoekje is gebruikt
                            $used['driehoekjes']++; //Stop in een variabele dat het laatstgebruikte figuurtje een driehoekje is
                        break; //Einde van "Als figuurtje 2 is"
                    } //Einde van de expressions voor het figuurtje
                if($i == ($blocks * $rows - 1)) //Als dit het laatste blokje is
                    {
                        $_SESSION['captcha']['shape'] = $lastshape; //Stop in de sessie wat het laatste figuurtje is
                    }
            }

        $_SESSION['captcha']['used'] = $used; //Stop in de sessie hoe vaak elk figuurtje gebruikt is
        echo '
<form method="post" action="'
.$_SERVER['PHP_SELF'].'">
    <img src="'
.$_SERVER['PHP_SELF'].'?image" alt="Plaatje" /><br /><br />
    Hoeveel '
.$_SESSION['captcha']['shape'].' zie je in het plaatje hierboven?
    <input type="text" name="howmany" maxlength="5" size="2" /><br /><br />
    <input type="submit" value="Volgende">
</form>
'
; //Echo het formulier
    }

?>

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.