ASP.NET(VB) 图片验证码

本文介绍了一种使用ASP.NET和VB.NET实现的图片验证码功能。该方法通过生成随机字母和数字组合,并将其绘制到图片上,以创建验证码。文章提供了完整的VB.NET代码示例,包括如何设置页面、生成验证码图片及在网页中使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>
-----------

注意事项:调试模式请把DLL和辅助文件程序运行的目录下,其他文件也设置好相应路径,否则会调试出错。 DLL一共4主个命令,3个辅助命令,可以应对各种情况。 1.loadcode:载入验证码 2.Recognition:识别 3.outitem:取项目名称 4.Writepic:保存图片 5.Recognitiond:另外一种识别,和识别1的区别是不需要传递指针参数。 6.yLength:返回识别结果长度。 7.tebie: 特殊方式处理图片时使用。 [in]:传入参数 [out]:接收参数 以下DLL对于整数型不需要用的就传递 0 ,文本不需要用的就传递 空文本。 文件说明: ycode.dll主调用DLL,其他的为,辅助文件。 ----------------------------------------------------------------------------------- 一般调用顺序为 loadcode - Recognition - Writepic ----------------------------------------------------------------------------------- .DLL命令 loadcode, 整数型, "ycode.dll" 返回项目数 [in].参数 code, 整数型 1)验证码库字节集指针地址 [in].参数 Length, 整数型 2)指针长度 [in].参数 Address, 文本型 3)验证码库的路径 [in].参数 pass, 文本型 4)验证码库的密码 备注:1+2和3任意选一组就可以了. 4.输入相应的密码,没有密码就传递一个空文本就可以了. VB申明: Declare Function loadcode Lib "ycode.dll" Alias "loadcode" (ByVal code As Long, ByVal length As Long, ByVal address As String, ByVal pass As String) As Long 返回值 Long,返回项目个数。 ----------------------------------------------------------------------------------- .DLL命令 outitem, 文本型, "ycode.dll" 返回项目名称 [in].参数 no, 整数型 1) 项目序号 VB申明: Declare Function outitem Lib "ycode.dll" Alias "outitem" (ByVal no As Long) As String 返回值 String,返回指定项目序号的项目名字。 ----------------------------------------------------------------------------------- .DLL命令 Recognition, 整数型, "ycode.dll" 返回识别结果内存指针 [in].参数 ItemNo, 整数型 1)项目号 [in].参数 picin, 整数型 2)图片内存指针地址 [in].参数 Length, 整数型 3)指针长度 [in].参数 Address1, 文本型 4)验证码网络路径 [in].参数 Address2, 文本型 5)验证码本地路径 [out].参数 lppicout, 整数型, 传址, 6)返回:图片指针 [out].参数 lpLength, 整数型, 传址, 7)返回:指针长度 [out].参数 cLength, 整数型, 传址, 8)返回:字符长度 备注:1,将按相应的序号载入相应识别库并识别,如只有一个项目那就传1。 2+3或4或5任选一个。传递验证码图片数据或网络地址或本地图片路径,如果都不传递的话将按识别库中的默认数据获取。 VB申明: Declare Function Recognition Lib "ycode.dll" Alias "Recognition" (ByVal ItemNo As Long, ByVal picin As Long, ByVal Length As Long, ByVal Address1 As String, ByVal Address2 As String, lppicout As L
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值