captcha
de pagina waarop je de captcha wil hebben
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
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
<?php
session_start(); //even zorgen dat we met sessies kunnen gaan werken
error_reporting(E_ALL);
ini_set('display_errors', 1);
?>
<html>
<head>
<script language="javascript" type="text/javascript">
function nieuw()
{
document.getElementById('captcha').innerHTML = '<img src="afbeelding.php?' + Math.floor(Math.random()* 999999 + 1 ) + '" height="45px" width="108px" />';
}
</script>
</head>
<body>
<div id="lipsum">
<p> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In mi enim, consectetuer a, imperdiet vitae, pulvinar a, sapien. Quisque urna purus, ornare sed, iaculis ut, iaculis id, erat. Vivamus laoreet velit sit amet urna. Etiam porta. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum accumsan tincidunt turpis. Ut lobortis nisi eget erat. Integer tincidunt. Donec id dolor ac leo ultrices molestie. Aenean ligula. Fusce pretium, orci quis ultricies dictum, velit velit tempus mi, sed porttitor lacus dolor in mauris. Aliquam sed pede. Aenean neque. Nam iaculis posuere nisl. Ut non nibh a mauris congue faucibus. Quisque quis urna vitae sem tempus scelerisque. Mauris orci neque, malesuada nec, interdum ac, mattis ut, tortor. Proin ullamcorper. Maecenas mi. </p>
<p>Nunc at velit sed mauris rhoncus cursus. Ut id lorem. Pellentesque sem. Phasellus eu massa eu mi semper scelerisque. Morbi posuere tincidunt sapien. Mauris dolor mauris, pretium sed, venenatis nec, rutrum non, erat. Nullam pellentesque tellus nec quam. Mauris metus justo, elementum eu, ornare quis, blandit eu, nulla. Proin aliquam sodales quam. Sed condimentum diam nec nisi. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam in elit quis enim eleifend porttitor. Fusce in augue nec massa vulputate aliquet. Morbi et sem. Aliquam sodales eleifend sem. Quisque eleifend. Maecenas mollis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Etiam tempor quam at tellus. Etiam quis risus. </p>
</div>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') //als er gepost is
{
/*
Hier kun je afhandeling zetten die ook moet gebeuren als de code niet goed is.
Hier kun je dus bijvoorbeeld je formulier in een sessie zetten zodat alles wordt onthouden
Zelf zet hier de geposte naam in een sessie.
TIP -- TIP -- TIP
Zet hier geen POST to SESSION foreach neer!
*/
if(!isset($_SESSION['naam']))
{
$_SESSION['naam'] = $_POST['naam'];
}
if(!empty($_POST['cap']) && md5($_POST['cap']) == $_SESSION['string']) //als de geposte code niet leeg is, en gelijk is aan de md5 van de sessie
{
/*
hier kun je je eigen formulier afhandeling zetten,
ik doe nu de afhandeling van de naam, maar deze kun je uiteraard verwijderen
en voor in de plaats zetten wat je zelf wilt
*/
if(isset($_SESSION['naam'])) //als de sessie naam is geset
{
echo 'Je naam is: '.$_SESSION['naam']; //echo de naam
unset($_SESSION); //en unset de sessie
}
else //als de sessie niet is geset
{
echo 'Je naam is: '.$_POST['naam']; //echo de geposte naam
unset($_SESSION); //en unset de sessie
}
}
else //als de code verkeerd is
{
echo 'verkeerde code<br /><br />';
echo '<form action="#" method="post"><label>
<span id="captcha">
<img src="afbeelding.php" height="45px" width="108px" />
</span>
<input type="text" size="10" maxlength="10" name="cap" />
</label>
<br />
<br />
<input type="submit" value="Voer uit!" />
</form>
<br />
<a onclick="javascript: nieuw()" style="cursor: pointer; text-decoration: underline;">nieuwe afbeelding</a>
'; //echo dat het formulier verkeerd is en geef een nieuwe code
}
}
else //als er niet gesubmit is
{
//geef dan het gewone formulier
?>
<form action="#" method="post">
<label>Naam: <input type="text" name="naam" /></label><br />
<br />
<label>
<span id="captcha">
<img src="afbeelding.php" height="45" width="108" /> </span>
<input type="text" size="10" maxlength="10" name="cap" />
</label>
<br />
<br />
<input type="submit" value="Voer uit!" />
</form>
<br />
<a onClick="javascript: nieuw()" style="cursor: pointer; text-decoration: underline;">nieuwe afbeelding</a>
<?php
}
?>
</body>
</html>
session_start(); //even zorgen dat we met sessies kunnen gaan werken
error_reporting(E_ALL);
ini_set('display_errors', 1);
?>
<html>
<head>
<script language="javascript" type="text/javascript">
function nieuw()
{
document.getElementById('captcha').innerHTML = '<img src="afbeelding.php?' + Math.floor(Math.random()* 999999 + 1 ) + '" height="45px" width="108px" />';
}
</script>
</head>
<body>
<div id="lipsum">
<p> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In mi enim, consectetuer a, imperdiet vitae, pulvinar a, sapien. Quisque urna purus, ornare sed, iaculis ut, iaculis id, erat. Vivamus laoreet velit sit amet urna. Etiam porta. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum accumsan tincidunt turpis. Ut lobortis nisi eget erat. Integer tincidunt. Donec id dolor ac leo ultrices molestie. Aenean ligula. Fusce pretium, orci quis ultricies dictum, velit velit tempus mi, sed porttitor lacus dolor in mauris. Aliquam sed pede. Aenean neque. Nam iaculis posuere nisl. Ut non nibh a mauris congue faucibus. Quisque quis urna vitae sem tempus scelerisque. Mauris orci neque, malesuada nec, interdum ac, mattis ut, tortor. Proin ullamcorper. Maecenas mi. </p>
<p>Nunc at velit sed mauris rhoncus cursus. Ut id lorem. Pellentesque sem. Phasellus eu massa eu mi semper scelerisque. Morbi posuere tincidunt sapien. Mauris dolor mauris, pretium sed, venenatis nec, rutrum non, erat. Nullam pellentesque tellus nec quam. Mauris metus justo, elementum eu, ornare quis, blandit eu, nulla. Proin aliquam sodales quam. Sed condimentum diam nec nisi. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam in elit quis enim eleifend porttitor. Fusce in augue nec massa vulputate aliquet. Morbi et sem. Aliquam sodales eleifend sem. Quisque eleifend. Maecenas mollis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Etiam tempor quam at tellus. Etiam quis risus. </p>
</div>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') //als er gepost is
{
/*
Hier kun je afhandeling zetten die ook moet gebeuren als de code niet goed is.
Hier kun je dus bijvoorbeeld je formulier in een sessie zetten zodat alles wordt onthouden
Zelf zet hier de geposte naam in een sessie.
TIP -- TIP -- TIP
Zet hier geen POST to SESSION foreach neer!
*/
if(!isset($_SESSION['naam']))
{
$_SESSION['naam'] = $_POST['naam'];
}
if(!empty($_POST['cap']) && md5($_POST['cap']) == $_SESSION['string']) //als de geposte code niet leeg is, en gelijk is aan de md5 van de sessie
{
/*
hier kun je je eigen formulier afhandeling zetten,
ik doe nu de afhandeling van de naam, maar deze kun je uiteraard verwijderen
en voor in de plaats zetten wat je zelf wilt
*/
if(isset($_SESSION['naam'])) //als de sessie naam is geset
{
echo 'Je naam is: '.$_SESSION['naam']; //echo de naam
unset($_SESSION); //en unset de sessie
}
else //als de sessie niet is geset
{
echo 'Je naam is: '.$_POST['naam']; //echo de geposte naam
unset($_SESSION); //en unset de sessie
}
}
else //als de code verkeerd is
{
echo 'verkeerde code<br /><br />';
echo '<form action="#" method="post"><label>
<span id="captcha">
<img src="afbeelding.php" height="45px" width="108px" />
</span>
<input type="text" size="10" maxlength="10" name="cap" />
</label>
<br />
<br />
<input type="submit" value="Voer uit!" />
</form>
<br />
<a onclick="javascript: nieuw()" style="cursor: pointer; text-decoration: underline;">nieuwe afbeelding</a>
'; //echo dat het formulier verkeerd is en geef een nieuwe code
}
}
else //als er niet gesubmit is
{
//geef dan het gewone formulier
?>
<form action="#" method="post">
<label>Naam: <input type="text" name="naam" /></label><br />
<br />
<label>
<span id="captcha">
<img src="afbeelding.php" height="45" width="108" /> </span>
<input type="text" size="10" maxlength="10" name="cap" />
</label>
<br />
<br />
<input type="submit" value="Voer uit!" />
</form>
<br />
<a onClick="javascript: nieuw()" style="cursor: pointer; text-decoration: underline;">nieuwe afbeelding</a>
<?php
}
?>
</body>
</html>
afbeelding.php
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
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
<?php
error_reporting(E_ALL); //error reporting op all
session_start(); //zorgen dat we met sessies kunnen werken
header("Content-type: image/png");
$hoofdletters = FALSE; //hoofdletters of niet TRUE voor ja, FALSE voor nee
$aantal = 6; //aantal karakters
$fonts = array('poorrichard.ttf','tccm.ttf','times.ttf'); //een array met lettertypes, deze kun je zelf vullen
$vert = 10; //aantal verticale lijnen
if($hoofdletters != FALSE) //als je wel hoofdletters wil
{
$chars = array_merge(range('a', 'z'), range('A', 'Z'), range(1, 9), range(1, 9)); //maak een array cijfers aan met hoofdletters
}
else //geen hoofdletters?
{
$chars = array_merge(range('a', 'z'), range(1, 9), range(1, 9)); //dan een array zonder hoofdletters
}
$verify_string = NULL; //verfy string wordt zometeen gevuld, en maken we hier dus aan met waarde NULL
for ($rand = 0; $rand < $aantal; $rand++) //een for loopje welke herhaalt voor het aantal karakters
{
$random = rand(0, count($chars) -1); //een pak een willekeurige karakter uit de array
$verify_string .= $chars[$random]; //en voeg deze toe aan de string verfy string
}
$afbsize = $aantal * 18; //de breedte van de afbeelding is het aantal karakters * 18
$strsize = $afbsize - 1; //en de streep lengte is de abeeldings lengte -1
$_SESSION['string'] = md5($verify_string); //de sessie met de code is een md5 van de code
$img = imagecreate($afbsize, 45);
$white = imagecolorallocate($img, 255, 255, 255); //maak even het kleurtje wit aan
$black = imagecolorallocate($img, 0, 0, 0); //en zwart
$grey = imagecolorallocate($img, 81, 81, 81); //en grijs
imagefill($img, 0, 0, $white); //geef de afbeelding een witte achtergrond
imageline($img, 0, 0, 0, 44, $black); //een zwart lijntje links
imageline($img, 0, 0, $strsize, 0, $black); //een zwart lijntje boven
imageline($img, $strsize, 0, $strsize, 45, $black); //een zwart lijntje rechts
imageline($img, 0, 44, $strsize, 44, $black); //en een zwart lijntje onder
for($i = 0; $i < $vert; $i++) //een for loopje voor verticale lijnen
{
$wil = imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255)); //creeer een willekeurige kleur
imageline($img, rand(2, $strsize), 1, rand(2, $strsize), 44, $wil); //en een willekeurig lijntje met die willekeurige kleur
}
for ($i = 0; $i < $aantal; $i++) //en ook eentje voor de letters
{
$wil = imagecolorallocate($img, rand(40,255), rand(40,255), rand(40,255)); //creeer wederom een willekeurige kleur
$plaats = $i * 16 + 6; //zet de letter even op de goede plaats
imagettftext($img,
19,
rand(-20,20), //willekeurige rotatie
$plaats, //plaats horizontaal
rand(20,40), //random plaats verticaal
$wil, //willekeurige kleur
$fonts[array_rand($fonts)], //willekeurig lettertype
$verify_string[$i]); //met de letter
}
$wil = imagecolorallocate($img, rand(0,245), rand(0,245), rand(0,245)); //random kleur
imageline($img, 1, rand(2, 16), $strsize, rand(2, 16), $wil); //lijntje op het bovenste deel van de afbeelding
$wil = imagecolorallocate($img, rand(0,245), rand(0,245), rand(0,245)); //en nog een random kleur
imageline($img, 1, rand(17, 33), $strsize, rand(17, 33), $wil); //en nog een lijntje op het onderste deel
imagepng($img); //creeer afbeelding
imagedestroy($img); //verwijder afbeelding
?>
error_reporting(E_ALL); //error reporting op all
session_start(); //zorgen dat we met sessies kunnen werken
header("Content-type: image/png");
$hoofdletters = FALSE; //hoofdletters of niet TRUE voor ja, FALSE voor nee
$aantal = 6; //aantal karakters
$fonts = array('poorrichard.ttf','tccm.ttf','times.ttf'); //een array met lettertypes, deze kun je zelf vullen
$vert = 10; //aantal verticale lijnen
if($hoofdletters != FALSE) //als je wel hoofdletters wil
{
$chars = array_merge(range('a', 'z'), range('A', 'Z'), range(1, 9), range(1, 9)); //maak een array cijfers aan met hoofdletters
}
else //geen hoofdletters?
{
$chars = array_merge(range('a', 'z'), range(1, 9), range(1, 9)); //dan een array zonder hoofdletters
}
$verify_string = NULL; //verfy string wordt zometeen gevuld, en maken we hier dus aan met waarde NULL
for ($rand = 0; $rand < $aantal; $rand++) //een for loopje welke herhaalt voor het aantal karakters
{
$random = rand(0, count($chars) -1); //een pak een willekeurige karakter uit de array
$verify_string .= $chars[$random]; //en voeg deze toe aan de string verfy string
}
$afbsize = $aantal * 18; //de breedte van de afbeelding is het aantal karakters * 18
$strsize = $afbsize - 1; //en de streep lengte is de abeeldings lengte -1
$_SESSION['string'] = md5($verify_string); //de sessie met de code is een md5 van de code
$img = imagecreate($afbsize, 45);
$white = imagecolorallocate($img, 255, 255, 255); //maak even het kleurtje wit aan
$black = imagecolorallocate($img, 0, 0, 0); //en zwart
$grey = imagecolorallocate($img, 81, 81, 81); //en grijs
imagefill($img, 0, 0, $white); //geef de afbeelding een witte achtergrond
imageline($img, 0, 0, 0, 44, $black); //een zwart lijntje links
imageline($img, 0, 0, $strsize, 0, $black); //een zwart lijntje boven
imageline($img, $strsize, 0, $strsize, 45, $black); //een zwart lijntje rechts
imageline($img, 0, 44, $strsize, 44, $black); //en een zwart lijntje onder
for($i = 0; $i < $vert; $i++) //een for loopje voor verticale lijnen
{
$wil = imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255)); //creeer een willekeurige kleur
imageline($img, rand(2, $strsize), 1, rand(2, $strsize), 44, $wil); //en een willekeurig lijntje met die willekeurige kleur
}
for ($i = 0; $i < $aantal; $i++) //en ook eentje voor de letters
{
$wil = imagecolorallocate($img, rand(40,255), rand(40,255), rand(40,255)); //creeer wederom een willekeurige kleur
$plaats = $i * 16 + 6; //zet de letter even op de goede plaats
imagettftext($img,
19,
rand(-20,20), //willekeurige rotatie
$plaats, //plaats horizontaal
rand(20,40), //random plaats verticaal
$wil, //willekeurige kleur
$fonts[array_rand($fonts)], //willekeurig lettertype
$verify_string[$i]); //met de letter
}
$wil = imagecolorallocate($img, rand(0,245), rand(0,245), rand(0,245)); //random kleur
imageline($img, 1, rand(2, 16), $strsize, rand(2, 16), $wil); //lijntje op het bovenste deel van de afbeelding
$wil = imagecolorallocate($img, rand(0,245), rand(0,245), rand(0,245)); //en nog een random kleur
imageline($img, 1, rand(17, 33), $strsize, rand(17, 33), $wil); //en nog een lijntje op het onderste deel
imagepng($img); //creeer afbeelding
imagedestroy($img); //verwijder afbeelding
?>