Simples Text Captcha mit ASP.NET
Es gibt viele Captcha Controls im Web zu finden.
Trotzdem möchte ich hier eine einfache Variante vorstellen.
Diese Variante benutzt ein Label, um eine Rechnung darzustellen, bspw. "5 + 6 =".
Eine Textbox fürs Resultat, ein Button und ein Statuslabel wir im Beispiel verwendet.
Ich benutze einen ähnlichen Code auf http://www.peterbucher.ch/, bis jetzt habe ich noch nie Spam bekommen :)
Viel Spass damit...
ASPX Code:
<h1>SimpleCaptcha</h1>
<asp:Label ID="lblCaptcha" AssociatedControlID="txtCaptcha" runat="server" />
<asp:TextBox ID="txtCaptcha" runat="server" />
<asp:Button ID="btnSubmit" Text="Abschicken" runat="server" />
<asp:Label ID="lblStatus" runat="server" />
Codebehind:
using System;
using System.Drawing;
namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e) {
// Textbox Inhalt zuweisen
// Resultat in die Session Speichern
if(!this.IsPostBack) {
Random r = new Random();
int num1 = r.Next(1, 15);
int num2 = r.Next(1, 15);
this.lblCaptcha.Text = string.Format("{0} + {1} =",
num1.ToString(),
num2.ToString());
this.Session["captcha"] = num1 + num2;
} else {
// Status anzeigen
if(this.ValidateCaptcha()) {
this.lblStatus.Text = "Eingabe korrekt";
this.lblStatus.ForeColor = Color.Green;
} else {
this.lblStatus.Text = "Eingaben fehlerhaft";
this.lblStatus.ForeColor = Color.Red;
}
}
}
/// <summary>
/// Validiert die Eingabe
/// </summary>
/// <returns>true / false - Eingabe richtig oder falsch</returns>
protected bool ValidateCaptcha() {
object session = this.Session["captcha"];
object input = this.txtCaptcha.Text;
if(session != null && input != null) {
int s, i;
return (int.TryParse(session.ToString(), out s)
&&
int.TryParse(input.ToString(), out i)
&& s.Equals(i));
}
return false;
}
}
}
Beispielprojekt zum Download: