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?
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();
?>
Um im Anschluss zu prüfen, ob beim absenden des Formulars der richtige Wert eingegeben wurde, könntest du diesen Ansatz verwenden:
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.";
}
?>
Du kannst dieses Snippet frei nutzen, auch kommerziell. Ein Link zu meiner Webseite wäre als Dankeschön toll. Vielen Dank! :)
Fehler entdeckt? Schreib mir!
Werbung
Du suchst einen günstigen Anbieter für Webhosting? Netcup hat alles, was du suchst!
Sichere dir jetzt einen 5€-Gutschein für Neukunden!