Hướng dẫn tạo Captcha trong ASP.NET

Published by Duong Linh on

Hướng dẫn tạo Captcha trong ASP.NET

CAPTCHA là công cụ giúp ngăn chặn phần mềm máy tính thực hiện một loạt các tác vụ tự động, làm giảm chất lượng dịch vụ của một hệ thống sẵn có.

CAPTCHA được viết tắt bởi “Completely Automated Public Turing test to tell Computers and Humans Apart”,  ra đời nhằm ngăn chặn các phần mềm máy tính thực hiện một loạt các tác vụ tự động, làm giảm chất lượng dịch vụ của một hệ thống sẵn có. CAPTCHA được sử dụng nhiều trong các dịch vụ thương mại điện tử hoặc các mạng xã hội, diễn đàn.

Hôm nay, Hanoi-Aptech xin giới thiệu với bạn cách tạo CAPTCHA trong ASP.NET sử dụng ngôn ngữ C#.

Ghi chú: Để có thể sử dụng nhiều lần trong một dự án, bạn có thể tạo một WebUserControl chứa CAPTCHA này.

Bước 1: Mở Visual Studio và  tạo một WebSite mới.

Sau khi hoàn tất, chọn “Add New Item” > “Web User Control” > Đặt tên cho control là CAPTCHA.ascx

Hướng dẫn tạo Captcha trong ASP.NET

Bước 2: Mở tệp CAPTCHA.ascx và nhập dòng code sau:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="CAPTCHA.ascx.cs" Inherits="CAPTCHA" %>
<asp:Image ID="Image1" runat="server" Height="100px" Width="200px" />

Bước 3: Mở tệp CAPTCHA.ascx.cs và nhập và đoạn code sau:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class CAPTCHA : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //Các Font sẽ sử dụng khi vẽ captcha
            string[] fontsArray = { "Arial Black", "Lucida Sans Unicode", "Time New Roman" };
            //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 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
            //Tạo đối tượng ảnh BITMAP
            using (Bitmap imageBMP = new Bitmap(200, 50))
            {
                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)], 14, FontStyle.Strikeout | FontStyle.Italic);
                        // 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.Chocolate, i*15+20, rand.Next(2,20));
                        font.Dispose();
                    }
                    //Lưu lại thông tin captcha trong session 
                    Session["captcha"] = strCaptcha.ToString();
                    //Lưu ảnh CAPTCHA vào thư mục captcha với tên ảnh dựa theo địa chỉ IP 
                    string path = "Captcha/" + Request.UserHostAddress + ".gif";
                    imageBMP.Save(Server.MapPath("") + "/" + path, ImageFormat.Gif);
                    Image1.ImageUrl = path;
                }
            }
        }
    }
}

Tải mã nguồn CAPTCHA .
Mật khẩu giải nén: aptech.vn

Chúc các bạn thành công !

Dương Linh