"> آموزش و نمونه سورس کپچا درASP.NET و سی شارپ

آموزش و نمونه سورس کپچا درASP.NET و سی شارپ

کپچا در ASP.NETتا به حال به این فکر کرده اید که چگونه میتوانید یک کپچا درASP.NET برای web form خود ایجاد کنید؟ خب این کار بسیار آسان است و بیش از ۱۰۰ خط کد ندارد. این نمونه از کپچا که به شما نشان خواهم داد نوع فونت ، استایل فونت ، رنگ فونت ، جهت فونت ، استایل پس زمینه و رنگ پس زمینه ی رندوم دارد. در ادامه ی مطلب نمونه هایی که میتوان با استفاده از آن ایجاد کرد آورده شده است …

کپچا در ASP.NETکپچا در ASP.NETکپچا در ASP.NET

 

 

کپچا در ASP.NETکپچا در ASP.NETکپچا در ASP.NET

 

 

بدون توضیح اضافه به سراغ ادامه کار میرویم.

گام اول : در پروژه ی وبتان یک Generic Handler که فایل با گسترش .ahsx است ، اضافه کنید. من از این تنها برای این دمو به منظور سادگی استفاده میکنم و همچنین اینکه این مورد مانند یک فایل aspx معمولی با دستور کامپایل میشود. به شما بستگی دارد که بخواهید یک DLL ایجاد کنید (که بهتر میباشد) تا بتوانید از آن در پروژه های دیگر خود نیز بهره ببرید. برای این کار بر روی پروژه در قسمت Solution Explorer راست کلیک کنید .

کپچا در ASP.NET

سپس نوع فایل را انتخاب کنید ، در این نمونه این یک Generic Handler است.

کپچا در ASP.NET

گام دوم : زمانی که آن را افزودید میتوانید شروع به کدزنی کنید ، در زیر نمونه کد هایی که شما میتوانید آنها را کپی کنید ، آورده شده است.

<%@ WebHandler Language="C#" %>
using System;
using System.Web;
using System.Drawing;
using System.IO;
using System.Web.SessionState;
using System.Drawing.Imaging;
using System.Drawing.Text;
using System.Drawing.Drawing2D;
public class Captcha : IHttpHandler, IReadOnlySessionState
{
public void ProcessRequest(HttpContext context)
{
int iHeight = 80;
int iWidth = 190;
Random oRandom = new Random();

int[] aBackgroundNoiseColor = new int[] { 150, 150, 150 };
int[] aTextColor = new int[] { 0, 0, 0 };
int[] aFontEmSizes = new int[] { 15, 20, 25, 30, 35 };

string[] aFontNames = new string[]
{
 "Comic Sans MS",
 "Arial",
 "Times New Roman",
 "Georgia",
 "Verdana",
 "Geneva"
};
FontStyle[] aFontStyles = new FontStyle[]
{  
 FontStyle.Bold,
 FontStyle.Italic,
 FontStyle.Regular,
 FontStyle.Strikeout,
 FontStyle.Underline
};
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, 
	HatchStyle.LightUpwardDiagonal, HatchStyle.LightVertical,
 HatchStyle.Max, HatchStyle.Min, HatchStyle.NarrowHorizontal, 
	HatchStyle.NarrowVertical, HatchStyle.OutlinedDiamond,
 HatchStyle.Plaid, HatchStyle.Shingle, HatchStyle.SmallCheckerBoard, 
	HatchStyle.SmallConfetti, HatchStyle.SmallGrid,
 HatchStyle.SolidDiamond, HatchStyle.Sphere, HatchStyle.Trellis, 
	HatchStyle.Vertical, HatchStyle.Wave, HatchStyle.Weave,
 HatchStyle.WideDownwardDiagonal, HatchStyle.WideUpwardDiagonal, HatchStyle.ZigZag
};

//Get Captcha in Session
string sCaptchaText = context.Session["Captcha"].ToString();

//Creates an output Bitmap
Bitmap oOutputBitmap = new Bitmap(iWidth, iHeight, PixelFormat.Format24bppRgb);
Graphics oGraphics = Graphics.FromImage(oOutputBitmap);
oGraphics.TextRenderingHint = TextRenderingHint.AntiAlias;

//Create a Drawing area
RectangleF oRectangleF = new RectangleF(0, 0, iWidth, iHeight);
Brush oBrush = default(Brush);

//Draw background (Lighter colors RGB 100 to 255)
oBrush = new HatchBrush(aHatchStyles[oRandom.Next
	(aHatchStyles.Length-1)], Color.FromArgb((oRandom.Next(100, 255)), 
	(oRandom.Next(100, 255)), (oRandom.Next(100, 255))), Color.White);
oGraphics.FillRectangle(oBrush, oRectangleF);

System.Drawing.Drawing2D.Matrix oMatrix = new System.Drawing.Drawing2D.Matrix();
int i = 0;
for (i = 0; i <= sCaptchaText.Length - 1; i++)
{
 oMatrix.Reset();
 int iChars = sCaptchaText.Length;
 int x = iWidth / (iChars + 1) * i;
 int y = iHeight / 2;

 //Rotate text Random
 oMatrix.RotateAt(oRandom.Next(-40, 40), new PointF(x, y));
 oGraphics.Transform = oMatrix;

 //Draw the letters with Random Font Type, Size and Color
 oGraphics.DrawString
 (
 //Text
 sCaptchaText.Substring(i, 1),
 //Random Font Name and Style
 new Font(aFontNames[oRandom.Next(aFontNames.Length - 1)], 
	aFontEmSizes[oRandom.Next(aFontEmSizes.Length-1)], 
	aFontStyles[oRandom.Next(aFontStyles.Length - 1)]),  
 //Random Color (Darker colors RGB 0 to 100)
 new SolidBrush(Color.FromArgb(oRandom.Next(0, 100), 
	oRandom.Next(0, 100), oRandom.Next(0, 100))),
 x,
 oRandom.Next(10, 40)
 );
 oGraphics.ResetTransform();
}

MemoryStream oMemoryStream = new MemoryStream();
oOutputBitmap.Save(oMemoryStream, System.Drawing.Imaging.ImageFormat.Png);
byte[] oBytes = oMemoryStream.GetBuffer();

oOutputBitmap.Dispose();
oMemoryStream.Close();

context.Response.BinaryWrite(oBytes);
context.Response.End();
}
public bool IsReusable
{
get
{
 return false;
}
}
}

مقداری توضیحات در طول این بخش آورده شده است تا شما دچار سردرگمی نشوید اما شما همچنان میتوانید در صورت نیاز از من سوال کنید.

گام سوم : بر روی صفحه ی aspx خود image مانند زیر اضافه کنید :

<asp:Image ID="imgCaptcha" ImageUrl="Captcha.ashx" runat="server" />

اگر متوجه شده باشید همانند آن است که از آن مانند یک عکس استفاده میکنید. به این دلیل است که این یک تصویر است که توسط آن handler رندر شده که شما میتوانید در قسمت پایین کد کپچا آن را مشاهده کنید.

context.Response.BinaryWrite(oBytes);

گام چهارم : متنی در آن قسمت کپچا در Code Behind خود وارد کنید:

private void SetCaptchaText()
{
 Random oRandom = new Random();
 int iNumber = oRandom.Next(100000, 999999);
 Session["Captcha"] = iNumber.ToString();
}

نکته : ممکن است که متوجه شده باشید که من تنها از اعداد در این جا استفاده میکنم. این آسان است زیرا از گیج شدن کاربران بین l و۱ یا ۰ و O و کاراکتر های مشابه دیگر جلوگیری میکند.

نکته : با تنطیم کردن session شما همچنین متن رندر شده در کپچا را نیز تنظیم میکنید و اگر نگاهی به کد های کپچا بیاندازید در این قسمت خواهد بود :

string sCaptchaText = context.Session["Captcha"].ToString();

 گام پنجم : آن مقدار را با آنچه که کاربر در قسمت textbox وارد نموده مقایسه کنید :

if (Session["Captcha"].ToString() != txtCaptcha.Text.Trim())
 {
 Response.Redirect("Failed.aspx");
 }
 else
 {
 Response.Redirect("Success.aspx");
 }

تبریک ! شما اکنون کپچای خود را ایجاد کرده اید.

کپچا در ASP.NET

  • پسورد: www.mspsoft.com
داریوش فرخی

داریوش فرخی هستم از سال 92 شروع به یادگیری برنامه نویسی و از سال 93 در بخش برنامه نویسی و تولید محتوای سایت mspsoft.com مشغول هستم. فعالیتم نیز بیشتر در زمینه های برنامه نویسی با سی شارپ و asp.net بوده است. اوقات فراغتم را هم غالبا با تماشای فیلم یا بازی های کامپیوتری پر میکنم .

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

کدیشن ! مارکت پروژه های برنامه نویسی راه اندازی شدیه توکه پا بریم ببینم