asp实现带刷新功能的验证码代码
ASP编程常用代码精选集合(十二)

1:asp检查组件是否已经安装<% '函数名:IsObjInstalled'作用:检查组件是否已经安装'参数:strClassString ----组件名'返回值:True ----已经安装' False ----没有安装function IsObjInstalled(strClassString)on error resume nextIsObjInstalled = Falseerr = 0dim xTestObjset xTestObj = Server.createobject(strClassString)if0= err then IsObjInstalled = Trueset xTestObj = nothingerr = 0end function%>2:asp检查Email地址合法性'********************************************'函数名:BPCheckEMail'作用:检查Email地址合法性'参数:email ----要检查的Email地址'返回值:True ----Email地址合法False ----Email地址不合法'********************************************Function BPCheckEMail(email)Dim strArr,strRE1,strRE2,oRE1,oRE2,oMatches1,oMatches2strArr = Split(email,"@")If UBound(strArr) <> 1 ThenBPCheckEMail = False : Exit FunctionEnd IfstrRE1 = "^(?:[\w\.-]+@[A-Za-z1-9]{1}[A-Za-z0-9\.-]+\.[A-Za-z1-9]{2,3})" strRE2 = "[^\w\.@:-]+"Set oRE1 = New RegExp : Set oRE2 = New RegExpoRE1.Pattern = strRE1 : oRE2.Pattern = strRE2oRE1.IgnoreCase = False : oRE2.IgnoreCase = FalseoRE1.Global = True : oRE2.Global = TrueSet oMatches1 = oRE1.Execute(em ail) : Set oMatches2 = oRE2.Execute(em ail) If oMatches1.Count <> 0 And oMatches2.Count = 0 ThenBPCheckEMail = TrueElseBPCheckEMail = FalseEnd IfEnd Function3: asp生成指定类型的随机字符串'函数:RandomStr'作用:生成指定类型的随机字符串'参数:IsIgnoreCase(大小写字母状态)' IsStatus(数字、字母组合)' CodeLen(字符串长度)Function RandomStr(ByVal IsIgnoreCase,ByVal IsStatus,ByVal CodeLen) Dim NumStr,CharStr,StrDim RCodeItem,RCodeStart,RCodeStrNumStr="0123456789"CharStr="ABCDEFGHIJKLMNOPQRSTUVWXYZ"Select Case UCase(IsIgnoreCase) '选择字符串类型Case"A":CharStr=CharStr&LCase(CharStr)Case"U":CharStr=CharStrCase"L":CharStr=LCase(CharStr)Case Else:CharStr=CharStr&LCase(CharStr)End SelectSelect Case UCase(IsStatus)'输出组合类型Case"A":Str=NumStr&CharStrCase"N":Str=NumStr'Only NumberCase"C":Str=CharStr'Only CharCase Else:Str=NumStr&CharStrEnd SelectRandomizeFor RCodeItem=0To CodeLen-1RCodeStart=Int(Rnd*Len(Str))RCodeStr=RCodeStr&Mid(Str,RCodeStart+1,1)NextRandomStr=RCodeStrEnd Function4:asp取得某个网页的内容'取得某个网页的内容function getHTTPPage(url)dim Httpset Http=server.createobject("MSXML2.XMLHTTP")Http.open "GET",url,falseHttp.sendif Http.readystate<>4thenexit functionend ifgetHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")set http=nothingif err.number<>0thenerr.Clearend ifend functionFunction BytesToBstr(body,Cset)dim objstreamset objstream = Server.CreateObject("adodb.stream")objstream.Type = 1objstream.Mode =3objstream.Openobjstream.Write bodyobjstream.Position = 0objstream.Type = 2objstream.Charset = CsetBytesToBstr = objstream.ReadTextobjstream.Closeset objstream = nothingEnd Function5:asp的验证码'asp的验证码Sub Com_CreateValidCode(pSN)Response.Expires = -9999Response.AddHeader "Pr agma","no-cache"Response.AddHeader "cache-ctrol","no-cache"Response.ContentType = "Image/BMP"RandomizeDim i, ii, iiiConst cOdds = 8'杂点出现的机率Const cAmount = 10'文字数量Const cCode = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"'颜色的数据(字符,背景)Dim vColorData(1)vColorData(0) = ChrB(0) & ChrB(0) & ChrB(255) ' 蓝0,绿0,红0(黑色)vColorData(1) = ChrB(235) & ChrB(235) & ChrB(235) ' 蓝250,绿236,红211(浅蓝色)'随机产生字符Dim vCode(4), vCodesFor i = 0To3vCode(i) = Int(Rnd* cAmount)vCodes = vCodes & Mid(cCode, vCode(i) + 1, 1)NextSession(pSN) = vCodes '记录入Session' 字符的数据Dim vNumberData(35)vNumberData(0) = "1110000111110111101111011110111101001011110100101 111010010111101001011110111101111011110111110000111"vNumberData(1) = "1111011111110001111111110111111111011111111101111 111110111111111011111111101111111110111111100000111"vNumberData(2) = "1110000111110111101111011110111111111011111111011 111111011111111011111111011111111011110111100000011"vNumberData(3) = "1110000111110111101111011110111111110111111100111 111111101111111111011110111101111011110111110000111"vNumberData(4) = "1111101111111110111111110011111110101111110110111 111011011111100000011111110111111111011111111000011"vNumberData(5) = "1100000011110111111111011111111101000111110011101 111111110111111111011110111101111011110111110000111"vNumberData(6) = "1111000111111011101111011111111101111111110100011 111001110111101111011110111101111011110111110000111"vNumberData(7) = "1100000011110111011111011101111111101111111110111 111110111111111011111111101111111110111111111011111"vNumberData(8) = "1110000111110111101111011110111101111011111000011 111101101111101111011110111101111011110111110000111"vNumberData(9) = "1110001111110111011111011110111101111011110111001 111100010111111111011111111101111011101111110001111"vNumberData(10) = "111101111111110111111110101111111010111111101011 1111101011111100000111110111011111011101111000100011"vNumberData(11) = "100000011111011110111101111011110111011111000011 1111011101111101111011110111101111011110111000000111"vNumberData(12) = "111000001111011110111011111011101111111110111111 1110111111111011111111101111101111011101111110001111"vNumberData(13) = "100000111111011101111101111011110111101111011110 1111011110111101111011110111101111011101111000001111"vNumberData(14) = "1000000111110111101111011011111101101111110000111111011011111101101111110111111111011110111000000111"vNumberData(15) = "100000011111011110111101101111110110111111000011 1111011011111101101111110111111111011111111000111111"vNumberData(16) = "111000011111011101111011110111101111111110111111 1110111111111011100011101111011111011101111110001111"vNumberData(17) = "100010001111011101111101110111110111011111000001 1111011101111101110111110111011111011101111000100011"vNumberData(18) = "110000011111110111111111011111111101111111110111 1111110111111111011111111101111111110111111100000111"vNumberData(19) = "111000001111111011111111101111111110111111111011 1111111011111111101111111110111110111011111000011111"vNumberData(20) = "100010001111011101111101101111110101111111000111 1111010111111101101111110110111111011101111000100011"vNumberData(21) = "100011111111011111111101111111110111111111011111 1111011111111101111111110111111111011110111000000011"vNumberData(22) = "100010001111001001111100100111110010011111010101 1111010101111101010111110101011111010101111001010011"vNumberData(23) = "100010001111001101111100110111110101011111010101 1111010101111101100111110110011111011001111000110111"vNumberData(24) = "111000111111011101111011111011101111101110111110 1110111110111011111011101111101111011101111110001111"vNumberData(25) = "100000011111011110111101111011110111101111000001 1111011111111101111111110111111111011111111000111111"vNumberData(26) = "111000111111011101111011111011101111101110111110 1110111110111011111011101001101111011001111110001011"vNumberData(27) = "100000111111011101111101110111110111011111000011 1111010111111101101111110110111111011101111000110011"vNumberData(28) = "111000001111011110111101111011110111111111100111 1111111001111111111011110111101111011110111100000111"vNumberData(29) = "100000001110110110111111011111111101111111110111 1111110111111111011111111101111111110111111110001111"vNumberData(30) = "100010001111011101111101110111110111011111011101 1111011101111101110111110111011111011101111110001111"vNumberData(31) = "100010001111011101111101110111110111011111101011 1111101011111110101111111010111111110111111111011111"vNumberData(32) = "100101001111010101111101010111110101011111010101 1111001001111110101111111010111111101011111110101111"vNumberData(33) = "100010001111011101111110101111111010111111110111 1111110111111110101111111010111111011101111000100011"vNumberData(34) = "100010001111011101111101110111111010111111101011 1111110111111111011111111101111111110111111110001111"vNumberData(35) = "110000001111011101111111110111111110111111111011 1111110111111111011111111011111111101110111100000011"' 输出图像文件头Response.BinaryWrite ChrB(66) & ChrB(77) & ChrB(230) & ChrB(4) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & _ChrB(0) & ChrB(0) & ChrB(54) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(40) & ChrB(0) & ChrB(0) & ChrB(0) & _ChrB(40) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(10) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(1) & ChrB(0)' 输出图像信息头Response.BinaryWrite ChrB(24) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & Ch rB(0) & ChrB(176) & ChrB(4) & _ChrB(0) & ChrB(0) & ChrB(18) & ChrB(11) & ChrB(0) & ChrB(0) & ChrB(18) & ChrB(11) & ChrB(0) & ChrB(0) & _ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & C hrB(0)For i = 9To0Step -1' 历经所有行For ii = 0To3' 历经所有字For iii = 1To10' 历经所有像素' 逐行、逐字、逐像素地输出图像数据If Rnd* 99+ 1< cOdds Then' 随机生成杂点Response.BinaryWrite vColorData(0)ElseResponse.BinaryWrite vColorData(Mid(vNumberData(vCode(ii)), i * 10 + iii, 1))End IfNextNextNextEnd Subdim sNamesName = request("s")if sName = ""thenCall Com_CreateValidCode("VERIFYNUM")elseCall Com_CreateValidCode(sName)end if。
ASP验证码生成

在Web系统中很多时候需要用到校验码,例如我们经常遇到不少电子邮件、论坛的注册过程需要我们输入校验码,这是为了提高安全性。
今天我们就来讲讲如何生成校验码。
使用来生成校验码图像很方便,网上也有不少教程与文章有介绍,但是都讲的太简单了,不够实用。
我来介绍一点自己的思路,算是抛砖引玉吧。
首先我们来看看,生成校验码的一种常见方式:1.生成校验码的字符串2.将该字符串输出为图像具体步骤下面我们就开始简单的例子来介绍这个过程,首先打开,新建一个Web Site,添加一个新的Web Form,取名为VCode.aspx,在其代码文件(VCode.aspx.vb)中添加一个函数generateVCode,此函数用于生成校验码的字符串,具体代码如下:''' <summary>''' 产生随机数(包含字母与数字)用于校验码''' </summary>''' <param name="CodeLength"></param>''' <returns></returns>''' <remarks></remarks>Private Function generateVCode(ByVal CodeLength As Integer) As StringDim VCode As String = String.EmptyDim randObj As New Random()Dim c As Integer = 63For i As Byte = 1 To CodeLengthc = randObj.Next(35)If c >= 10 Thenc += 7End Ifc += 48VCode += Chr(c)NextReturn VCodeEnd Function上面的的函数使用随机数来代表需要产生的校验码,包含数字与大写的字母。
ASP.NET实现验证码图片

实现验证码图⽚新建⼀个checkcode.aspx⽂件,页⾯中不⽤写任何东西,在代码中,Page_Load中写⼊如下代码:string chkCode = string.Empty;int ix, iy;ix = 80;iy = 24;//颜⾊列表,⽤于验证码、噪线、噪点Color[] color ={ Color.Black, Color.Red, Color.Blue, Color.Green, Color.Orange, Color.Brown, Color.Brown, Color.DarkBlue }; //字体列表,⽤于验证码string[] font ={ "Times New Roman", "MS Mincho", "Book Antiqua", "Gungsuh", "MingLiU", "Arial" };//验证码的字符集,去掉了⼀些容易混淆的字符char[] character ={ '2', '3', '4', '5', '6', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'W', 'X', 'Y' };Random rnd = new Random();//⽣成验证码字符串for (int i = 0; i < 4; i++){chkCode += character[rnd.Next(character.Length)];}Bitmap bmp = new Bitmap(ix, iy);Graphics g = Graphics.FromImage(bmp);g.Clear(Color.White);//画噪线for (int i = 0; i < 10; i++){int x1 = rnd.Next(ix);int y1 = rnd.Next(iy);int x2 = rnd.Next(ix);int y2 = rnd.Next(iy);Color clr = color[rnd.Next(color.Length)];g.DrawLine(new Pen(clr), x1, y1, x2, y2);}//画验证码字符串for (int i = 0; i < chkCode.Length; i++){string fnt = font[rnd.Next(font.Length)];Font ft = new Font(fnt, 14, FontStyle.Bold);Color clr = color[rnd.Next(color.Length)];g.DrawString(chkCode[i].ToString(), ft, new SolidBrush(clr), (float)i * 16 + 2, (float)2);}//画噪点for (int i = 0; i < 50; i++){int x = rnd.Next(bmp.Width);int y = rnd.Next(bmp.Height);Color clr = color[rnd.Next(color.Length)];bmp.SetPixel(x, y, clr);}//将验证码写⼊SESSIONSession["checkcode"] = chkCode.ToLower();//清除该页输出缓存,设置该页⽆缓存Response.Buffer = true;Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0);Response.Expires = 0;Response.CacheControl = "no-cache";Response.AppendHeader("Pragma", "No-Cache");//将验证码图⽚写⼊内存流,并将其以 "image/Png" 格式输出MemoryStream ms = new MemoryStream();try{bmp.Save(ms, ImageFormat.Png);Response.ClearContent();Response.ContentType = "image/Png";Response.BinaryWrite(ms.ToArray());}finally{//显式释放资源bmp.Dispose();g.Dispose();}在login.aspx中,添加Image控件,设置ImageUrl=“checkcode.aspx" 即可。
页面刷新验证码的例子

页面刷新验证码的例子在现今互联网时代,验证码已经成为了网络安全的重要组成部分。
当用户在注册、登录等操作时,需要输入验证码,以保证操作的可信性。
而为了防止黑客破解密码,网站也会采用验证码的方式防范攻击。
在本文中,我们将通过一个简单的页面刷新验证码的例子,为大家详细讲解验证码的实现过程。
步骤一:第一步需要我们在HTML中定义一个画布,如下所示:<canvas id="captcha" width="120" height="40"></canvas>这里的id属性指定了画布的id,并设置了画布的宽和高。
步骤二:在JavaScript中定义生成验证码的函数。
在这个例子中,我们将以数字和字母形式随机生成验证码:function draw() {var ctx =document.getElementById("captcha").getContext('2d');ctx.clearRect(0, 0, 120, 40);ctx.font = "30px Arial";var code = "";var codeLength = 4;for (var i = 0; i < codeLength; i++) {var char = Math.floor(Math.random() * 36).toString(36); code += char;ctx.fillStyle ='#'+Math.floor(Math.random()*0xffffff).toString(16);ctx.fillText(char, 20 + i * 20, 30);}sessionStorage.setItem("captcha", code);}这个函数首先获取了画布的上下文,然后清除了之前的画布内容。
asp.ne t验证码

中的比较完美的验证码要实现如图的效果的验证码,分以下步骤:第一、布局好调用验证码的登录页面(命名:Login.aspx),注意:验证码位置可以是服务器控件Image,也可以是html标签写的<img>,但是图片url就是一个页面(命名:ValidateCode.aspx)(将在下面讲述。
)比如:<asp:Image ID=“vcImg”ImageUrl="~/ValidateCode.aspx" runat="server" />第二、生成类文件(命名:validatedCode)[csharp] view plaincopyprint?using System;using System.Data;using System.Configuration;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Xml.Linq;using System.Drawing;using System.IO;using System.Drawing.Imaging;/// <summary>/// Summary description for validatedCode/// </summary>public class validatedCode{#region 验证码长度(默认6个验证码的长度)int length = 4;public int Length{get { return length; }set { length = value; }}#endregion#region 验证码字体大小(为了显示扭曲效果,默认40像素,可以自行修改) int fontSize = 40;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;/// <summary>/// 正弦曲线Wave扭曲图片(Edit By )/// </summary>/// <param name="srcBmp">图片路径</param>/// <param name="bXDir">如果扭曲则选择为True</param>/// <param name="nMultValue">波形的幅度倍数,越大扭曲的程度越高,一般为3</param>/// <param name="dPhase">波形的起始相位,取值区间[0-2*PI)</param>/// <returns></returns>public System.Drawing.Bitmap TwistImage(Bitmap srcBmp, bool bXDir, double dMultValue, double dPhase){System.Drawing.Bitmap destBmp = new Bitmap(srcBmp.Width, srcBmp.Height);// 将位图背景填充为白色System.Drawing.Graphics graph = System.Drawing.Graphics.FromImage(destBmp);graph.FillRectangle(new SolidBrush(System.Drawing.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 < destBmp.Height; j++){double dx = 0;dx = bXDir ? (PI2 * (double)j) / dBaseAxisLen : (PI2 * (double)i) / dBaseAxisLen;dx += dPhase;double dy = Math.Sin(dx);// 取得当前点的颜色int nOldX = 0, nOldY = 0;nOldX = bXDir ? i + (int)(dy * dMultValue) : i;nOldY = bXDir ? j : j + (int)(dy * dMultValue);System.Drawing.Color color = srcBmp.GetPixel(i, j);if (nOldX >= 0 && nOldX < destBmp.Width&& nOldY >= 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(Fonts[findex], fSize, System.Drawing.FontStyle.Bold);b = new System.Drawing.SolidBrush(Colors[cindex]);if (i % 2 == 1){top = top2;}else{top = top1;}left = i * fWidth;g.DrawString(code.Substring(i, 1), f, b, left, top);}//画一个边框边框颜色为Color.Gainsborog.DrawRectangle(new Pen(Color.Gainsboro, 0), 0, 0, image.Width - 1, image.Height - 1);g.Dispose();//产生波形(Add By )image = TwistImage(image, true, 8, 4);return image;}#endregion#region 将创建好的图片输出到页面public void CreateImageOnPage(string code, HttpContext context){System.IO.MemoryStream ms = new System.IO.MemoryStream();Bitmap image = this.CreateImageCode(code);image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);context.Response.ClearContent();context.Response.ContentType = "image/Jpeg";context.Response.BinaryWrite(ms.GetBuffer());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 += arr[randValue];}return code;}public string CreateVerifyCode(){return CreateVerifyCode(0);}#endregion}PS:虽然不是我自己写的,但是可分享给大家。
ASP.NET页面刷新和定时跳转代码整理

页⾯刷新和定时跳转代码整理刷新的实现⽅法:=========================================== .net//第1:/*-- 内置跳转 ----*/Response.Redirect( Request.Url.ToString( ) );//第2:/*----内置 html ----*/Response.AddHeader( "Refresh","0" );//将指定的标头和值添加到此响应的 HTTP 标头。
//第3:Response.Write( "<script language=javascript>window.location.reload( );< /script>");//第4:/*-- 输出js代码跳转 ----*/Response.Write( "< script language=javascript>window.location.href=document.URL;< /script>");/*第5: ----js ----*/window.location.reload( );//第6:< meta http-equiv="refresh" content="300; url=target.html"> ⽤window.location.href//7< script language=''javascript''> window.navigate("本页⾯url"); < /script>===================================================================定时刷新:1,< script>setTimeout("location.href='url'",2000)< /script> 说明:url是要刷新的页⾯URL地址2000是等待时间=2秒,2,< meta name="Refresh" content="n;url"> 说明:n is the number of seconds to wait before loading the specified URL.url is an absolute URL to be loaded.n,是等待的时间,以秒为单位url是要刷新的页⾯URL地址3,< %response.redirect url%> 说明:⼀般⽤⼀个url参数或者表单传值判断是否发⽣某个操作(这个我还没清楚。
ASP 图片验证码

ASP 图片验证码为了保证我们网站的安全,在登录或者发布信息时最好增加验证码项,本案例实现图片验证码,在网上比较常见,而且更加安全,本案例包括2个文件,checkc ode.asp 负责生成和输出验证码,code.asp文件实现验证码的验证功能。
(1)我们建立一个名为checkode的文件夹,在该文件夹下新建名为checkcod e.asp文件。
(2)该文件中可以定义干扰点出现的概率,字符数量,图片宽度等参数,以便调整验证码的验证难度。
同时将获得到的随机数写入Session("GetCode")变量中,(4)生成的图片的相关参数,包含图片的坐标,随机转动角度,数字的颜色,图像的高度,宽度等详细参数。
详细说明请参阅程序中的注释。
代码如下所示:(5)再次在文件夹下建立一个名为code.asp文件。
该文件用于输出验证码,和进行验证码判断,当输入的验证码与系统生成的验证码一致时,将跳转到页面“hcode.asp”,将看到效果,每次页面验证码图片会产生新的验证码,如图7-13所示:码图7-15 再次点击图片时刷新验证码 图7-16 未通过验证时效果(7)当我们在验证码右侧的文本框中输入的数字,与系统显示的验证码不一致时,单击【提交】按钮后,将调用“if cstr(request.Form("code"))=cstr(Session("Ch eckCode")) then ”判断,此时不成立未能通过验证,执行“else ”程序,将弹出警告对话框,效果如图7-16所示。
(8)当输入正确的验证码,单击【提交】按钮时,“if cstr(request.Form("code "))=cstr(Session("CheckCode")) then “判断成立,将执行“response.Redirect(" ")”程序,跳转到 页面,效果如图7-17所示。
ASP.NET验证码实现(附源码)

验证码实现(附源码)⾸先看下效果实现(由于gif屏幕录制软件是即时找的,有些失祯)代码主要就是绘制验证码类的实现using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Drawing;using System.IO;namespace SecurityCodePic{public class DrawingSecurityCode{/// <summary>/// ⽣成验证码,并返回/// </summary>/// <returns></returns>public string GetSecurityCode(int n){string code = GenerateCheckCode(n);CreateCheckCodeImage(code);return code;}/// <summary>/// 动态⽣成指定数⽬的随机数或字母/// </summary>/// <param name="num">整数</param>/// <returns>返回验证码字符串</returns>private string GenerateCheckCode(int num){int number;//定义变量char code;string checkCode = String.Empty; //空字符串,只读Random random = new Random(); //定义随机变量实例for (int i=0; i < num;i++ ){//利⽤for循环⽣成指定数⽬的随机数或字母number = random.Next(); //返回⼀个⼩于指定的最⼤值的⾮负的随机数 next有三个构造函数if (number % 2 == 0){//产⽣⼀个⼀位数code = (char)('0' + (char)(number % 10));}else{ //产⽣⼀个⼤写字母code = (char)('A'+(char)(number % 26));}checkCode += code.ToString();}return checkCode;}/// <summary>/// 根据验证码字符串⽣成验证码图⽚/// </summary>/// <param name="checkCode">验证码字符串</param>private void CreateCheckCodeImage(string checkCode){if (checkCode == null || checkCode.Trim() == String.Empty) return;// 引⽤System.Drawing类库Bitmap myImage = new Bitmap(80, 30);//⽣成⼀个指定⼤⼩的位图Graphics graphics = Graphics.FromImage(myImage); //从⼀个位图⽣成⼀个画布try{graphics.Clear(Color.White); //清除整个绘画⾯并以指定的背景⾊填充,这⾥是把背景⾊设为⽩⾊Random random = new Random(); //实例化⼀个伪随机数⽣成器//画图⽚的前景噪⾳点,这⾥有100个for (int i = 0; i < 100; i++){int x = random.Next(myImage.Width);int y = random.Next(myImage.Height);myImage.SetPixel(x, y, Color.FromArgb(random.Next()));//指定坐标为x,y处的像素的颜⾊}//画图⽚的背景噪⾳线,这⾥为2条for (int i = 0; i < 2; i++){int x1 = random.Next(myImage.Width);int x2 = random.Next(myImage.Width);int y1 = random.Next(myImage.Height);int y2 = random.Next(myImage.Height);graphics.DrawLine(new Pen(Color.Black), x1, y1, x2, y2); //绘制⼀条坐标x1,y1到坐标x2,y2的指定颜⾊的线条,这⾥的线条为⿊⾊ }Font font = new Font("Arial", 15, FontStyle.Bold); //定义特定的⽂本格式,这⾥的字体为Arial,⼤⼩为15,字体加粗//根据矩形、起始颜⾊和结束颜⾊以及⽅向⾓度产⽣⼀个LinearGradientBrush实例---线性渐变System.Drawing.Drawing2D.LinearGradientBrush brush =new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, myImage.Width, myImage.Height),//在坐标0,0处实例化⼀个和myImage同样⼤⼩的矩形Color.Blue, Color.Red, 1.2f, true);//绘制⽂本字符串graphics.DrawString(checkCode, font, brush, 2, 2);//绘制有坐标对、宽度和⾼度指定的矩形---画图⽚的边框线graphics.DrawRectangle(new Pen(Color.Silver), 0, 0, myImage.Width - 1, myImage.Height - 1);//创建其⽀持存储器为内存的流MemoryStream ms = new MemoryStream();//将此图像以指定格式保存到指定的流中myImage.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); //这⾥是以gif的格式保存到内存中HttpContext.Current.Response.ClearContent(); //清除缓冲区流中的所有内容输出HttpContext.Current.Response.ContentType = "image/Gif"; //获取或设置输出流的HTTP MIME类型HttpContext.Current.Response.BinaryWrite(ms.ToArray()); //将⼀个⼆进制字符串写⼊HTTP输出流}finally{//释放占⽤资源graphics.Dispose();myImage.Dispose();}}}}然后使⽤SecurityCode.ashx⽂件调⽤上⾯类的⽅法实现using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace SecurityCodePic{/// <summary>/// SecurityCode1 的摘要说明/// </summary>public class SecurityCode1 : IHttpHandler{public void ProcessRequest(HttpContext context){DrawingSecurityCode sc = new DrawingSecurityCode();string SecurityCode = sc.GetSecurityCode(6);}public bool IsReusable{get{return false;}}}}最后就是页⾯图⽚路径的引⽤了<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SecurityCode_Test.aspx.cs" Inherits="SecurityCodePic.SecurityCode_Test" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head runat="server"><title>验证码的实现</title><style type="text/css">#VCodeImg { cursor: pointer;}</style></head><body><form id="form1" runat="server"><div><img id="VCodeImg" src="SecurityCode.ashx" alt="验证码" onclick="javascript:RefreshCode();" /></div></form><script type="text/javascript">function RefreshCode() {var random = Math.random();var img = document.getElementById("VCodeImg");img.src = "SecurityCode.ashx?" + random; //加上⽆意义的随机参数,浏览器才会认为是新地址,就会重新读取数据}</script></body></html>以上就是本⽂的全部,对了,还有源码下载分享给⼤家,欢迎⼤家下载。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文给大家分享的是一段使用asp实现的验证码功能,而且是带刷新的,代码非常简洁,非常实用,有需要的小伙伴可以参考下。
将以下代码放到一个单独的页面checkcode.asp
<%
Option Explicit
Response.buffer=true
Call Com_CreatValidCode("validateCode")
Sub Com_CreatValidCode(pSN)
' 禁止缓存
Response.Expires = -9999
Response.AddHeader "Pragma","no-cache"
Response.AddHeader "cache-ctrol","no-cache"
Response.ContentType = "Image/BMP"
Randomize
Dim i, ii, iii
Const cOdds = 2 ' 杂点出现的机率
Const cAmount = 10 ' 文字数量
Const cCode = "0123456789"
' 颜色的数据(字符,背景)
Dim vColorData(1)
vColorData(0) = ChrB(0) & ChrB(0) & ChrB(211) ' 蓝0,绿0,红0(黑色)
vColorData(1) = ChrB(255) & ChrB(255) & ChrB(255) ' 蓝250,绿236,红211(浅蓝色)
' 随机产生字符
Dim vCode(4), vCodes
For i = 0 To 3
vCode(i) = Int(Rnd * cAmount)
vCodes = vCodes & Mid(cCode, vCode(i) + 1, 1)
Next
Session(pSN) = vCodes '记录入Session
' 字符的数据
Dim vNumberData(9)
vNumberData(0) =
"11100001111101111011110111101111010010111101001011110100101111010010111101111011 11011110111
110000111"
vNumberData(1) =
"11110111111100011111111101111111110111111111011111111101111111110111111111011111111 10111111
100000111"
vNumberData(2) =
"1110000111110111101111011110111111111011111111011111111011111111011111111011111111 011110111
100000011"
vNumberData(3) =
"1110000111110111101111011110111111110111111100111111111101111111111011110111101111 011110111
110000111"
vNumberData(4) =
"1111101111111110111111110011111110101111110110111111011011111100000011111110111111 111011111
111000011"
vNumberData(5) =
"1100000011110111111111011111111101000111110011101111111110111111111011110111101111 011110111
110000111"
vNumberData(6) =
"111100011111101110111101111111110111111111010001111100111011110111101111011110111 1011110111
110000111"
vNumberData(7) =
"1100000011110111011111011101111111101111111110111111110111111111011111111101111111 110111111
111011111"
vNumberData(8) =
"111000011111011110111101111011110111101111100001111110110111110111101111011110111
1011110111
110000111"
vNumberData(9) =
"111000111111011101111101111011110111101111011100111110001011111111101111111110111 1011101111
110001111"
' 输出图像文件头
Response.BinaryWrite ChrB(66) & ChrB(77) & ChrB(230) & ChrB(4) & ChrB(0) & ChrB(0) & ChrB(0)
& ChrB(0) &_
ChrB(0) & ChrB(0) & ChrB(54) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(40) & ChrB(0) &_ ChrB(0) & ChrB(0) & ChrB(40) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(10) & ChrB(0) &_ ChrB(0) & ChrB(0) & ChrB(1) & ChrB(0)
' 输出图像信息头
Response.BinaryWrite ChrB(24) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(176)
& ChrB(4) &_
ChrB(0) & ChrB(0) & ChrB(18) & ChrB(11) & ChrB(0) & ChrB(0) & ChrB(18) & ChrB(11) &_ ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) &_ ChrB(0) & ChrB(0)
For i = 9 To 0 Step -1 ' 历经所有行
For ii = 0 To 3 ' 历经所有字
For iii = 1 To 10 ' 历经所有像素
' 逐行、逐字、逐像素地输出图像数据
If Rnd * 99 + 1 < cOdds Then ' 随机生成杂点
Response.BinaryWrite vColorData(0)
Else
Response.BinaryWrite vColorData(Mid(vNumberData(vCode(ii)), i * 10 + iii, 1))
End If
Next
Next
Next
End Sub
%>
需要用得页面用如下方式引用:
验证码:src="checkcode.asp " alt="验证码,看不清楚?请点击刷新验证码" height="10" style="cursor :
pointer;" onClick="this.src='checkcode.asp?t='+(new Date().getTime());" >
判断页面:
<%
if trim(session("validateCode")) <> trim(Request("txt_check")) then
ErrorMessage = "请输入正确的验证码"
response.write(" <script>alert('"&ErrorMessage&"');location.href='Default.asp' </script>") response.end
end if
%>
以上所述就是本文的全部内容了,希望大家能够喜欢。