ASP.NET怎样生成验证码
ASP.NET怎样生成验证码
ASP.NET怎样生成验证码
答案:<%@ 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 生成网站验证码功能
/// </summary>
public class ValidateImageHandler : IHttpHandler, IRequiresSessionState
{ int intLength = 4; //长度 string strIdentify = "Identify"; //随机字串存储键值,以便存储到Session中
public ValidateImageHandler() {}/// <summary>
/// 生成验证图片核心代码
/// </summary>
/// <param name="hc"></param>
public void ProcessRequest(HttpContext hc)
{
//设置输出流图片格式
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();//合法随机显示字符列表
string strLetters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
StringBuilder s = new StringBuilder();
//将随机生成的字符串绘制到图片上
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中,验证与用户输入是否hc.Response.End();}/// <summary>
/// 表示此类实例是否可以被多个请求共用(重用可以提高性能)
/// </summary> public bool IsReusable {get{return true;} }}方法很多,我这里有大学时候写的例子,不知道你想要什么样的,需要的话晚上回去发给你。
新建一个页面后 把后置代码复制运行即可 (修改类名)
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;public partial class TsDep_VerifyCode : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
TsDep_VerifyCode v = new TsDep_VerifyCode();v.Length = this.length;
v.FontSize = this.fontSize;
v.Chaos = this.chaos;
v.BackgroundColor = this.backgroundColor;
v.ChaosColor = this.chaosColor;
v.CodeSerial = this.codeSerial;
v.Colors = this.colors;
v.Fonts = this.fonts;
v.Padding = this.padding;
string code = v.CreateVerifyCode(); //取随机码
v.CreateImageOnPage(code, this.Context); // 输出图片Session["CheckCode"] = code.ToUpper();// 使用Session存验证码的值
}#region 验证码长度(默认6个验证码的长度)
int length = 5;
public int Length
{
get { return length; }
set { length = value; }
}
#endregion#region 验证码字体大小(为了显示扭曲效果,默认40像素,可以自行修改)
int fontSize = 12;
public int FontSize
{
get { return fontSize; }
set { fontSize = value; }
}
#endregion#region 边框补(默认1像素)
int padding = 2;
public int Padding
{
get { return padding; }
set { padding = value; }
}
#endregion#region 是否输出燥点(默认不输出)
bool chaos = true;
public bool Chaos
{
get { return chaos; }
set { chaos = value; }
}
#endregion#region 输出燥点的颜色(默认灰色)
Color chaosColor = Color.LightGray;
public Color ChaosColor
{
get { return chaosColor; }
set { chaosColor = value; }
}
#endregion#region 自定义背景色(默认白色)
Color backgroundColor = Color.White;
public Color BackgroundColor
{
get { return backgroundColor; }
set { backgroundColor = value; }
}
#endregion#region 自定义随机颜色数组
Color[] colors = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Brown, Color.DarkCyan, Color.Purple };
public Color[] Colors
{
get { return colors; }
set { colors = value; }
}
#endregion#region 自定义字体数组
string[] fonts = { "Arial", "Georgia" };
public string[] Fonts
{
get { return fonts; }
set { fonts = value; }
}
#endregion#region 自定义随机码字符串序列(使用逗号分隔)