Kategorien
PHP

PHP Rechen Captcha – Addieren und Subtrahieren

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>