JS刷新验证码5.docx_第1页
JS刷新验证码5.docx_第2页
JS刷新验证码5.docx_第3页
JS刷新验证码5.docx_第4页
JS刷新验证码5.docx_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ASP.NET中的无刷新验证码的开发(完整代.本站整理 互联网 2010-11-15 点击: 933 我要评论 -复制代码 代码如下: 无标题页 function DoFresh() document.getElementById(Image1).src = VerifyCode.aspx; 验证码: 看不清? using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class Login : System.Web.UI.Page protected void Page_Load(object sender, EventArgs e) if (!Page.IsPostBack) Image1.ImageUrl = VerifyCode.aspx; protected void btnSubmit_Click(object sender, EventArgs e) if (SessionValidateCode != null) string outputValidateCode = SessionValidateCode as string; string inputValidateCode = txtValidateCode.Text.Trim(); if (string.Compare(outputValidateCode, inputValidateCode, true) != 0) /Response.Write(javascript:alert(输入的验证码错误!);); litErrorMsg.Text = 输入的验证码错误!; else /Response.Write(javascript:alert(输入的验证码正确!);); litErrorMsg.Text = 输入的验证码正确!; #region 调用下面的方法实现客户端保存Cookie验证模式 private void ValidateMethod() if (Request.CookiesCheckCode = null) litErrorMsg.Text = 您的浏览器设置已被禁用 Cookies,您必须设置浏览器允许使用 Cookies 选项后才能使用本系统。; litErrorMsg.Visible = true; return; if (String.Compare(Request.CookiesCheckCode.Value, TextBox1.Text.ToString().Trim(), true) != 0) litErrorMsg.Text = 对不起,验证码错误!; litErrorMsg.Visible = true; return; else litErrorMsg.Text = 恭喜,验证码输入正确!; litErrorMsg.Visible = true; #endregion /VerifyCode.aspx为默认生成的代码 复制代码 代码如下:using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Drawing2D; using System.IO; public partial class VerifyCode : System.Web.UI.Page protected void Page_Load(object sender, EventArgs e) /GenerateValidateCode(); GenerateVerifyImage(4);/GenerateVerifyImage(int length) #region 【无刷新仿google波形扭曲彩色】验证码样式0_GenerateValidateCode() private void GenerateValidateCode() this.Length = this.length; this.FontSize = this.fontSize; this.Chaos = this.chaos; this.BackgroundColor = this.backgroundColor; this.ChaosColor = this.chaosColor; this.CodeSerial = this.codeSerial; this.Colors = this.colors; this.Fonts = this.fonts; this.Padding = this.padding; string VNum = this.CreateVerifyCode(); /取随机码 SessionValidateCode = VNum.ToUpper();/取得验证码,以便后来验证 this.CreateImageOnPage(VNum, this.Context); / 输出图片 /Cookie验证模式, 使用Cookies取验证码的值 /Response.Cookies.Add(new HttpCookie(CheckCode, code.ToUpper(); #endregion #region 验证码长度(默认4个验证码的长度) int length = 4; public int Length get return length; set length = value; #endregion #region 验证码字体大小(为了显示扭曲效果,默认40像素,可以自行修改) int fontSize = 22; public int FontSize get return fontSize; set fontSize = value; #endregion #region 边框补(默认1像素) int padding = 2; public int Padding get return padding; set padding = value; #endregion #region 是否输出燥点(默认不输出) bool chaos = true; public bool Chaos get return chaos; set chaos = value; #endregion #region 输出燥点的颜色(默认灰色) Color chaosColor = Color.LightGray; public Color ChaosColor get return chaosColor; set chaosColor = value; #endregion #region 自定义背景色(默认白色) Color backgroundColor = Color.White; public Color BackgroundColor get return backgroundColor; set backgroundColor = value; #endregion #region 自定义随机颜色数组 Color colors = Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple ; public Color Colors get return colors; set colors = value; #endregion #region 自定义字体数组 string fonts = Arial, Georgia ; public string Fonts get return fonts; set fonts = value; #endregion #region 自定义随机码字符串序列(使用逗号分隔) string codeSerial = 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,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z; public string CodeSerial get return codeSerial; set codeSerial = value; #endregion #region 产生波形滤镜效果 private const double PI = 3.1415926535897932384626433832795; private const double PI2 = 6.283185307179586476925286766559; / / 正弦曲线Wave扭曲图片 / / 图片路径 / 如果扭曲则选择为True / 波形的幅度倍数,越大扭曲的程度越高,一般为3 / 波形的起始相位,取值区间0-2*PI) / public Bitmap TwistImage(Bitmap srcBmp, bool bXDir, double dMultValue, double dPhase) Bitmap destBmp = new Bitmap(srcBmp.Width, srcBmp.Height); / 将位图背景填充为白色 System.Drawing.Graphics graph = Graphics.FromImage(destBmp); graph.FillRectangle(new SolidBrush(Color.White), 0, 0, destBmp.Width, destBmp.Height); graph.Dispose(); double dBaseAxisLen = bXDir ? (double)destBmp.Height : (double)destBmp.Width; for (int i = 0; i destBmp.Width; i+) for (int j = 0; j = 0 & nOldX = 0 & nOldY destBmp.Height) destBmp.SetPixel(nOldX, nOldY, color); return destBmp; #endregion #region 生成校验码图片 public Bitmap CreateImageCode(string code) int fSize = FontSize; int fWidth = fSize + Padding; int imageWidth = (int)(code.Length * fWidth) + 4 + Padding * 2; int imageHeight = fSize * 2 + Padding; System.Drawing.Bitmap image = new System.Drawing.Bitmap(imageWidth, imageHeight); Graphics g = Graphics.FromImage(image); g.Clear(BackgroundColor); Random rand = new Random(); /给背景添加随机生成的燥点 if (this.Chaos) Pen pen = new Pen(ChaosColor, 0); int c = Length * 10; for (int i = 0; i c; i+) int x = rand.Next(image.Width); int y = rand.Next(image.Height); g.DrawRectangle(pen, x, y, 1, 1); int left = 0, top = 0, top1 = 1, top2 = 1; int n1 = (imageHeight - FontSize - Padding * 2); int n2 = n1 / 4; top1 = n2; top2 = n2 * 2; Font f; Brush b; int cindex, findex; /随机字体和颜色的验证码字符 for (int i = 0; i code.Length; i+) cindex = rand.Next(Colors.Length - 1); findex = rand.Next(Fonts.Length - 1); f = new System.Drawing.Font(Fontsfindex, fSize, System.Drawing.FontStyle.Bold); b = new System.Drawing.SolidBrush(Colorscindex); if (i % 2 = 1) top = top2; else top = top1; left = i * fWidth; g.DrawString(code.Substring(i, 1), f, b, left, top); /画一个边框 边框颜色为Color.Gainsboro g.DrawRectangle(new Pen(Color.Gainsboro, 0), 0, 0, image.Width - 1, image.Height - 1); g.Dispose(); /产生波形(Add By 51) image = TwistImage(image, true, 4, 4); return image; #endregion #region 将创建好的图片输出到页面 public void CreateImageOnPage(string code, HttpContext context) Response.BufferOutput = true; /特别注意 Response.Cache.SetExpires(DateTime.Now.AddMilliseconds(-1);/特别注意 Response.Cache.SetCacheability(HttpCacheability.NoCache);/特别注意 Response.AppendHeader(Pragma, No-Cache); /特别注意 MemoryStream ms = new MemoryStream(); Bitmap image = this.CreateImageCode(code); image.Save(ms, ImageFormat.Jpeg); Response.ClearContent(); Response.ContentType = image/JPEG; Response.BinaryWrite(ms.ToArray(); Response.End(); ms.Close(); ms = null; image.Dispose(); image = null; #endregion #region 生成随机字符码 public string CreateVerifyCode(int codeLen) if (codeLen = 0) codeLen = Length; string arr = CodeSerial.Split(,); string code = ; int randValue = -1; Random rand = new Random(unchecked(int)DateTime.Now.Ticks); for (int i = 0; i codeLen; i+) randValue = rand.Next(0, arr.Length - 1); code += arrrandValue; return code; public string CreateVerifyCode() return CreateVerifyCode(0); #endregion #region 另一种验证码样式 GenerateVerifyImage(int length) / / 将创建好的图片输出到页面 / public void GenerateVerifyImage(int nLen) string validateCode = ;/生成的验证码 int nBmpWidth = GetImagewidth(nLen); int nBmpHeight = GetImageHeight(); System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(nBmpWidth, nBmpHeight); /对图像进行弯曲 TwistImage(bmp, true, 12, 2); / 1. 生成随机背景颜色 int nRed, nGreen, nBlue; / 背景的三元色 System.Random rd = new Random(int)System.DateTime.Now.Ticks); nRed = rd.Next(255) % 128 + 128; nGreen = rd.Next(255) % 128 + 128; nBlue = rd.Next(255) % 128 + 128; / 2. 填充位图背景 System.Drawing.Graphics graph = System.Drawing.Graphics.FromImage(bmp); graph.FillRectangle(new SolidBrush(System.Drawing.Color.FromArgb(nRed, nGreen, nBlue) , 0 , 0 , nBmpWidth , nBmpHeight); / 3. 绘制干扰线条,采用比背景略深一些的颜色 int nLines = 3; System.Drawing.Pen pen = new System.Drawing.Pen(System.Drawing.Color.FromArgb(nRed - 17, nGreen - 17, nBlue - 17), 2); for (int a = 0; a nLines; a+) int x1 = rd.Next() % nBmpWidth; int y1 = rd.Next() % nBmpHeight; int x2 = rd.Next() % nBmpWidth; int y2 = rd.Next() % nBmpHeight; graph.DrawLine(pen, x1, y1, x2, y2); / 采用的字符集,可以随即拓展,并可以控制字符出现的几率 string strCode = 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ; / 4. 循环取得字符,并绘制 for (int i = 0; i nLen; i+) int x = (i * 13 + rd.Next(3); int y = rd.Next(4) + 1; / 确定字体 System.Drawing.Font font = new System.Drawing.Font(Courier New,/文字字体类型 12 + rd.Next() % 4,/文字字体大小 System.Drawing.FontStyle.Bold);/文字字体样式 char c = strCoderd.Next(strCode.Length); / 随机获取字符 validat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论