您的位置:首页 > 编程语言 > ASP

ASP.NET 验证码

2007-03-01 13:41 393 查看
近日,为公司做网站,需要使用到验证码。于是到网络上搜索了一下,并没有发现特别满意的源代码,CSDN上的还可以,但蝈蝈不给呀(

) 。没有办法,只有自己动手了。

例:


下面是源程序,一般都有注释。没有必要再说了吧。


using System;


using System.Data;


using System.Configuration;


using System.Collections;


using System.ComponentModel;


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.Web.SessionState;


using System.Drawing;


using System.Drawing.Imaging;




public partial class ValidateCode : System.Web.UI.Page




...{




/**//// <summary>


/// 验证码长度


/// </summary>


private int codeLen = 6;




/**//// <summary>


/// 图片宽度


/// </summary>


private int imgWidth = 200;




/**//// <summary>


/// 图片高度


/// </summary>


private int imgHeight = 35;




/**//// <summary>


/// 字体大小


/// </summary>


private int fontSize = 18;




/**//// <summary>


/// 干扰度(百分之几)


/// </summary>


private int fineness = 1;




protected void Page_Load(object sender, EventArgs e)




...{


Response.Expires = 0;


string validateCode = CreateValidateCode();


Bitmap bitmap = new Bitmap(imgWidth, imgHeight);




//给图像设置干扰


DisturbBitmap(bitmap);




//绘制验证码图像


DrawValidateCode(bitmap, validateCode);




//保存验证码图像,等待输出


bitmap.Save(Response.OutputStream, ImageFormat.Jpeg);


}






/**//// <summary>


/// 随机生成验证码,并保存到SESSION中


/// </summary>


/// <returns></returns>


private string CreateValidateCode()




...{


string validateCode = "";


Random random = new Random();


string tmp = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789";


for (int i = 0; i < codeLen; i++)




...{


int n = random.Next(tmp.Length);


validateCode += tmp
;


}


Session["ValidateCode"] = validateCode;


return validateCode;


}






/**//// <summary>


/// 为图片设置干扰点


/// </summary>


/// <param name="bitmap"></param>


private void DisturbBitmap(Bitmap bitmap)




...{


Random rand = new Random();


int iRed = rand.Next(200, 255);


int iGreen = rand.Next(200, 255);


int iBlue = rand.Next(200, 255);


int iAlpha = rand.Next(0, 100);


// 通过随机数生成


Random random = new Random();


for (int i = 0; i < bitmap.Width; i++)




...{


for (int j = 0; j < bitmap.Height; j++)




...{


if (random.Next(100) <= this.fineness)




...{


//设置干扰点


iAlpha = rand.Next(0, 100);


iRed = rand.Next(50, 150);


iGreen = rand.Next(50, 150);


iBlue = rand.Next(50, 150);


bitmap.SetPixel(i, j, Color.FromArgb(iAlpha, iRed, iGreen, iBlue));


}


else




...{


//绘制背景色


iAlpha = rand.Next(0, 100);


iRed = rand.Next(240, 255);


iGreen = rand.Next(200, 255);


iBlue = rand.Next(200, 255);


bitmap.SetPixel(i, j, Color.FromArgb(iAlpha, iRed, iGreen, iBlue));


}


}


}


//画边框


iAlpha = rand.Next(0, 100);


iRed = rand.Next(0, 0);


iGreen = rand.Next(0, 255);


iBlue = rand.Next(0, 255);


for (int i = 0; i < bitmap.Width; i++)




...{


bitmap.SetPixel(i, 0, Color.FromArgb(iAlpha, iRed, iGreen, iBlue));


bitmap.SetPixel(i, 1, Color.FromArgb(iAlpha, iRed, iGreen, iBlue));


bitmap.SetPixel(i, bitmap.Height - 1, Color.FromArgb(iAlpha, iRed, iGreen, iBlue));


bitmap.SetPixel(i, bitmap.Height - 2, Color.FromArgb(iAlpha, iRed, iGreen, iBlue));


}


for (int i = 0; i < bitmap.Height; i++)




...{


bitmap.SetPixel(0, i, Color.FromArgb(iAlpha, iRed, iGreen, iBlue));


bitmap.SetPixel(1, i, Color.FromArgb(iAlpha, iRed, iGreen, iBlue));


bitmap.SetPixel(bitmap.Width - 1, i, Color.FromArgb(iAlpha, iRed, iGreen, iBlue));


bitmap.SetPixel(bitmap.Width - 2, i, Color.FromArgb(iAlpha, iRed, iGreen, iBlue));


}


}






/**//// <summary>


/// 绘制验证码图片


/// </summary>


/// <param name="bitmap"></param>


/// <param name="validateCode"></param>


private void DrawValidateCode(Bitmap bitmap, string validateCode)




...{


//随机获取颜色


Random rand = new Random();


int iRed = rand.Next(0, 50);


int iGreen = rand.Next(0, 50);


int iBlue = rand.Next(0, 50);


int iAlpha = rand.Next(50, 100);


char[] chr = validateCode.ToCharArray();


for (int i = 0; i < codeLen; i++)




...{


Font f = new Font(new FontFamily("Microsoft Sans Serif"), fontSize, FontStyle.Bold | FontStyle.Italic);


Brush b = new SolidBrush(Color.FromArgb(iAlpha, iRed, iGreen, iBlue));


Graphics g = Graphics.FromImage(bitmap);


//设置各字符的漂浮范围


int iX, iY;


iX = rand.Next(-5, 5);


iY = rand.Next(-5, 5);


//绘制验证码图像


g.DrawString(chr[i].ToString(), f, b,


(float)((bitmap.Width / codeLen) * (i) + iX),


(float)(bitmap.Height / 2 - g.MeasureString(chr[i].ToString(), f).Height / 2 + iY));


}


}


}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: