新建一个CheckCode.aspx页面,保留第一行“<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="identifyingcode.aspx.cs" Inherits="GiftCards.identifyingcode" %>”,其余删掉。
C#验证码图片制作代码:
1 using System; 2 using System.Data; 3 using System.Configuration; 4 using System.Collections; 5 using System.Web; 6 using System.Web.Security; 7 using System.Web.UI; 8 using System.Web.UI.WebControls; 9 using System.Web.UI.WebControls.WebParts; 10 using System.Web.UI.HtmlControls; 11 using System.Drawing; 12 using System.Drawing.Imaging; 13 using System.IO; 14 15 namespace GiftCards 16 { 17 public partial class identifyingcode : System.Web.UI.Page 18 { 19 protected void Page_Load(object sender, EventArgs e) 20 { 21 string tmp = RndNum(4); 22 HttpCookie a = new HttpCookie("ImageV", tmp); 23 Response.Cookies.Add(a); 24 this.ValidateCode(tmp); 25 } 26 private void ValidateCode(string VNum) 27 { 28 Bitmap Img = null; 29 Graphics g = null; 30 MemoryStream ms = null; 31 int gheight = VNum.Length * 12; 32 Img = new Bitmap(gheight, 25); 33 g = Graphics.FromImage(Img); 34 //背景颜色 35 g.Clear(Color.White ); 36 //文字字体 37 Font f = new Font("Arial Black", 10); 38 //文字颜色 39 SolidBrush s = new SolidBrush(Color.RoyalBlue); 40 g.DrawString(VNum, f, s, 3, 3); 41 ms = new MemoryStream(); 42 Img.Save(ms, ImageFormat.Jpeg); 43 Response.ClearContent(); 44 Response.ContentType = "images/Jpeg"; 45 Response.BinaryWrite(ms.ToArray()); 46 g.Dispose(); 47 Img.Dispose(); 48 Response.End(); 49 } 50 private string RndNum(int VcodeNum) 51 { 52 string Vchar = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p" + 53 ",q,r,s,t,u,v,w,x,y,z"; 54 string[] VcArray = Vchar.Split(new Char[] { ',' }); 55 string VNum = ""; 56 int temp = -1; 57 Random rand = new Random(); 58 for (int i = 1; i < VcodeNum + 1; i++) 59 { 60 if (temp != -1) 61 { 62 rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks)); 63 } 64 int t = rand.Next(35); 65 if (temp != -1 && temp == t) 66 { 67 return RndNum(VcodeNum); 68 } 69 temp = t; 70 VNum += VcArray[t]; 71 } 72 return VNum; 73 } 74 } 75 }
建好页面后,保存,继续下一个操作。
在要显示验证码的页面<img src="CheckCode.aspx" id="codeImg" alt=""/>
比对验证码时 :
var exChangeNum=$("#textCode").val();//用户输入的值
if (Cookie.get("ImageV") != exChangeNum)//检测是否和验证码一致
{
$("#alertText").html("验证码输入错误!");
return false;
}
在这里我用的jquery进行比对,其实就是把验证码的内容写入Cookie了,C#验证取Request .Cookie["ImageV"]的值与文本框输入的值进行比较,效果一样。
到这一步,验证码验证就完成了,不过再仔细研究。发现,验证码要实现 “点击下一张”,就必须让页面刷新一次才行。
我先是这么写:
$("#codeImg").click(function(){
window.location.href=window.location.href;//页面刷新
});
发现每次点击,页面就刷新,用户刚刚输完的用户名、密码就都没了,这样可不友善。
于是用jquery稍作修改,这问题一下子就解决了。(不得不说jquery很强大)
$("#codeImg").click(function(){
$("#codeImg").attr("src", "CheckCode.aspx?time=" + new Date());//改变img标签的src属性,这样保证在页面不刷新的情况下切换验证码图片。
});
这里要注意的是后面的“time”参数必须要,这样做的目的是每次点击都获得不一样的验证码,因为没有后面的“time”参数,就相当于没有更改src属性,点击没有任何反应(获取了同一张图片)。
这里我用到的是jquey进行操作,因为比较方便。要是对jquery不太熟悉可以用C#。反正就是,在保证页面不刷新的前提下更改img标签的src属性就行了。当然,要记得加“time”参数。
那么到这里,就实现了无刷新验证码。如果要对验证码图片的样式进行调整,将上面的C#代码自行修改即可。