日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

ASP.NET3种验证码[转]

發(fā)布時(shí)間:2025/5/22 asp.net 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET3种验证码[转] 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.GSC_WebControlLibrary 這是在網(wǎng)上找到的一個(gè)控件,非常好用。但是效果不是特別好(見(jiàn)下圖。
)雖然容易使用,所有的屬性都可以像控件一樣設(shè)置,但是可用性不太高。用戶不能自定義,而且看起來(lái)這個(gè)驗(yàn)證碼效果不太好。
效果:

2.用一個(gè)頁(yè)面生成圖片,另一個(gè)頁(yè)面調(diào)用,驗(yàn)證碼存入cookie,調(diào)用時(shí)取cookie對(duì)比驗(yàn)證.這個(gè)用戶就可以按自己的喜好更改效果和驗(yàn)證碼的長(zhǎng)度了 (:

效果如圖:


代碼如下:
CheckCode.aspx using?System;
using?System.Data;
using?System.Configuration;
using?System.Collections;
using?System.Web;
using?System.Web.Security;
using?System.Web.UI;
using?System.Web.UI.WebControls;
using?System.Web.UI.WebControls.WebParts;
using?System.Web.UI.HtmlControls;
using?System.Drawing;
using?System.Drawing.Drawing2D;
using?System.Drawing.Imaging;

public?partial?class?Tools_CheckCode?:?System.Web.UI.Page
{
????
protected?void?Page_Load(object?sender,?EventArgs?e)
????
{
????????
this.CreateCheckCodeImage(GenerateCheckCode());

????}


????
private?string?GenerateCheckCode()
????
{
????????
int?number;
????????
char?code;
????????
string?checkCode?=?String.Empty;

????????System.Random?random?
=?new?Random();

????????
for?(int?i?=?0;?i?<?5;?i++)
????????
{
????????????number?
=?random.Next();

????????????
if?(number?%?2?==?0)
????????????????code?
=?(char)('0'?+?(char)(number?%?10));
????????????
else
????????????????code?
=?(char)('A'?+?(char)(number?%?26));

????????????checkCode?
+=?code.ToString();
????????}


????????Response.Cookies.Add(
new?HttpCookie("CheckCode",?checkCode));

????????
return?checkCode;
????}


????
private?void?CreateCheckCodeImage(string?checkCode)
????
{
????????
if?(checkCode?==?null?||?checkCode.Trim()?==?String.Empty)
????????????
return;

????????System.Drawing.Bitmap?image?
=?new?System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length?*?12.5)),?22);
????????Graphics?g?
=?Graphics.FromImage(image);

????????
try
????????
{
????????????
//生成隨機(jī)生成器
????????????Random?random?=?new?Random();

????????????
//清空?qǐng)D片背景色
????????????g.Clear(Color.White);

????????????
//畫圖片的背景噪音線
????????????for?(int?i?=?0;?i?<?25;?i++)
????????????
{
????????????????
int?x1?=?random.Next(image.Width);
????????????????
int?x2?=?random.Next(image.Width);
????????????????
int?y1?=?random.Next(image.Height);
????????????????
int?y2?=?random.Next(image.Height);

????????????????g.DrawLine(
new?Pen(Color.GreenYellow),?x1,?y1,?x2,?y2);
????????????}


????????????Font?font?
=?new?System.Drawing.Font("Verdana",?12,?(System.Drawing.FontStyle.Bold?|?System.Drawing.FontStyle.Italic));
????????????System.Drawing.Drawing2D.LinearGradientBrush?brush?
=?new?System.Drawing.Drawing2D.LinearGradientBrush(new?Rectangle(0,?0,?image.Width,?image.Height),?Color.Blue,?Color.DarkRed,?1.2f,?true);
????????????g.DrawString(checkCode,?font,?brush,?
2,?2);

????????????
//畫圖片的前景噪音點(diǎn)
????????????for?(int?i?=?0;?i?<?80;?i++)
????????????
{
????????????????
int?x?=?random.Next(image.Width);
????????????????
int?y?=?random.Next(image.Height);

????????????????image.SetPixel(x,?y,?Color.FromArgb(random.Next()));
????????????}


????????????
//畫圖片的邊框線
????????????g.DrawRectangle(new?Pen(Color.Red),?0,?0,?image.Width?-?1,?image.Height?-?1);

????????????System.IO.MemoryStream?ms?
=?new?System.IO.MemoryStream();
????????????image.Save(ms,?System.Drawing.Imaging.ImageFormat.Gif);
????????????Response.ClearContent();
????????????Response.ContentType?
=?"image/Gif";
????????????Response.BinaryWrite(ms.ToArray());
????????}

????????
finally
????????
{
????????????g.Dispose();
????????????image.Dispose();
????????}

????}



}


然后在需要使用的頁(yè)面引用:
UseCheckCode.aspx
<img?src="Tools/CheckCode.aspx"?alt="驗(yàn)證碼"?style="width:?60px;?height:?24px"?/>
3.用web handler生成圖片。這個(gè)其實(shí)和前面的意思大致差不多,調(diào)用方法也基本和2一樣,不同的是,他的驗(yàn)證碼是存入Session的。供學(xué)習(xí)參考。

效果圖如下:


ValidateImageHandler.ashx
%@?WebHandler?Language="C#"?Class="ValidateImageHandler"?%>

using?System;
using?System.Web;
using?System.Web.SessionState;
using?System.Drawing;
using?System.Drawing.Imaging;
using?System.Text;

/**////?<summary>
///?ValidateImageHandler?生成網(wǎng)站驗(yàn)證碼功能
///?</summary>

public?class?ValidateImageHandler?:?IHttpHandler,?IRequiresSessionState
{
????
int?intLength?=?5;???????????????//長(zhǎng)度
????string?strIdentify?=?"Identify";?//隨機(jī)字串存儲(chǔ)鍵值,以便存儲(chǔ)到Session中
????public?ValidateImageHandler()
????
{????????
????}


????
/**////?<summary>
????
///??生成驗(yàn)證圖片核心代碼
????
///?</summary>
????
///?<param?name="hc"></param>

????public?void?ProcessRequest(HttpContext?hc)
????
{
????????
//設(shè)置輸出流圖片格式
????????hc.Response.ContentType?=?"image/gif";
????????
????????Bitmap?b?
=?new?Bitmap(200,?60);
????????Graphics?g?
=?Graphics.FromImage(b);
????????g.FillRectangle(
new?SolidBrush(Color.YellowGreen),?0,?0,?200,?60);
????????Font?font?
=?new?Font(FontFamily.GenericSerif,?48,?FontStyle.Bold,?GraphicsUnit.Pixel);
????????Random?r?
=?new?Random();

????????
//合法隨機(jī)顯示字符列表
????????string?strLetters?=?"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
????????StringBuilder?s?
=?new?StringBuilder();
????????
????????
//將隨機(jī)生成的字符串繪制到圖片上
????????for?(int?i?=?0;?i?<?intLength;?i++)
????????
{
????????????s.Append(strLetters.Substring(r.Next(
0,?strLetters.Length?-?1),?1));
????????????g.DrawString(s[s.Length?
-?1].ToString(),?font,?new?SolidBrush(Color.Blue),?i?*?38,?r.Next(0,?15));
????????}


????????
//生成干擾線條
????????Pen?pen?=?new?Pen(new?SolidBrush(Color.Blue),?2);
????????
for?(int?i?=?0;?i?<?10;?i++)
????????
{
????????????g.DrawLine(pen,?
new?Point(r.Next(0,?199),?r.Next(0,?59)),?new?Point(r.Next(0,?199),?r.Next(0,?59)));
????????}

????????b.Save(hc.Response.OutputStream,?ImageFormat.Gif);
????????hc.Session[strIdentify]?
=?s.ToString();?//先保存在Session中,驗(yàn)證與用戶輸入是否一致
????????hc.Response.End();
???
????}

????
????
/**////?<summary>
????
///?表示此類實(shí)例是否可以被多個(gè)請(qǐng)求共用(重用可以提高性能)
????
///?</summary>

????public?bool?IsReusable
????
{
????????
get
????????
{
????????????
return?true;
????????}

????}

}

總結(jié)

以上是生活随笔為你收集整理的ASP.NET3种验证码[转]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。