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;