Tạo captcha trong ASP.NET

Bài viết này sẽ hướng dẫn các bạn tạo một hình captcha để ngăn chặn spam từ các ip-bot

Trong các website thường xuyên sử dụng chức năng tương tác với người dùng nặc danh (anonymous) bằng các comment thì việc tạo mã captcha là hết sức cần thiết. Ở đây tôi lấy ví dụ là mục bình luận của website này

Trước tiên các bạn using một số thư viện cần thiết sau:

using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Text;
 
Các bạn sử dụng đoạn code sau để tạo mã captcha
 
void CreateCaptcha()
        {
            {
                //Các Font sẽ sử dụng khi vẽ captcha
                string[] fontsArray = { "Arial Black" };
                //Số lượng kí tự của captcha
                const byte LENGTH = 5;
                //Mảng các ký tự sẽ sử dụng để vẽ CAPTCHA
                const string characterArray = "123456789ABCDEFGHJKLMNPQRSTUVWXYZ";
                //Tạo đối tượng ảnh BITMAP
                using (Bitmap imageBMP = new Bitmap(300, 80))
                {
                    using (Graphics g = Graphics.FromImage(imageBMP))
                    {
                        //Tạo nền cho ảnh CAPTCHA. Theo đoạn code bên dưới thì nền sẽ có màu trắng
                        g.FillRegion(Brushes.White, g.Clip);
                        //Tạo đối tượng chứa chuỗi captcha
                        StringBuilder strCaptcha = new StringBuilder();
                        Random rand = new Random();
                        for (int i = 0; i < LENGTH; i++)
                        {
                            //Lấy một kí tự ngẫu nhiên trong mảng chars 
                            string str = characterArray[rand.Next(characterArray.Length)].ToString();
                            strCaptcha.Append(str);
                            //Chọn một font ngẫu nhiên chọn từ mảng fonts 
                            Font font = new Font(fontsArray[rand.Next(fontsArray.Length)], 30, FontStyle.Bold | FontStyle.Bold);
                            // Vẽ kí tự đó ra ảnh tại vị trí tọa độ trục hoành x tăng dần theo i, vị trí trục tung y ngẫu nhiên 
                            // từ 2-20. Màu chữ là màu Chocolate
                            g.DrawString(str, font, Brushes.Red, i * 50 + 20, rand.Next(2, 20));
                            font.Dispose();
                        }
                        //Lưu lại thông tin captcha trong session 
                        //Session["captcha"] = strCaptcha.ToString();
                        cookieCaptcha = new HttpCookie("cookieCaptcha", strCaptcha.ToString());
                        Response.Cookies.Add(cookieCaptcha);
                        cookieCaptcha.Expires = DateTime.Now.AddHours(3);
                        //Lưu ảnh CAPTCHA vào thư mục captcha với tên ảnh dựa theo địa chỉ IP 
                        string path = "media/icon/capchacomment.gif";
                        cookieCaptchaURL = new HttpCookie("cookieCaptchaURL", path);
                        Response.Cookies.Add(cookieCaptchaURL);
                        cookieCaptchaURL.Expires = DateTime.Now.AddHours(18);
                        imageBMP.Save(Server.MapPath("") + "/" + path, ImageFormat.Gif);
                        captcha.ImageUrl = "~/"+path;
                        
                    }
                }
            }
        }

Bài viết này mình dùng cookie để lưu lại giá trị captcha tạo ra nên các bạn nhớ khai báo các biến cookie sau

HttpCookie cookieCaptcha, cookieCaptchaURL;

Web hosting by Somee.com