ایجاد یک تصویرcaptcha در ASP.Net

شنبه 9 اردیبهشت 1396

در این مقاله می خواهیم برای بهینه کردن ثبت نام کاربران ، یک تصویر captcha بسازیم و در پروژه از آن استفاده کنیم.

ایجاد یک تصویرcaptcha در ASP.Net

در این مقاله نحوه ایجاد captcha image را در یک برنامه asp.net بررسی می کنیم. در ابتدا باید یک پروژه asp.net بسازیم.

ویژوال استودیو 2015 را باز می کنیم و از منوی file ، گزینه new و سپس project را انتخاب می کنیم.پنجره ایجاد پروژه جدید باز می شودو شما می توانید نوع پروژه خود را انتخاب کنید. شما باید ASP.NET Web Application را انتخاب کنید.نام پروژه را انتخاب کنید و کلید ok را کلیک کنید.

در پنجره بعدی Web Forms را انتخاب کنید و کلید ok را کلیک کنید.

در اینجا یک پروژه پایه از نوع Web Form  ایجاد می شود. عکس  زیر نمایی از پروژه ایجاد شده شما را نشان می دهد.

فرم جدیدی به نام Register.aspx را به پروژه خود اضافه کنید. برای این کار روی نام پروژه کلیک راست کرده ، سپس گزینه add و پس از ان گزینه New Item را انتخاب کنید.

در پنجره نمایش داده شده از قسمت installed گزینه web و سپس آیتم Web Form with Master Pageرا انتخاب می کنیم.نام را وارد می کنیم و کلید ok را کلیک می کنیم.

در پنجره بعدی master page خود را انتخاب کنید و کلید ok را کلیک کنید.

برای ساخت captcha ما از یک ASP.NET page دیگر استفاده می کنیم. بدین صورت که در این صفحه captcha را می سازیم و در صفحه Register.aspx از آن استفاده می کنیم.

پس حالا صفحه Captcha.aspx را اضافه می کنیم و کدهای زیر را در آن وارد می کنیم

Captcha.aspx.cs

    using System;  
    using System.Collections.Generic;  
    using System.Drawing;  
    using System.Drawing.Drawing2D;  
    using System.Drawing.Imaging;  
    using System.Linq;  
    using System.Web;  
    using System.Web.UI;  
    using System.Web.UI.WebControls;  
    namespace CaptchaDemo  
    {  
        public partial class Captcha: System.Web.UI.Page  
        {  
            protected void Page_Load(object sender, EventArgs e)  
            {  
                Bitmap objBitmap = new Bitmap(130, 80);  
                Graphics objGraphics = Graphics.FromImage(objBitmap);  
                objGraphics.Clear(Color.White);  
                Random objRandom = new Random();  
                objGraphics.DrawLine(Pens.Black, objRandom.Next(0, 50), objRandom.Next(10, 30), objRandom.Next(0, 200), objRandom.Next(0, 50));  
                objGraphics.DrawRectangle(Pens.Blue, objRandom.Next(0, 20), objRandom.Next(0, 20), objRandom.Next(50, 80), objRandom.Next(0, 20));  
                objGraphics.DrawLine(Pens.Blue, objRandom.Next(0, 20), objRandom.Next(10, 50), objRandom.Next(100, 200), objRandom.Next(0, 80));  
                Brush objBrush =  
                    default (Brush);  
                //create background style  
                HatchStyle[] aHatchStyles = new HatchStyle[]  
                {  
                    HatchStyle.BackwardDiagonal, HatchStyle.Cross, HatchStyle.DashedDownwardDiagonal, HatchStyle.DashedHorizontal, HatchStyle.DashedUpwardDiagonal, HatchStyle.DashedVertical,  
                        HatchStyle.DiagonalBrick, HatchStyle.DiagonalCross, HatchStyle.Divot, HatchStyle.DottedDiamond, HatchStyle.DottedGrid, HatchStyle.ForwardDiagonal, HatchStyle.Horizontal,  
                        HatchStyle.HorizontalBrick, HatchStyle.LargeCheckerBoard, HatchStyle.LargeConfetti, HatchStyle.LargeGrid, HatchStyle.LightDownwardDiagonal, HatchStyle.LightHorizontal  
                };  
                //create rectangular area  
                RectangleF oRectangleF = new RectangleF(0, 0, 300, 300);  
                objBrush = new HatchBrush(aHatchStyles[objRandom.Next(aHatchStyles.Length - 3)], Color.FromArgb((objRandom.Next(100, 255)), (objRandom.Next(100, 255)), (objRandom.Next(100, 255))), Color.White);  
                objGraphics.FillRectangle(objBrush, oRectangleF);  
                //Generate the image for captcha  
                string captchaText = string.Format("{0:X}", objRandom.Next(1000000, 9999999));  
                //add the captcha value in session  
                Session["CaptchaVerify"] = captchaText.ToLower();  
                Font objFont = new Font("Courier New", 15, FontStyle.Bold);  
                //Draw the image for captcha  
                objGraphics.DrawString(captchaText, objFont, Brushes.Black, 20, 20);  
                objBitmap.Save(Response.OutputStream, ImageFormat.Gif);  
            }  
        }  
    }  

Register.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Register.aspx.cs" Inherits="CaptchaDemo.Register" %>  
  
  
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">  
    <table>  
        <tr>  
            <td colspan="2">User Registration  
            </td>  
        </tr>  
        <tr>  
            <td>Full Name  
            </td>  
            <td>  
                <asp:TextBox runat="server" ID="txtFullName"></asp:TextBox>  
            </td>  
        </tr>  
        <tr>  
            <td>Email Id  
            </td>  
            <td>  
                <asp:TextBox runat="server" ID="txtEmail"></asp:TextBox>  
            </td>  
        </tr>  
        <tr>  
            <td>User Name  
            </td>  
            <td>  
                <asp:TextBox runat="server" ID="txtUserName"></asp:TextBox>  
            </td>  
        </tr>  
        <tr>  
            <td>Password  
            </td>  
            <td>  
                <asp:TextBox runat="server" ID="txtPassword" TextMode="Password"></asp:TextBox>  
            </td>  
        </tr>  
        <tr>  
            <td>Verification Code  
            </td>  
            <td>  
               <asp:Image ID="Image2" runat="server" Height="55px" ImageUrl="~/Captcha.aspx" Width="186px" />  
                <br />  
                <asp:Label runat="server" ID="lblCaptchaMessage"></asp:Label>  
          
            </td>  
        </tr>  
        <tr>  
            <td>Enter Verifaction Code  
            </td>  
            <td>  
                <asp:TextBox runat="server" ID="txtVerificationCode"></asp:TextBox>  
            </td>  
        </tr>  
        <tr>  
            <td colspan="2">  
                <asp:Button runat="server" ID="btnSubmit" Text="Submit" OnClick="btnSubmit_Click" />  
            </td>  
        </tr>  
    </table>  
</asp:Content>

همانطور که می بینید ما صفحه captcha را همراه با یک عکس اضافه کرده ایم

که در نهایت با استفاده از آن صفحه زیر که مریوط به ثبت نام کاربران می شود را می سازیم

Register.aspx.cs

در اینجا مقدار وارد شده در تکست باکس  با session که مقدار captach image را نگهداری می کند مقایسه می شود. اگر دو مقدار یکسان باشد ، پس مقدار وارد شده درست است  و در غیر اینصورت مقدار وارد شده اشتباه است.

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Web;  
    using System.Web.UI;  
    using System.Web.UI.WebControls;  
    namespace CaptchaDemo  
    {  
        public partial class Register: System.Web.UI.Page  
        {  
            protected void Page_Load(object sender, EventArgs e)  
            {}  
            protected void btnSubmit_Click(object sender, EventArgs e)  
            {  
                if (txtVerificationCode.Text.ToLower() == Session["CaptchaVerify"].ToString())  
                {  
                    Response.Redirect("Default.aspx");  
                }  
                else  
                {  
                    lblCaptchaMessage.Text = "Please enter correct captcha !";  
                    lblCaptchaMessage.ForeColor = System.Drawing.Color.Red;  
                }  
            }  
        }  
    }  

Default.aspx

    <%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="CaptchaDemo._Default" %>  
        <asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">  
            <br />  
            <asp:Label runat="server" ID="lblCaptchaMessage" ForeColor="Green">  
            </asp:Label>  
        </asp:Content>  

Default.aspx.cs

    using System;  
    using System.Web.UI;  
    namespace CaptchaDemo  
    {  
        public partial class _Default: Page  
        {  
            protected void Page_Load(object sender, EventArgs e)  
            {  
                lblCaptchaMessage.Text = "You have entered correct captch code";  
                lblCaptchaMessage.ForeColor = System.Drawing.Color.Green;  
            }  
        }  
    }  

خب الان زمان اجرای پروژه است. برای اجرای پروژه کلید f5 را فشار دهید ، صفحه ثبت نام مانند عکس زیر باز می شود.

زمانی که شما یک مقدار اشتباه را در قسمت captch image وارد می کنید و کلید  ارسال را کلیک می کنید ، پیغام خطایی مبنی بر ورود اطلاعات اشتباه در قسمت captch image به شما نشان داده می شود.

و اگر اطلاعات وارد شده درست باشد ، میتواند به صفجه دیگری بنا بر نیاز شما فرستاده شود.

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید