Ein Rechen-Captcha zu programmieren mit einfachen Rechenaufgaben ist erstaunlich einfach, es braucht nur 2 kleine Funktionen und schon kann man den User munter seine Mathematik-Kenntnisse testen lassen:
Features:
- Addition
- Subtraktion
- Zahlen von 1 bis 13
- sichere Zufallszahlen
Der Code lässt sich beliebig erweitern: Eine Möglichkeit der Sicherung wäre: Man benutzt deutsche Akzente für die Wörter im $words-Array, wie eens, zwee, dree usw…, damit würde man es den Spam-Bots noch schwieriger machen.
Beispiel Rechenaufgaben:
drei + vier = ?
zehn – vier = ?
Der Code
session_start();
function getCaptureCalculationText()
{
$num = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13);
$words = array("eins", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht", "neun", "zehn", "elf", "zwölf", "dreizehn");
mt_srand((double)microtime() * 1000000);
$first = mt_rand(0, 12);
$second = mt_rand(0, 12);
if (mt_rand(0, 1) == 0 || $first < $second) {
//addieren
$ergebnis = $num[$first] + $num[$second];
$showcode = $words[$first] . " + " . $words[$second] . " = ";
} else {
//subtrahieren
$ergebnis = $num[$first] - $num[$second];
$showcode = $words[$first] . " - " . $words[$second] . " = ";
}
$_SESSION['myCalculationCapture'] = $ergebnis;
return $showcode;
}
function isCorrectUserInputCapture($userInput)
{
return $_SESSION['myCalculationCapture'] == $userInput;
}
Beispiel-Code:
Achtung, wichtig ist, dass die Funktion getCaptureCalculationText() nach der Funktion isCorrectUserInputCapture() aufgerufen wird.
<?php
if (!isCorrectUserInputCapture($_POST['special_message'])) {
$formErrors['captcha'] = true;
}
?>
<li>
Anti Spam Quiz: <?php echo getCaptureCalculationText() ?>?
</li>
<li>
<input type="text" name="special_message" id="special_message"
kontakt-error" : "" ?>">
</li>
