ایجاد یک تصویرcaptcha در ASP.Net
شنبه 9 اردیبهشت 1396در این مقاله می خواهیم برای بهینه کردن ثبت نام کاربران ، یک تصویر captcha بسازیم و در پروژه از آن استفاده کنیم.
در این مقاله نحوه ایجاد 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 به شما نشان داده می شود.
و اگر اطلاعات وارد شده درست باشد ، میتواند به صفجه دیگری بنا بر نیاز شما فرستاده شود.
- ASP.net
- 2k بازدید
- 2 تشکر