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>