Création d’un Captcha en asp.net C#

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) 

     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

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *