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)
{
Random r = new Random();
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();
break;
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);
}
}
Laisser un commentaire