Asp.Net生成图片验证码(vb)

本文介绍了一种使用VB实现的验证码生成与验证方法。通过随机生成包含字母与数字的验证码,并将其显示在图片中,增加了安全性。同时展示了如何在用户输入后进行验证比对。

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

Validate.vb
代码如下
Imports System
Imports System.Drawing.Drawing2D
Imports System.Drawing.imaging
Imports System.Drawing
Imports System.Web.UI
Imports System.IO
Public Class ValidateClass Validate
    Public Class CreatValidateNumberClass CreatValidateNumber
        '生成验证码
        Public Function CreatValidateNumber()Function CreatValidateNumber(ByVal length As Integer)
            Dim vchar As String = "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,w,x,y,z"
            Dim vcarray() As String = Split(vchar, ",") '将字符串生成数组 
            Dim vnum As String = ""
            Dim i As Byte
            For i = 1 To length
                Randomize()
                vnum = vnum & vcarray(Int(35 * Rnd())) '数组一般从0开始读取,所以这里为35*rnd 
            Next
            Return vnum
        End Function
        '创建验证码图片
        Public Sub CreatevalidateGraphic()Sub CreatevalidateGraphic(ByVal page As Page, ByVal validatenum As String)
            Dim image As Bitmap = New Bitmap(CInt(Math.Ceiling(validatenum.Length * 12.5)), 22)
            Dim g As Graphics = Graphics.FromImage(image)
            Try
                '生成随机生成器
                Dim random As New Random
                '清空图片背景色
                g.Clear(Color.White)
                '画图片的干扰线
                Dim i As Integer
                For i = 0 To 24
                    Dim x1 As Integer = random.Next(image.Width)
                    Dim x2 As Integer = random.Next(image.Width)
                    Dim y1 As Integer = random.Next(image.Height)
                    Dim y2 As Integer = random.Next(image.Height)
                    g.DrawLine(New Pen(Color.Silver), x1, y1, x2, y2)
                Next
                '画验证码
                Dim font As Font = New Font("Arial", 12, (FontStyle.Bold And FontStyle.Italic))
                Dim brush As LinearGradientBrush = New LinearGradientBrush(New Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, True)
                g.DrawString(validatenum, font, brush, 3, 2)
                '画前景干扰点
                For i = 0 To 24
                    Dim x As Integer = random.Next(image.Width)
                    Dim y As Integer = random.Next(image.Height)
                    image.SetPixel(x, y, Color.FromArgb(random.Next()))
                Next
                '画图片的边框线
                g.DrawRectangle(New Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1)
                '保存图片
                Dim stream As New MemoryStream
                image.Save(stream, ImageFormat.Jpeg)
                '输出图片
                page.Response.Clear()
                page.Response.ContentType = "image/jpeg"
                page.Response.BinaryWrite(stream.ToArray())
            Catch ex As Exception
            Finally
                g.Dispose()
                image.Dispose()
            End Try
        End Sub
    End Class
End Class
新建一个img.aspx的窗体
后台代码如下
Public Class imgClass img
    Inherits System.Web.UI.Page
Web 窗体设计器生成的代码#Region " Web 窗体设计器生成的代码 "
    '该调用是 Web 窗体设计器所必需的。
     Private Sub InitializeComponent()Sub InitializeComponent()
    End Sub
    '注意: 以下占位符声明是 Web 窗体设计器所必需的。
    '不要删除或移动它。
    Private designerPlaceholderDeclaration As System.Object
    Private Sub Page_Init()Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
        '不要使用代码编辑器修改它。
        InitializeComponent()
    End Sub
#End Region
    Public validates As New Validate.CreatValidateNumber
    Public vali As String
    Private Sub Page_Load()Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '在此处放置初始化页的用户代码
        vali = validates.CreatValidateNumber(5)
        validates.CreatevalidateGraphic(Me, vali)
        Session("vali") = vali
    End Sub
End Class
调用的HMTL
    
        WebForm1
        
        
        
        
    
    
        
            
            
            
        
    
后台
    Private Sub Button1_Click()Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If tb_valide.Text = Session("vali") Then
            Response.Write("提示:验证通过")
        Else
            Response.Write("所填写的验证码与所给的不符")
        End If
    End Sub
完成效果如下
https://i-blog.csdnimg.cn/blog_migrate/d5f4041da8ab4d85249d0cd5d62f6689.jpeg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值