ASP.NET图片验证码大全
ASP.NET(VB) 图片验证码 Jerry(k613@21cn.com)
根据网友的C#.NET图片验证改为VB.NET而已,由于VB.NET不支持unchecked,故去掉了按时间种子生成随机数的函
数部分。测试中并无出现相同的验证码。
ValidCode.vb -------------- Imports System Imports System.Drawing Imports System.Web Imports System.Web.UI
Public Class ValidCode Inherits Page
'输入验证图片 Public Sub DrawImage() Dim theCode As String theCode = RndNum(4) HttpContext.Current.Session("ValidCode") = theCode '保存验证码到Session,以便验证。 CreateValidImage(theCode) End Sub
'生成验证图片 '参数:checkCode 验证字符 Private Sub CreateValidImage(checkCode As String) Dim iWidth As Integer = checkCode.Length * 15 Dim image As New Bitmap(iWidth, 25) '图片大小 Dim g As Graphics = Graphics.FromImage(image) g.Clear(Color.White) '定义颜色 Dim c As Color() = {Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Red,
Color.Brown, Color.DarkCyan, Color.Purple}
'定义字体 Dim font As String() = {"Verdana","System","Comic Sans MS","Arial","宋体"}
'随机输出噪点 Dim rand As New Random() Dim i As integer For i = 0 To 49 Dim x As Integer = rand.Next(image.Width) Dim y As Integer = rand.Next(image.Height) g.DrawRectangle( New Pen(Color.LightGray,0), x, y, 1, 1) Next
'输出不同字体和颜色的验证码字符 Dim j As Short For j = 0 To checkCode.Length - 1 Dim cIndex As Short = rand.Next(8) '随机颜色 Dim fIndex As Short = rand.Next(5) '随机字体 Dim f As New Font(font(fIndex), 12, FontStyle.Regular) '12磅,斜体 Dim b As New SolidBrush(c(cIndex)) '定义单色画刷 Dim PointY As Integer = 4 If (j+1) Mod 2 = 0 Then PointY = 2 End If g.DrawString(checkCode.SubString(j,1), f, b, 3+(j*13), PointY) Next '画外框 g.DrawRectangle(New Pen(Color.Gray,0), 0, 0, image.Width-1, image.Height-1) '输出到浏览器 Dim msOutput As New System.IO.MemoryStream() image.Save(msOutput, Imaging.ImageFormat.Jpeg) HttpContext.Current.Response.ClearContent() HttpContext.Current.Response.ContentType = "image/Jpeg" HttpContext.Current.Response.BinaryWrite(msOutput.ToArray()) '释放 g.Dispose() image.Dispose() End Sub
'生成随机字母或数字组合 '参数:VCodeNum 生成随机字母或数字的个数 Private Function RndNum(VCodeNum As Short) As String Dim VChar As 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,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" Dim VCharArray As String() = VChar.Split(",") Dim ArrayLength As Integer = VCharArray.Length '数组长度 Dim rand As New Random() Dim rndInt As Integer '随机数 Dim CodeNum As String = "" '用于返回结果 Dim i As Integer For i = 0 To VCodeNum - 1 rndInt = rand.Next(ArrayLength) CodeNum &= VCharArray(rndInt) Next
Return CodeNum End Function
End Class ------------
ImageCode.aspx <%@ Page Language="VB" Inherits="ValidCode" Src="ValidCode.vb" %> <script runat="server"> Sub Page_Load() Dim imgCode As New ValidCode imgCode.DrawImage() End Sub </script> ------------
Login.aspx <script language="vb" runat="server"> Sub ChangeCode_Click(s as Object, e as EventArgs) ImageCode.DataBind() End Sub </script> <body><form runat="server"> <p><asp:TextBox ID="code" runat="server" /> <asp:Image ID="ImageCode" ImageUrl="ImageCode.aspx" runat="server" /> <p><asp:LinkButton ID="ChangeCode" Text="看不清楚?换一个验证码" OnClick="ChangeCode_Click"
runat="server" /> </form> </body> -----------