小小验证码有大作用!——一般处理程序生成验证码 验证码生成
下图为一个含有字母跟数字的简单验证码:
下面我们就来看看它们是如何产生的:
用一般处理程序生成验证码
[csharp] view plaincopyprint?
usingSystem;
usingSystem.Web;
usingSystem.Drawing;
usingSystem.Drawing.Drawing2D;
usingSystem.Web.SessionState;
namespaceWeb.handler
{
///<summary>
///WaterMark的摘要说明
///</summary>
publicclassWaterMark:IHttpHandler,IRequiresSessionState//要使用session必须实现该接口,记得要导入System.Web.SessionState命名空间
{
publicvoidProcessRequest(HttpContextcontext)
{
stringcheckCode=GenCode(5);//产生5位随机字符
context.Session["Code"]=checkCode;//将字符串保存到Session中,以便需要时进行验证
System.Drawing.Bitmapimage=newSystem.Drawing.Bitmap(70,22);
Graphicsg=Graphics.FromImage(image);
try
{
//生成随机生成器
Randomrandom=newRandom();
//清空图片背景色
g.Clear(Color.White);
//画图片的背景噪音线
inti;
for(i=0;i<25;i++)
{
intx1=random.Next(image.Width);
intx2=random.Next(image.Width);
inty1=random.Next(image.Height);
inty2=random.Next(image.Height);
g.DrawLine(newPen(Color.Silver),x1,y1,x2,y2);
}
Fontfont=newSystem.Drawing.Font("Arial",12,(System.Drawing.FontStyle.Bold));
System.Drawing.Drawing2D.LinearGradientBrushbrush=newSystem.Drawing.Drawing2D.LinearGradientBrush(newRectangle(0,0,
image.Width,image.Height),Color.Blue,Color.DarkRed,1.2F,true);
g.DrawString(checkCode,font,brush,2,2);
//画图片的前景噪音点
g.DrawRectangle(newPen(Color.Silver),0,0,image.Width-1,image.Height-1);
System.IO.MemoryStreamms=newSystem.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();
}
}
///<summary>
///产生随机字符串
///</summary>
///<paramname="num">随机出几个字符</param>
///<returns>随机出的字符串</returns>
privatestringGenCode(intnum)
{
//验证码中出现的字符
stringstr="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";<SPAN></SPAN>//str中的值就是将来会在验证码中出现的字符
char[]chastr=str.ToCharArray();
stringcode="";
Randomrd=newRandom();
inti;
for(i=0;i<num;i++)
{
//code+=source[rd.Next(0,source.Length)];
code+=str.Substring(rd.Next(0,str.Length),1);
}
returncode;
}
publicboolIsReusable
{
get
{
returnfalse;
}
}
}
}
using System;using System.Web;using System.Drawing;using System.Drawing.Drawing2D;using System.Web.SessionState;namespace Web.handler{ /// <summary> /// WaterMark 的摘要说明 /// </summary> public class WaterMark : IHttpHandler, IRequiresSessionState // 要使用session必须实现该接口,记得要导入System.Web.SessionState命名空间 { public void ProcessRequest(HttpContext context) { string checkCode = GenCode(5); // 产生5位随机字符 context.Session["Code"] = checkCode; //将字符串保存到Session中,以便需要时进行验证 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(); } } /// <summary> /// 产生随机字符串 /// </summary> /// <param name="num">随机出几个字符</param> /// <returns>随机出的字符串</returns> private string GenCode(int num) { //验证码中出现的字符 string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//str中的值就是将来会在验证码中出现的字符 char[] chastr = str.ToCharArray(); string code = ""; Random rd = new Random(); int i; for (i = 0; i < num; i++) { //code += source[rd.Next(0, source.Length)]; code += str.Substring(rd.Next(0, str.Length), 1); } return code; } public bool IsReusable { get { return false; } } }}
刷新验证码的HTML及Javascript代码:
[html] view plaincopyprint?
<%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="Login.aspx.cs"Inherits="nwessystem.Login"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>登录窗体</title>
<linkhref="../css/login.css"rel="stylesheet"type="text/css"/>
<scriptlanguage="javascript"type="text/javascript">
//刷新验证码的js函数
functionchangeCode(){
varimgNode=document.getElementById("vimg");
//重新加载验证码,达到刷新的目的
imgNode.src="../handler/WaterMark.ashx?t="+(newDate()).valueOf();//这里加个时间的参数是为了防止浏览器缓存的问题
}
</script>
</head>
<body>
<p>验证码:<imgsrc="../handler/WaterMark.ashx"id="vimg"alt="点击刷新验证码"onclick="changeCode()"/><asp:TextBoxID="txtCode"runat="server"CssClass="txtcode"></asp:TextBox></p>
</body>
</html>
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="nwessystem.Login" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title>登录窗体</title> <link href="../css/login.css" rel="stylesheet" type="text/css" /> <script language="javascript" type="text/javascript"> //刷新验证码的js函数 function changeCode() { var imgNode = document.getElementById("vimg"); //重新加载验证码,达到刷新的目的 imgNode.src = "../handler/WaterMark.ashx?t=" + (new Date()).valueOf(); // 这里加个时间的参数是为了防止浏览器缓存的问题 } </script></head><body> <p>验证码:<img src="../handler/WaterMark.ashx" id="vimg" alt="点击刷新验证码" onclick="changeCode() " /><asp:TextBox ID="txtCode" runat="server" CssClass="txtcode"></asp:TextBox></p> </body></html>
登录时判断验证码是否正确
[csharp] view plaincopyprint?
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingBLL;
namespacenwessystem
{
publicpartialclassLogin:System.Web.UI.Page
{
protectedvoidbtnLogin_Click(objectsender,EventArgse)
{
//检验验证码部分
stringcode=txtCode.Text.Trim().ToUpper();
stringrightCode=Session["Code"].ToString();
//判断验证码是否正确
if(code!=rightCode)
{
//验证码输入错误!
Page.ClientScript.RegisterStartupScript(Page.GetType(),"message","<scriptlanguage='javascript'defer>alert('验证码错误!');</script>");
return;
}
//检验用户名和密码部分
stringname=txtName.Text.Trim();
stringpwd=txtPassword.Text.Trim();
boolb=LoginManager.Login(name,pwd);
if(b)
{
//登录成功
Page.ClientScript.RegisterStartupScript(Page.GetType(),"message","<scriptlanguage='javascript'defer>alert('登录成功!');</script>");
}
else
{
//登录失败
Page.ClientScript.RegisterStartupScript(Page.GetType(),"message","<scriptlanguage='javascript'defer>alert('登录失败,用户名或密码错误!');</script>");
}
}
}
}
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using BLL;namespace nwessystem{ public partial class Login : System.Web.UI.Page { protected void btnLogin_Click(object sender, EventArgs e) { //检验验证码部分 string code = txtCode.Text.Trim().ToUpper(); string rightCode = Session["Code"].ToString(); //判断验证码是否正确 if (code != rightCode) { //验证码输入错误! Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('验证码错误!');</script>"); return; } //检验用户名和密码部分 string name=txtName.Text.Trim(); string pwd=txtPassword.Text.Trim(); bool b = LoginManager.Login(name, pwd); if (b) { //登录成功 Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('登录成功!');</script>"); } else { //登录失败 Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('登录失败,用户名或密码错误!');</script>"); } } }}
好了,通过上面简单的代码就可以实现验证码的生成与验证了。代码里注释很详细了,相信不用我再写多余的说明,大家也都可以看懂。如果还是不懂欢迎在下方留言。博客水平有限,希望各位多多指正!
更多阅读
精华液有什么作用 精华液怎么用及6大使用误区 缮丝源精华液 副作用
精华液有什么作用 精华液怎么用及6大使用误区——简介 精华液有什么用?精华液是护肤品中之极品,具有抗衰老、美白、抗皱、保湿、祛斑等多种功效。如此强大的精华液要怎么用才能发挥其效用呢?日常使用精华液要注意哪些误区呢?分享这篇精
发晶手链有什么作用 白发晶
发晶手链有什么作用——简介发晶手链由原石打磨成圆珠穿制而成,发晶的种类十分丰富,包括金发晶、绿发晶、铜发晶、黑发晶、银发晶、红黄发晶等,发晶讲究品形完美,发丝层次分明,可达到绚烂缤纷、赏心悦目的效果;不仅如此,发晶亦有一种特殊的
御龙在天国战血纹获得方法 有什么作用 御龙在天国战大咖秀
?御龙在天国战血纹获得方法 有什么作用?获得方法:?玩家们参与全新国战2.0,将可获得国战血纹奖励,根据玩家的国战表现可获得不同数量和种类的国战血纹。?用途介绍:
小小生命线托起大牛市 生命线
小小生命线托起大牛市前文《超级牛市的超级牛股》中点评的几个指数和几只个股,都是从年K线大周期大趋势的视角来辅益投资者对大盘乃至整体A股大机遇的洞彻综断,以便前瞻性的感触正在启动的这轮波澜壮阔空前壮观的超级大牛市的远景时
电脑上的显卡有什么作用 独立显卡作用
?来源:U大师只要在使用电脑的朋友,大概都会知道显卡这个部件,但是显卡具体是什么东西,有什么作用,也许有很多人都不会了解。下面,小编就来给大家详细地介绍一下显卡。一、什么是显卡?显卡的作用是什么?总的来说,显卡就是控制电脑