利用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>
浙公网安备 33010602011771号