Tạo Captcha trong ASP.NET

tao captcha aspnet
Captcha là một chuỗi kí tự đã bị làm biến dạng hoặc khó để đọc đi. Captcha thường được sử dụng để chống spam trên web. Có rất nhiều cách để đưa captcha vào web. Hôm nay mình sẽ hướng dẫn các bạn cách để tạo một captcha trong asp.net.
Bước 1: Tạo giao diện captcha

<div>
<asp:Image ID="imgCaptcha" runat="server"/>
<asp:ImageButton ID="imbReLoad" runat="server" ImageUrl="~/Images/tao captcha asp.net.jpg" OnClick="imbReLoad_Click" /><br />
<asp:TextBox runat="server" ID="txtCaptcha" />&nbsp;<br />
<asp:Button runat="server" ID="btnSubmit" Text="Đồng ý" OnClick="btnSubmit_Click" /> <br />
<asp:Label ID="lblMessage" runat="server" ForeColor="Red"></asp:Label>
</div>  

Bước 2: Tạo phương thức sinh captcha.

private void CreateCaptcha()
        {
            // font cho captcha
            string[] fonts ={ "Arial Black", "Lucida Sans Unicode", "Time New Roman" };
            // số lượng kí tự của captcha
            const byte LENGTH = 6;
            // chuỗi để lấy các kí tự sẽ sử dụng cho captcha
            const string chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijk lmnopqrstuvwxyz";
            // tạo ảnh bitmap.
            using (Bitmap bmp = new Bitmap(120, 30))
            {
                using (Graphics g = Graphics.FromImage(bmp))
                {
                    // Tạo nền cho ảnh dạng nhiều dấu chấm
                    HatchBrush brush = new HatchBrush(HatchStyle.DottedDiamond, Color.Green,Color.GreenYellow);
                    g.FillRegion(brush,g.Clip);
                    // Lưu chuỗi captcha trong quá trình tạo
                    StringBuilder strCaptcha = new StringBuilder();
                    Random rand = new Random();
                    for (int i = 0; i < LENGTH; i++)
                    {
                    // Lấy kí tự ngẫu nhiên từ mảng chars
                    string str = chars[rand.Next(chars.Length)].ToString();
                    strCaptcha.Append(str);
                    // Tạo font với tên font ngẫu nhiên chọn từ mảng fonts
                    Font font = new Font(fonts[rand.Next(fonts.Length)], 14, FontStyle.Strikeout | FontStyle.Italic);
                    // Lấy kích thước của kí tự
                    SizeF size= g.MeasureString(str,font);
                    // Vẽ kí tự đó ra ảnh tại vị trí tăng dần theo i, vị trí top ngẫu nhiên
                    g.DrawString(str, font,
                    Brushes.Chocolate,i*size.Width+3, rand.Next(2,10));
                    font.Dispose();
                    }
                    // Lưu captcha vào session
                    Session["captcha"]=strCaptcha.ToString();
                    // Lưu ảnh vào thư mục captcha với tên ảnh dựa theo IP
                    string path = "Captcha/" + Request.UserHostAddress + ".gif";
                    bmp.Save(Server.MapPath("") + "/" + path, ImageFormat.Gif);
                    imgCaptcha.ImageUrl = path;
                }
            }
Cách thức để tạo mình đã giải thích khá rõ trên code rồi.

Bước 3: Gọi phương thức sinh captcha.

protected void Page_Load(object sender, EventArgs e)
        {
             if (!IsPostBack)  
             CreateCaptcha();
        }    
        protected void imbReLoad_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        {
             CreateCaptcha();
             lblMessage.Text = "";
        }
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
              if (txtCaptcha.Text.Equals(Session["captcha"].ToString(), StringComparison.OrdinalIgnoreCase))
                lblMessage.Text = "Captcha chính xác";
              else
                lblMessage.Text = "Captcha chưa chính xác. Vui lòng nhập lại!";
        }
Và đây là kết quả:
tao captcha aspnet

tao captcha aspnet

 Các bạn có thể download source tại đây nha.
Các bạn có thể tham khảo thêm cách sử dụng recaptcha tại đây

1 nhận xét:

The given path's format is not supported.
bạn cho mình hỏi mình sử dụng visualstudio 12 thi bi lỗi nay..

Anonymous
lúc 21:18 28 tháng 2, 2013 comment-delete

Đăng nhận xét