.NET使用一般处理程序生成验证码!
正在看上的ITCST上的王兴魁老师的AJAX技术入门,里面讲到了一个验证码的小程序,觉得蛮有用的,先记下来.
最后运行的效果图:
HTML的代码:
Html代码
<!-- Document : ASP.NET用一般处理程序生成验证码 Created on : 2008-10-13 17:04 Author : 牛腩 --
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
> <html> <head> <title></title> <meta http-equiv=
"Content-Type" content=
"text/html; charset=UTF-8" /> <script type=
"text/javascript"> function change() { var
imgNode =
document.getElementById("vimg");
imgNode.src =
"WaterMark.ashx?t=" + (new Date()).valueOf(); // 这里加个时间的参数是为了防止浏览器缓存的问题 }
</script> </head> <body> <img src=
"WaterMark.ashx" id=
"vimg" alt=
"" /><input type=
"button" value=
"换一张图片" onclick=
"change()" /> </body> </html>
<!--
Document : ASP.NET用一般处理程序生成验证码
Created on : 2008-10-13 17:04
Author : 牛腩
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript">
function change() {
var imgNode = document.getElementById("vimg");
imgNode.src = "WaterMark.ashx?t=" + (new Date()).valueOf(); // 这里加个时间的参数是为了防止浏览器缓存的问题
}
</script>
</head>
<body>
<img src="WaterMark.ashx" id="vimg" alt="" /><input type="button" value="换一张图片" οnclick="change()" />
</body>
</html>
一般处理程序WaterMark.ashx的代码:
C#代码
<%@ WebHandler Language=
"C#" Class=
"WaterMark" %>
using System;
using System.Web;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Web.SessionState;
public class WaterMark : IHttpHandler, IRequiresSessionState {
public void ProcessRequest(HttpContext context) {
string checkCode = GenCode(5); context.Session[
"Code"] = checkCode; System.Drawing.Bitmap image =
new System.Drawing.Bitmap(70, 22); Graphics g = Graphics.FromImage(image);
try { Random random =
new Random(); g.Clear(Color.White);
int i;
for (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.Silver), x1, y1, x2, y2); } Font font =
new System.Drawing.Font(
"Arial", 12, (System.Drawing.FontStyle.Bold)); 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); g.DrawRectangle(
new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); System.IO.MemoryStream ms =
new System.IO.MemoryStream(); image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); context.Response.ClearContent(); context.Response.ContentType =
"image/Gif"; context.Response.BinaryWrite(ms.ToArray()); }
finally { g.Dispose(); image.Dispose(); } }
private string GenCode(
int num) {
string str =
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char[] chastr = str.ToCharArray();
string code =
""; Random rd =
new Random();
int i;
for (i = 0; i < num; i++) { code += str.Substring(rd.Next(0, str.Length), 1); }
return code; }
public bool IsReusable {
get {
return false; } } }