figurencaptcha-nooit-onleesbaar
Gesponsorde koppelingen
PHP script bestanden
Code (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
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
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
}
?>
/********************************************************\
* *
* © 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
}
?>