nog-een-captcha
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
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
<?php
# Door: Pieter van Linschoten
# Datum: 7 Maart 2007
# E-mail: webmaster @ lapidi . nl
# Website: http://www.lapidi.nl
# Tevens origineel beschikbaar: www.phphulp.nl
# Rechten: GNU General Public Licence
# Voorbeeld: http://www.lapidi.nl/captcha.php
session_start();
// Bepaal of script de code moet verwerken of nieuwe code aanmaken
if(!isset($_GET['action'])){
// Initialiseer array digits.
$digits = array();
$digits[0] = 'A'; $digits[1] = 'B'; $digits[2] = 'C';
$digits[3] = 'D'; $digits[4] = 'E'; $digits[5] = 'F';
$digits[6] = 'G'; $digits[7] = 'H'; $digits[8] = 'I';
$digits[9] = 'J'; $digits[10] = 'K'; $digits[11] = 'L';
$digits[12] = 'M'; $digits[13] = 'N';
$digits[14] = 'P'; $digits[15] = 'Q'; $digits[16] = 'R';
$digits[17] = 'S'; $digits[18] = 'T'; $digits[19] = 'U';
$digits[20] = 'V'; $digits[21] = 'W'; $digits[22] = 'X';
$digits[23] = 'Y'; $digits[24] = 'Z'; $digits[25] = '1';
$digits[26] = '2'; $digits[27] = '3'; $digits[28] = '4';
$digits[29] = '5'; $digits[30] = '6'; $digits[31] = '7';
$digits[32] = '8'; $digits[33] = '9';
// Om verwarring te voorkomen 0 en O niet inbegrepen.
$iDigits = 8; // Uit hoeveel tekens moet de Captcha bestaan?
// Initialiseren van variabelen. Strings (v) en Integers (i).
// Ik zet er ook bij waarovor ik ze gebruik. Dit om latere verwarring te vermijden.
$iRand = 0; // Random integer: Bepaald welk teken in de captcha komt
$iCount = 0; // Forloop teller
$vChars = NULL; // String die captcha bijhoud
$Char = NULL; // Enkele nummer, verandert steeds
$vNum = NULL; // Alle nummers uit de captcha achter elkaar
$iNum = 0; // Telt nummers
$vLetter = NULL;// Alle letters uit de captcha achter elkaar
$iLetter = 0; // Telt letters
$iAction = 0; // Random integer: Bepaald welke vraag wordt gesteld
$vAnswer = NULL;// String met antwoord op desbetreffende vraag
$vQuestion = NULL;// String met eerste gedeelte van de vraag
$_SESSION['sAnswer'] = NULL; // Sessievariabele met het antwoord
// Selecteer $iDigits maal een RANDOM string en stel de antwoorden voor de mogelijke vragen samen.
for($iCount=0;$iCount<$iDigits;$iCount++){
$iRand = rand(0,count($digits)-1);
$Char = $digits[$iRand];
$vChars .= $Char;
if(is_numeric($Char)){
// Houdt cijfers in de captcha achter elkaar en aantal cijfers bij
$vNum .= $Char;
$iNum++;
}else{
// Houdt letters in de captcha achter elkaar en aantal letters bij
$vLetter .= $Char;
$iLetter++;
}
}
// Bepaal wat voor vraag er wordt gesteld, om bots te verwarren.
$iAction = rand(0,3);
switch($iAction){
case 0:
$vQuestion = 'Hoeveel cijfers';
$vAnswer = $iNum;
break;
case 1:
$vQuestion = 'Hoevel letters ';
$vAnswer = $iLetter;
break;
case 2:
$vQuestion = 'Welke cijfers';
$vAnswer = $vNum;
break;
case 3:
$vQuestion = 'Welke letters';
$vAnswer = $vLetter;
break;
}
// Sla het antwoord op in een sessie, die afgeschermt zijn voor bots.
$_SESSION['sAnswer'] = $vAnswer;
// Captcha + Vraag
echo "<p><b>" . $vChars . "</b></p>";
echo "<p><u>" . $vQuestion . "</u> bevat het bovenstaande dikgedrukte gedeelte?</p>";
// Formuliertje:
echo "<form method=post action='". $_SERVER['PHP_SELF'] ."?action=check'>";
echo "<input type='text' name='code'";
echo "<input type='submit' value='Controleer'>";
echo "</form>";
echo "<p>N.B.: Alle tekens moeten op volgorde van links naar rechts en zijn hoofdlettergevoelig!</p>";
}else{
// Mogelijke verwerking:
// Controleer of de variabele niet leeg is.
if(empty($_SESSION['sAnswer'])){
echo "<p><b>Helaas!</b> Er is geen geldig antwoord, aangezien er niets is gevraagd.</p>"; // Lege string > foutmelding
// Kijk of het antwoord klopt.
}elseif($_SESSION['sAnswer'] == $_POST['code']){
echo "<p><b>Goed!</b> Je bent een mens of een HELE slimme bot!</p>"; // Goed antwoord > Hier moet dus de verwerking komen!
// Indien fout antwoord.
}else{
echo "<p><b>Helaas!</b> Geen toegang voor BOTS en Analfabeten!</p>"; // Fout antwoord > foutmelding
}
// Altijd handig om het nogmaals te proberen :)
echo "<p><a href='" . $_SERVER['PHP_SELF'] . "'>Vorige</a></p>";
session_destroy();
}
?>
# Door: Pieter van Linschoten
# Datum: 7 Maart 2007
# E-mail: webmaster @ lapidi . nl
# Website: http://www.lapidi.nl
# Tevens origineel beschikbaar: www.phphulp.nl
# Rechten: GNU General Public Licence
# Voorbeeld: http://www.lapidi.nl/captcha.php
session_start();
// Bepaal of script de code moet verwerken of nieuwe code aanmaken
if(!isset($_GET['action'])){
// Initialiseer array digits.
$digits = array();
$digits[0] = 'A'; $digits[1] = 'B'; $digits[2] = 'C';
$digits[3] = 'D'; $digits[4] = 'E'; $digits[5] = 'F';
$digits[6] = 'G'; $digits[7] = 'H'; $digits[8] = 'I';
$digits[9] = 'J'; $digits[10] = 'K'; $digits[11] = 'L';
$digits[12] = 'M'; $digits[13] = 'N';
$digits[14] = 'P'; $digits[15] = 'Q'; $digits[16] = 'R';
$digits[17] = 'S'; $digits[18] = 'T'; $digits[19] = 'U';
$digits[20] = 'V'; $digits[21] = 'W'; $digits[22] = 'X';
$digits[23] = 'Y'; $digits[24] = 'Z'; $digits[25] = '1';
$digits[26] = '2'; $digits[27] = '3'; $digits[28] = '4';
$digits[29] = '5'; $digits[30] = '6'; $digits[31] = '7';
$digits[32] = '8'; $digits[33] = '9';
// Om verwarring te voorkomen 0 en O niet inbegrepen.
$iDigits = 8; // Uit hoeveel tekens moet de Captcha bestaan?
// Initialiseren van variabelen. Strings (v) en Integers (i).
// Ik zet er ook bij waarovor ik ze gebruik. Dit om latere verwarring te vermijden.
$iRand = 0; // Random integer: Bepaald welk teken in de captcha komt
$iCount = 0; // Forloop teller
$vChars = NULL; // String die captcha bijhoud
$Char = NULL; // Enkele nummer, verandert steeds
$vNum = NULL; // Alle nummers uit de captcha achter elkaar
$iNum = 0; // Telt nummers
$vLetter = NULL;// Alle letters uit de captcha achter elkaar
$iLetter = 0; // Telt letters
$iAction = 0; // Random integer: Bepaald welke vraag wordt gesteld
$vAnswer = NULL;// String met antwoord op desbetreffende vraag
$vQuestion = NULL;// String met eerste gedeelte van de vraag
$_SESSION['sAnswer'] = NULL; // Sessievariabele met het antwoord
// Selecteer $iDigits maal een RANDOM string en stel de antwoorden voor de mogelijke vragen samen.
for($iCount=0;$iCount<$iDigits;$iCount++){
$iRand = rand(0,count($digits)-1);
$Char = $digits[$iRand];
$vChars .= $Char;
if(is_numeric($Char)){
// Houdt cijfers in de captcha achter elkaar en aantal cijfers bij
$vNum .= $Char;
$iNum++;
}else{
// Houdt letters in de captcha achter elkaar en aantal letters bij
$vLetter .= $Char;
$iLetter++;
}
}
// Bepaal wat voor vraag er wordt gesteld, om bots te verwarren.
$iAction = rand(0,3);
switch($iAction){
case 0:
$vQuestion = 'Hoeveel cijfers';
$vAnswer = $iNum;
break;
case 1:
$vQuestion = 'Hoevel letters ';
$vAnswer = $iLetter;
break;
case 2:
$vQuestion = 'Welke cijfers';
$vAnswer = $vNum;
break;
case 3:
$vQuestion = 'Welke letters';
$vAnswer = $vLetter;
break;
}
// Sla het antwoord op in een sessie, die afgeschermt zijn voor bots.
$_SESSION['sAnswer'] = $vAnswer;
// Captcha + Vraag
echo "<p><b>" . $vChars . "</b></p>";
echo "<p><u>" . $vQuestion . "</u> bevat het bovenstaande dikgedrukte gedeelte?</p>";
// Formuliertje:
echo "<form method=post action='". $_SERVER['PHP_SELF'] ."?action=check'>";
echo "<input type='text' name='code'";
echo "<input type='submit' value='Controleer'>";
echo "</form>";
echo "<p>N.B.: Alle tekens moeten op volgorde van links naar rechts en zijn hoofdlettergevoelig!</p>";
}else{
// Mogelijke verwerking:
// Controleer of de variabele niet leeg is.
if(empty($_SESSION['sAnswer'])){
echo "<p><b>Helaas!</b> Er is geen geldig antwoord, aangezien er niets is gevraagd.</p>"; // Lege string > foutmelding
// Kijk of het antwoord klopt.
}elseif($_SESSION['sAnswer'] == $_POST['code']){
echo "<p><b>Goed!</b> Je bent een mens of een HELE slimme bot!</p>"; // Goed antwoord > Hier moet dus de verwerking komen!
// Indien fout antwoord.
}else{
echo "<p><b>Helaas!</b> Geen toegang voor BOTS en Analfabeten!</p>"; // Fout antwoord > foutmelding
}
// Altijd handig om het nogmaals te proberen :)
echo "<p><a href='" . $_SERVER['PHP_SELF'] . "'>Vorige</a></p>";
session_destroy();
}
?>