利用IHttpHandler生成验证码
在网站的设计中,验证码是十分有用的,这里利用IHttpHandler生成验证码,代码如下:
<%@ WebHandler Language="C#" Class="Handler2" %> using System; using System.Web; using System.Drawing; using System.IO; using System.Web.SessionState; public class Handler2 : IHttpHandler,IRequiresSessionState{ public void ProcessRequest (HttpContext context) { int codeWeight = 80; int codeHeight = 22; int fontSize = 16; Random rd=new Random(); string checkCode =CreateCode(); //构建验证码字符串 Bitmap image = new Bitmap(codeWeight,codeHeight); //构建画图 Graphics g = Graphics.FromImage(image); //构建画布 g.Clear(Color.White); //清空背景色 Color[] color = new Color[] {Color.Red,Color.Black,Color.Green,Color.Blue }; string[] font = new string[] { "宋体", "黑体", "楷体" }; //画噪音线 for (int i = 0; i < 2; i++) { int x1 = rd.Next(image.Width); int x2 = rd.Next(image.Width); int y1 = rd.Next(image.Height); int y2 = rd.Next(image.Height); g.DrawLine(new Pen(color[rd.Next(color.Length)]), new Point(x1, y1), new Point(x2, y2)); } //画验证码 for (int i = 0; i < checkCode.Length; i++) { Color clr = color[rd.Next(color.Length)]; Font ft = new Font(font[rd.Next(font.Length)], fontSize); g.DrawString(checkCode[i].ToString(), ft, new SolidBrush(clr),(float)i * 18 + 2, 0); } //画噪音点 for (int i = 0; i < 100; i++) { int x = rd.Next(image.Width); int y = rd.Next(image.Height); image.SetPixel(x,y,Color.FromArgb(rd.Next())); } //画边框线 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); MemoryStream ms = new MemoryStream(); try { image.Save(ms,System.Drawing.Imaging.ImageFormat.Gif); context.Session["checkCode"] = checkCode; //将验证码保存到Session中 context.Response.ContentType = "Image/Gif"; context.Response.ClearContent(); context.Response.BinaryWrite(ms.ToArray()); } finally { image.Dispose(); g.Dispose(); } } /// <summary> /// 随机构建验证码方法 /// </summary> /// <returns>返回验证码字符串</returns> public string CreateCode() { char code; string checkCode = string.Empty; Random rd = new Random(); for (int i = 0; i < 4; i++) { int num=rd.Next(); if (num%2==0) { code = (char)('0' + (char)(num % 10)); } else { code = (char)('A' + (char)(num % 26)); if (rd.Next(0,2)==0) { code = (char)(code + 32); } } checkCode += code; } return checkCode; } public bool IsReusable { get { return false; } } }
然后将html控件中的img控件的src属性设置为Handler2.ashx就可以了。
<img id="img" src="Handler2.ashx" alt="点击切换验证码" />
然后再通过javascript生成点击切换事件,这样网站验证码就做好了。
<script language="javascript" type="text/javascript">
window.onload = function () {
document.getElementById("img").onclick = function () {
this.src = "Handler2.ashx" + "?time=" + Math.random();
}
}
</script>