Code-Snippets » Captcha mit Mathe-Aufgabe

Captcha mit Mathe-Aufgabe

Hier biete ich dir mein animiertes Captcha, welches ich auch im Kontaktformular auf dieser Seite im Einsatz habe!

Möchtest du lieber ein Captcha mit zufälligen Buchstaben?

Code anklicken zum kopieren

<?php
session_start();

// Zufällige Zahlen generieren
$zahl1 = rand(1, 9);
$zahl2 = rand(1, 9);

// Das richtige Ergebnis berechnen
$richtigesErgebnis = $zahl1 + $zahl2;

// Die richtige Antwort in der Session speichern
$_SESSION['captcha_ergebnis'] = $richtigesErgebnis;

// Bild erstellen
$frameCount = 30; // Anzahl der Frames im GIF
$gif = new Imagick();

for ($frame = 0; $frame < $frameCount; $frame++) {
$bild = imagecreatetruecolor(100, 37);
$farbeHintergrund = imagecolorallocate($bild, 255, 255, 255);
$farbeText = imagecolorallocate($bild, 0, 0, 0);

// Hintergrund füllen und animiertes Rauschen hinzufügen
imagefill($bild, 0, 0, $farbeHintergrund);
for ($i = 0; $i < 200; $i++) {
$x = rand(0, 99);
$y = rand(0, 36);
imagesetpixel($bild, $x, $y, $farbeText);
}

// Text auf das Bild schreiben
$text = "$zahl1 + $zahl2 = ?";
imagestring($bild, 5, 10, 10, $text, $farbeText);

// Frame zum GIF hinzufügen
ob_start();
imagegif($bild);
$frameData = ob_get_clean();
$imageFrame = new Imagick();
$imageFrame->readImageBlob($frameData);
$imageFrame->setImageDelay(20); // Verzögerung zwischen den Frames (in Hundertstelsekunden)
$gif->addImage($imageFrame);
imagedestroy($bild);
}

// GIF ausgeben
header('Content-Type: image/gif');
echo $gif->getImagesBlob();
?>

Code anklicken zum kopieren


Um im Anschluss zu prüfen, ob beim absenden des Formulars der richtige Wert eingegeben wurde, könntest du diesen Ansatz verwenden:

Code anklicken zum kopieren

<?php
function pruefeCaptcha($benutzerEingabe) {
session_start();

// Überprüfen, ob die Sitzung für das Captcha-Ergebnis existiert
if (isset($_SESSION['captcha_ergebnis'])) {
// Das in der Sitzung gespeicherte richtige Ergebnis abrufen
$richtigesErgebnis = $_SESSION['captcha_ergebnis'];

// Überprüfen, ob die Benutzereingabe mit dem richtigen Ergebnis übereinstimmt
if ($benutzerEingabe == $richtigesErgebnis) {
// Die Eingabe ist korrekt
return true;
}
}

// Die Eingabe ist falsch oder es gibt keine Sitzung
return false;
}

// Beispiel-Nutzung:
$benutzerEingabe = $_POST['captcha_eingabe']; // Benutzereingabe aus Formularfeld abrufen
if (pruefeCaptcha($benutzerEingabe)) {
echo "Captcha korrekt gelöst.";
} else {
echo "Captcha falsch gelöst. Bitte versuchen Sie es erneut.";
}
?>

Code anklicken zum kopieren


Du darfst dieses Snippet kostenlos und uneingeschränkt nutzen, einschließlich kommerzieller Zwecke! Ich würde mich sehr darüber freuen, wenn du als kleine Geste der Anerkennung einen Link zu meiner Webseite auf deiner eigenen Seite platzieren könntest. Vielen Dank! :)