改写的一个自动生成图片验证码的类asp.net(vb)

简介: 还记得以前我的BLOGS上被别人发了很多垃圾广告留言,每一个小时被发上一条,因为那时这个BLOG发留言可以直接发,别人是用机器自动发的,很是头痛,那时就叫DUDU给发留言加上验证码.DUDU动作很快,几下就搞上了,别人的机器自动发就不行了,现在就舒服多了.

还记得以前我的BLOGS上被别人发了很多垃圾广告留言,每一个小时被发上一条,因为那时这个BLOG发留言可以直接发,别人是用机器自动发的,很是头痛,那时就叫DUDU给发留言加上验证码.DUDU动作很快,几下就搞上了,别人的机器自动发就不行了,现在就舒服多了.

今天无意中看到别人写的一个自动生成验证码的程序,不过是C#的.还好看了一些时间的C#,能看懂了,为了方便,还是改写成了vb.net的类,这样存在这里,也方便以后自己好查用.
这里是生成的效果:{9AC97966-8717-421A-9D27-768E07066443}0.jpg
下面是类的代码,有一些简单的注释,能看明白了.嘿嘿!

img_a6339ee3e57d1d52bc7d02b338e15a60.gif Imports  System
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
Imports  System.Drawing.Drawing2D
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
Imports  System.Drawing.imaging
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
Imports  System.Drawing
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
Imports  System.Web.UI
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
Imports  System.IO
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif
Namespace Validate Namespace Validate
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
Public Class CreatValidateNumberClass CreatValidateNumber
img_33d02437d135341f0800e3d415312ae8.gif        
'生成验证码
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif
        Public Function CreatValidateNumber()Function CreatValidateNumber(ByVal length As IntegerAs String
img_33d02437d135341f0800e3d415312ae8.gif            
Dim randNumber() As Integer = New Integer(length) {}
img_33d02437d135341f0800e3d415312ae8.gif            
Dim ValidateNumber() As Integer = New Integer(length) {}
img_33d02437d135341f0800e3d415312ae8.gif            
Dim ValidateNumberStr As String = ""
img_33d02437d135341f0800e3d415312ae8.gif            
Dim seekseek As Integer = CInt(DateTime.Now.Second)
img_33d02437d135341f0800e3d415312ae8.gif            
Dim seekrand As Random = New Random(seekseek)
img_33d02437d135341f0800e3d415312ae8.gif            
Dim beginseek = Int(seekrand.Next(0, Int32.MaxValue - length * 10000))
img_33d02437d135341f0800e3d415312ae8.gif            
Dim seeks() As Integer = New Integer(length) {}
img_33d02437d135341f0800e3d415312ae8.gif            
Dim i As Integer
img_33d02437d135341f0800e3d415312ae8.gif            
'生成起始序列值
img_33d02437d135341f0800e3d415312ae8.gif
            For i = 0 To length - 1
img_33d02437d135341f0800e3d415312ae8.gif                beginseek 
+= 10000
img_33d02437d135341f0800e3d415312ae8.gif                seeks(i) 
= beginseek
img_33d02437d135341f0800e3d415312ae8.gif            
Next
img_33d02437d135341f0800e3d415312ae8.gif            
'生成随机数字
img_33d02437d135341f0800e3d415312ae8.gif
            For i = 0 To length - 1
img_33d02437d135341f0800e3d415312ae8.gif                
Dim rand As Random = New Random(seeks(i))
img_33d02437d135341f0800e3d415312ae8.gif                
Dim pownum As Integer = 1 * Int(Math.Pow(10, length))
img_33d02437d135341f0800e3d415312ae8.gif                randNumber(i) 
= rand.Next(pownum, Int32.MaxValue)
img_33d02437d135341f0800e3d415312ae8.gif            
Next
img_33d02437d135341f0800e3d415312ae8.gif            
'抽取随机数字
img_33d02437d135341f0800e3d415312ae8.gif
            For i = 0 To length - 1
img_33d02437d135341f0800e3d415312ae8.gif                
Dim numstr As String = randNumber(i).ToString
img_33d02437d135341f0800e3d415312ae8.gif                
Dim numlength As Integer = numstr.Length
img_33d02437d135341f0800e3d415312ae8.gif                
Dim rand As New Random
img_33d02437d135341f0800e3d415312ae8.gif                
Dim numPosition As Integer = rand.Next(0, numlength - 1)
img_33d02437d135341f0800e3d415312ae8.gif                ValidateNumber(i) 
= Int32.Parse(numstr.Substring(numPosition, 1))
img_33d02437d135341f0800e3d415312ae8.gif            
Next
img_33d02437d135341f0800e3d415312ae8.gif            
'生成验证码
img_33d02437d135341f0800e3d415312ae8.gif
            For i = 0 To length - 1
img_33d02437d135341f0800e3d415312ae8.gif                ValidateNumberStr 
+= ValidateNumber(i).ToString
img_33d02437d135341f0800e3d415312ae8.gif            
Next
img_33d02437d135341f0800e3d415312ae8.gif            
Return ValidateNumberStr
img_105a1e124122b2abcee4ea8e9f5108f3.gif        
End Function

img_33d02437d135341f0800e3d415312ae8.gif        
'创建验证码图片
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif
        Public Sub CreatevalidateGraphic()Sub CreatevalidateGraphic(ByVal page As Page, ByVal validatenum As String)
img_33d02437d135341f0800e3d415312ae8.gif            
Dim image As Bitmap = New Bitmap(CInt(Math.Ceiling(validatenum.Length * 12.5)), 22)
img_33d02437d135341f0800e3d415312ae8.gif            
Dim g As Graphics = Graphics.FromImage(image)
img_33d02437d135341f0800e3d415312ae8.gif            
Try
img_33d02437d135341f0800e3d415312ae8.gif                
'生成随机生成器
img_33d02437d135341f0800e3d415312ae8.gif
                Dim random As New Random
img_33d02437d135341f0800e3d415312ae8.gif                
'清空图片背景色
img_33d02437d135341f0800e3d415312ae8.gif
                g.Clear(Color.White)
img_33d02437d135341f0800e3d415312ae8.gif                
'画图片的干扰线
img_33d02437d135341f0800e3d415312ae8.gif
                Dim i As Integer
img_33d02437d135341f0800e3d415312ae8.gif                
For i = 0 To 24
img_33d02437d135341f0800e3d415312ae8.gif                    
Dim x1 As Integer = random.Next(image.Width)
img_33d02437d135341f0800e3d415312ae8.gif                    
Dim x2 As Integer = random.Next(image.Width)
img_33d02437d135341f0800e3d415312ae8.gif                    
Dim y1 As Integer = random.Next(image.Height)
img_33d02437d135341f0800e3d415312ae8.gif                    
Dim y2 As Integer = random.Next(image.Height)
img_33d02437d135341f0800e3d415312ae8.gif                    g.DrawLine(
New Pen(Color.Silver), x1, y1, x2, y2)
img_33d02437d135341f0800e3d415312ae8.gif                
Next
img_33d02437d135341f0800e3d415312ae8.gif                
'画验证码
img_33d02437d135341f0800e3d415312ae8.gif
                Dim font As Font = New Font("Arial"12, (FontStyle.Bold And FontStyle.Italic))
img_33d02437d135341f0800e3d415312ae8.gif                
Dim brush As LinearGradientBrush = New LinearGradientBrush(New Rectangle(00, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, True)
img_33d02437d135341f0800e3d415312ae8.gif                g.DrawString(validatenum, font, brush, 
32)
img_33d02437d135341f0800e3d415312ae8.gif                
'画前景干扰点
img_33d02437d135341f0800e3d415312ae8.gif
                For i = 0 To 24
img_33d02437d135341f0800e3d415312ae8.gif                    
Dim x As Integer = random.Next(image.Width)
img_33d02437d135341f0800e3d415312ae8.gif                    
Dim y As Integer = random.Next(image.Height)
img_33d02437d135341f0800e3d415312ae8.gif                    image.SetPixel(x, y, Color.FromArgb(random.Next()))
img_33d02437d135341f0800e3d415312ae8.gif                
Next
img_33d02437d135341f0800e3d415312ae8.gif                
'画图片的边框线
img_33d02437d135341f0800e3d415312ae8.gif
                g.DrawRectangle(New Pen(Color.Silver), 00, image.Width - 1, image.Height - 1)
img_33d02437d135341f0800e3d415312ae8.gif                
'保存图片
img_33d02437d135341f0800e3d415312ae8.gif
                Dim stream As New MemoryStream
img_33d02437d135341f0800e3d415312ae8.gif                image.Save(stream, ImageFormat.Jpeg)
img_33d02437d135341f0800e3d415312ae8.gif                
'输出图片
img_33d02437d135341f0800e3d415312ae8.gif
                page.Response.Clear()
img_33d02437d135341f0800e3d415312ae8.gif                page.Response.ContentType 
= "image/jpeg"
img_33d02437d135341f0800e3d415312ae8.gif                page.Response.BinaryWrite(stream.ToArray())
img_33d02437d135341f0800e3d415312ae8.gif            
Catch ex As Exception
img_33d02437d135341f0800e3d415312ae8.gif            
Finally
img_33d02437d135341f0800e3d415312ae8.gif                g.Dispose()
img_33d02437d135341f0800e3d415312ae8.gif                image.Dispose()
img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif            
End Try
img_105a1e124122b2abcee4ea8e9f5108f3.gif        
End Sub

img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif
img_105a1e124122b2abcee4ea8e9f5108f3.gif    
End Class

img_05dd8d549cff04457a6366b0a7c9352a.gif
End Namespace


下面是这个类的引用一个小例子

HTML部份:

img_405b18b4b6584ae338e0f6ecaf736533.gif img_1c53668bcee393edac0d7b3b3daff1ae.gif img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="ValidateNumber.WebForm1"%>
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
<HTML>
img_a6339ee3e57d1d52bc7d02b338e15a60.gif    
<HEAD>
img_a6339ee3e57d1d52bc7d02b338e15a60.gif        
<title>WebForm1title>
img_a6339ee3e57d1d52bc7d02b338e15a60.gif        
<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
img_a6339ee3e57d1d52bc7d02b338e15a60.gif        
<meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
img_a6339ee3e57d1d52bc7d02b338e15a60.gif        
<meta name="vs_defaultClientScript" content="JavaScript">
img_a6339ee3e57d1d52bc7d02b338e15a60.gif        
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
img_a6339ee3e57d1d52bc7d02b338e15a60.gif    
HEAD>
img_a6339ee3e57d1d52bc7d02b338e15a60.gif    
<body MS_POSITIONING="GridLayout">
img_a6339ee3e57d1d52bc7d02b338e15a60.gif        
<form id="Form1" method="post" runat="server">
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif            
<FONT face="宋体">img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif validates.CreatevalidateGraphic(Me, vali) %>FONT>
img_a6339ee3e57d1d52bc7d02b338e15a60.gif        
form>
img_a6339ee3e57d1d52bc7d02b338e15a60.gif    
body>
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
HTML>
程序部份:
img_405b18b4b6584ae338e0f6ecaf736533.gif img_1c53668bcee393edac0d7b3b3daff1ae.gif Public   Class WebForm1 Class WebForm1
img_33d02437d135341f0800e3d415312ae8.gif    
Inherits System.Web.UI.Page
img_33d02437d135341f0800e3d415312ae8.gif
img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif
Web 窗体设计器生成的代码#Region " Web 窗体设计器生成的代码 "
img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif    
'该调用是 Web 窗体设计器所必需的。
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()Sub InitializeComponent()
img_33d02437d135341f0800e3d415312ae8.gif
img_105a1e124122b2abcee4ea8e9f5108f3.gif    
End Sub

img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif    
'注意: 以下占位符声明是 Web 窗体设计器所必需的。
img_33d02437d135341f0800e3d415312ae8.gif
    '不要删除或移动它。
img_33d02437d135341f0800e3d415312ae8.gif
    Private designerPlaceholderDeclaration As System.Object
img_33d02437d135341f0800e3d415312ae8.gif
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
Private Sub Page_Init()Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
img_33d02437d135341f0800e3d415312ae8.gif        
'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
img_33d02437d135341f0800e3d415312ae8.gif
        '不要使用代码编辑器修改它。
img_33d02437d135341f0800e3d415312ae8.gif
        InitializeComponent()
img_105a1e124122b2abcee4ea8e9f5108f3.gif    
End Sub

img_33d02437d135341f0800e3d415312ae8.gif
img_105a1e124122b2abcee4ea8e9f5108f3.gif
#End Region

img_33d02437d135341f0800e3d415312ae8.gif    
Public validates As New Validate.CreatValidateNumber
img_33d02437d135341f0800e3d415312ae8.gif    
Public vali As String
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
Private Sub Page_Load()Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
img_33d02437d135341f0800e3d415312ae8.gif        
'在此处放置初始化页的用户代码
img_33d02437d135341f0800e3d415312ae8.gif

img_33d02437d135341f0800e3d415312ae8.gif        vali 
= validates.CreatValidateNumber(5)
img_33d02437d135341f0800e3d415312ae8.gif        
'validate.CreatevalidateGraphic(Me, vali)
img_105a1e124122b2abcee4ea8e9f5108f3.gif
    End Sub

img_33d02437d135341f0800e3d415312ae8.gif
img_05dd8d549cff04457a6366b0a7c9352a.gif
End Class

存于此,以供它日之用,还请大家指教.
相关文章
|
开发框架 前端开发 .NET
ASP.NET Core 基础知识之​Startup 类配置
Startup 类配置服务和应用的请求管道。
151 0
|
开发框架 前端开发 安全
ASP.NET Core Startup类Config gure()方法|ASP.NET Core 中间件详细说明
目录 Startup 类 Configure() 方法 中间件 使用中间件 Configure 方法 的参数 IApplicationBuilder Extension Methods(拓展方法)--微软提供的中间件
182 2
ASP.NET Core Startup类Config gure()方法|ASP.NET Core 中间件详细说明
|
存储 开发框架 前端开发
ASP.NET MVC5----了解我们使用的@HTML帮助类
ASP.NET MVC5----了解我们使用的@HTML帮助类
272 0
ASP.NET MVC5----了解我们使用的@HTML帮助类
|
XML 开发框架 JSON
ASP.NET Core: 二十一. 内容协商与自定义IActionResult和格式化类(五)
上一章的结尾留下了一个问题:同样是ObjectResult,在执行的时候又是如何被转换成string和JSON两种格式的呢? 本章来解答这个问题,这里涉及到一个名词:“内容协商”。除了这个,本章将通过两个例子来介绍如何自定义IActionResult和格式化类。
227 0
ASP.NET Core: 二十一. 内容协商与自定义IActionResult和格式化类(五)
|
JSON 开发框架 .NET
ASP.NET Core: 二十一. 内容协商与自定义IActionResult和格式化类(四)
上一章的结尾留下了一个问题:同样是ObjectResult,在执行的时候又是如何被转换成string和JSON两种格式的呢? 本章来解答这个问题,这里涉及到一个名词:“内容协商”。除了这个,本章将通过两个例子来介绍如何自定义IActionResult和格式化类。
166 0
ASP.NET Core: 二十一. 内容协商与自定义IActionResult和格式化类(四)
|
JSON 开发框架 .NET
ASP.NET Core: 二十一. 内容协商与自定义IActionResult和格式化类(一)
上一章的结尾留下了一个问题:同样是ObjectResult,在执行的时候又是如何被转换成string和JSON两种格式的呢? 本章来解答这个问题,这里涉及到一个名词:“内容协商”。除了这个,本章将通过两个例子来介绍如何自定义IActionResult和格式化类。
338 0
ASP.NET Core: 二十一. 内容协商与自定义IActionResult和格式化类(一)
|
JSON 开发框架 .NET
ASP.NET Core: 二十一. 内容协商与自定义IActionResult和格式化类(三)
上一章的结尾留下了一个问题:同样是ObjectResult,在执行的时候又是如何被转换成string和JSON两种格式的呢? 本章来解答这个问题,这里涉及到一个名词:“内容协商”。除了这个,本章将通过两个例子来介绍如何自定义IActionResult和格式化类。
394 0
|
JSON 开发框架 .NET
ASP.NET Core: 二十一. 内容协商与自定义IActionResult和格式化类(二)
上一章的结尾留下了一个问题:同样是ObjectResult,在执行的时候又是如何被转换成string和JSON两种格式的呢? 本章来解答这个问题,这里涉及到一个名词:“内容协商”。除了这个,本章将通过两个例子来介绍如何自定义IActionResult和格式化类。
279 0
|
开发框架 前端开发 .NET
ASP.NET Core如何自动生成小写的破折号路由
默认情况下,ASP.NET Core使用如 http://localhost:5000/HomeIndex 类的大驼峰路由。但是如果想使用小写的路由,并且这些路由用破折号分隔:http://localhost:5000/home-index它们比较常见且一致。我们该怎么做呢?
186 0