Création d'un Captcha en asp.net C#
Comment créer un Captcha en asp.net C# pour sécuriser un formulaire afin de ne pas être utilisé par des logiciels robot ?
Dans la page .aspx (HTML) :
<asp:TextBox ID="txtCaptchaCode" runat="server" style="width:208px;padding:5px;" placeholder="Recopiez le code ci-dessous"></asp:TextBox><div style="height:10px;"></div>
<asp:Image ID="imgCaptchaImage" runat="server" />
<div style="height:20px;"></div>
<asp:Button id="envoyer" runat="server" Text="Envoyer" onclick="envoyer_Click"></asp:Button>
Dans la page .aspx.cs :
Dans les using :
using System.Drawing;using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
Avant la procédure Page_Load :
private string captchaText;private int width = 150;
private int height = 45;
private Random rnd = new Random();
Dans la procédure Page_Load :
if (!IsPostBack){
captchaText = generateCaptchaCode(5);
this.Session["captchaCode"] = captchaText;
imgCaptchaImage.ImageUrl = "data:image/png;base64," +Convert.ToBase64String(generateCaptchaImage());
Ajout de ces deux procédures dans la page :
private string generateCaptchaCode(int charCount){
string s = "";
for (int i = 0; i < charCount; i++)
{
int a = r.Next(3);
int chr;
switch (a)
{
case 0:
chr = r.Next(0, 9);
s = s + chr.ToString();
case 1:
chr = r.Next(65, 90);
s = s + Convert.ToChar(chr).ToString();
break;
case 2:
chr = r.Next(97, 122);
s = s + Convert.ToChar(chr).ToString();
break;
}
}
return s;
}
private byte[] generateCaptchaImage()
{
Bitmap bitmap = new Bitmap(width, height, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(bitmap);
Rectangle rect = new Rectangle(0, 0, width, height);
HatchBrush hatchBrush = new HatchBrush(HatchStyle.DottedGrid, System.Drawing.ColorTranslator.FromHtml("#E6EB52"), System.Drawing.ColorTranslator.FromHtml("#E6EB52"));
g.FillRectangle(hatchBrush, rect);
hatchBrush = new HatchBrush(HatchStyle.Divot, System.Drawing.ColorTranslator.FromHtml("#A6AB32"), System.Drawing.ColorTranslator.FromHtml("#7490A0"));
for (int i = 0; i < (int)(rect.Width * rect.Height / 50F); i++)
{
int x = rnd.Next(width);
int y = rnd.Next(height);
int w = rnd.Next(10);
int h = rnd.Next(10);
g.FillEllipse(hatchBrush, x, y, w, h);
}
GraphicsPath graphicPath = new GraphicsPath();
graphicPath.AddString(captchaText, FontFamily.GenericMonospace, (int)FontStyle.Bold, 40, rect, null);
hatchBrush = new HatchBrush(HatchStyle.Divot, System.Drawing.ColorTranslator.FromHtml("#000000"), System.Drawing.ColorTranslator.FromHtml("#446090"));
g.FillPath(hatchBrush, graphicPath);
hatchBrush.Dispose();
g.Dispose();
System.IO.MemoryStream ms = new System.IO.MemoryStream();
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] byteImage = ms.ToArray();
return byteImage;
}
Évènement de l'appui sur le bouton Envoyer :
protected void envoyer_Click(object sender, EventArgs e){
if (txtCaptchaCode.Text == this.Session["captchaCode"].ToString())
{
retour.Text = "Votre message a bien été envoyé.";
}
else
{
string csname1 = "RemarqueScript";
Type cstype = this.GetType();
ClientScriptManager cs = Page.ClientScript;
string cstext1 = "alert(\"Le code n'est pas le bon.\");";
cs.RegisterStartupScript(cstype, csname1, cstext1, true);
}
}
Commentaires
Enregistrer un commentaire