验证码(CAPTCHA)是“Completely AutomatedPublicTuring test to tell Computers andHumansApart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机和人的公共全自动程序。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。使用验证码,可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试。

对于验证码,我们已经司空见惯了,大家想不想自己编写一个验证码生成器,应用在我们的程序中?下面我给大家介绍一个VB编写的验证码生成器。

1.界面展示

2.代码详解:

(1)模块部分:定义一个产生验证码的类函数

(2)类模块部分:

自定义一个产生验证码的函数。该函数有一个参数:验证码的位数;返回值为随机产生的验证码字符串,字符串由数字、大写字母和小写字母组成。使用chr函数,由随机产生的ASCII码得到随机的字符,将各位上产生的字符连起来,组成要产生的验证码字符串。

Public Function MakeKey(ByVal Bt As Integer) As String
Dim I As Integer '表示字符串的第几位
Dim m As Integer '表示该位上随机产生字符的ASCII
'随机产生字符
Randomize Timer '用当前的时间作为种子来产生一个随机整数 While I <> Bt
Select Case Int(3 * Rnd + 1) '产生1~3之间的数字,表示3类字符
Case 1 '0~9之间的数字 ASCII 范围为:48~57
m = Int(10 * Rnd + 48)
Case 2 'a~z之间的字符 ASCII 范围为:97~122
m = Int(26 * Rnd + 97)
Case 3 'A~Z之间的字符 ASCII 范围为:65~90
m = Int(26 * Rnd + 65)
End Select
I = I + 1
MakeKey = MakeKey & Chr(m)
Wend
End Function

自定义用来检验产生的验证码SourStr与输入的验证码ObjStr 是否一致的函数,该函数有三个参数,分别是SourStr 、ObjStr和BorS。首先判断产生的验证码与输入的验证码位数是否相等,然后再检查字符串的内容。SourStr和ObjStr为string型;BorS为Boolean型,当其为真表示忽略大小写,为否则要求输入的验证码与产生的验证码一模一样,区分大小写。函数返回值为是否相等。

Public Function StringEqu(ByVal SourStr As String, ByVal ObjStr As String, ByVal BorS As Boolean) As Boolean

Dim I As Integer  '字符串的第几位
I = 1 '长度不相等
If Len(SourStr) <> Len(ObjStr) Then
StringEqu = False
Exit Function
End If If BorS = False Then '不忽略大小写
If SourStr = ObjStr Then
StringEqu = True
Else
StringEqu = False
End If
Else '忽略大小写
While I <> Len(SourStr) + 1
If Asc(Mid$(SourStr, I, 1)) = Asc(Mid$(ObjStr, I, 1)) + 32 Or _
Asc(Mid$(SourStr, I, 1)) = Asc(Mid$(ObjStr, I, 1)) - 32 Or _
Asc(Mid$(SourStr, I, 1)) = Asc(Mid$(ObjStr, I, 1)) Then
StringEqu = True
Else
StringEqu = False
End If
I = I + 1
Wend
End If
End Function

(3)主窗体部分:

点击产生验证码按钮,调用类函数Makekey生成验证码。

Private Sub cmdshow_Click()
txtInput.Text = ""
lblShow.Caption = mysecuritycode.MakeKey(4) '显示生成的验证码,四位
txtInput.SetFocus
End Sub

在验证码输入框中输入字符后,点击确定,调用类函数StringEqu验证输入的验证码是否正确。

Private Sub cmdok_Click()
Dim a As Boolean
a = mysecuritycode.StringEqu(lblShow.Caption, txtInput.Text, 1) '第三个参数非零,表示忽略大小写
If a Then
MsgBox "验证码输入正确!", vbInformation, "成功"
Else
MsgBox "输入错误,请重新输入!", vbCritical, "失败"
txtInput.SelStart = 0
txtInput.SelLength = Len(txtInput)
txtInput.SetFocus
End If
End Sub

赶快尝试一下吧!让我们的程序更安全,上档次。

VB编写的验证码生成器的更多相关文章

  1. 编写自定义Yeoman生成器

    转载自JSCON-简时空:<自定义Yeoman生成器> 1.Getting Started 1.1.设置Node模块 Yeoman提供了generator-generator方便快速编写自 ...

  2. JavaUtil_04_验证码生成器

    一.原理 验证码其实就是随机串.原理上可分为两种: 1.简单的验证码 直接通过字母和数字的ASCII码生成.本文采用的验证码就是这种. 2.复杂的验证码 通过一个随机串,一个指定串(如accesske ...

  3. 编写自定义Yeoman生成器简述

    1. 安装生成器Yeoman提供了generator-generator方便快速编写自己的生成器. 安装: npm install -g generator-generator运行: yo gener ...

  4. Qt编写QUI皮肤生成器

    用Qt写项目写多了,为了满足不同客户的需求,需要定制不同样式的界面,QUI皮肤生成器应运而生.思考这个工具的架构花了一年时间,如何从复杂的配色方案中提取出共性,然后将共性转为具体的QSS文件.思考架构 ...

  5. 怎样用VB编写.DLL动态链接库文件

    VB一般可以生成两种特殊的DLL,一个是ActiveX DLL和ActiveX Control(*.ocx).这两种DLL都是VB支持的标准类型,在VB自身的例子中有,你可以参考.更详细的介绍可以参考 ...

  6. VS2010环境下使用VB编写串口助手

    1.在Form1的设计模式下添加以下控件: 2.添加好控件之后我们就可以打开Form1.vb进行编程了: '使用串口需要引用的命名空间 Imports System.IO.Ports Imports ...

  7. 一个VB编写的俄罗斯方块

    'VB语言版俄罗斯方块'Totoo.Aoo34智造(一个人的两个名字),一些方块,很多计算 Const WN As Integer = 10, HN As Integer = 20Const Boxl ...

  8. vb编写串口调试程序

    sub是子模块,可以调用但是没有返回值,function是有返回值的. public sub 可以在其它form里调用,而private sub 只能在当前form里调用. vb里的if else , ...

  9. 如何使用VB编写Excel的COM组件

    1 新建工程中选择"外接程序",点击打开之后右侧的属性窗口即显示为MyAddIn工程.(注意如果你使用的是VB精简版的没有"外接程序"的选项,请下载完整版的) ...

随机推荐

  1. 突然想写点东西,关于web新人的。采用问答方式

    我自己是会计专业,转行自学web的,学习有一两年了,也还是新人一个,只不过不是那种超级“新”的,所以有什么话说得不对,请轻喷.欢迎大家来和我交流. 1.我能不能转行学web? 能不能学web这个不是别 ...

  2. 工时统计的sql练习--包含时间处理

    //按月统计,除去周末的考勤,(工时,请假,缺勤) --建表sql 创建[dbo].[AbsenceHourld]CREATE TABLE [dbo].[AbsenceHourld]( [id] [i ...

  3. PLSQL远程连接到Oracle服务器

    这里只介绍一种远程连接服务器方法,即本机安装了Oracle客户端和PLSql工具,服务器安装在虚拟机或者另一台电脑上 1.打开Oracle客户端的Net Manager,选择Oracle Net配置— ...

  4. AutoLayout学习之理解intrinsicContentSize,Content Hugging Priority,Content Compression Resistance Priority

    TableViewCell的高度计算应该是所有开发者都会使用到的东西,之前都是用代码计算的方法来计算这个高度.最近有时间看了几个计算Cell高度的方法.基本上都用到了AutoLayout,这篇首先介绍 ...

  5. inline-block(行内区块元素)的详解和应用

    说inline-block(行内区块元素)之前,先说下他另外的2个兄弟 display:inline; 内联元素,简单来说就是在同一行显示.他没有高度,给内联元素设置width和height是没效果的 ...

  6. mysql报Fatal error encountered during command execution的解决办法

    连接字符串里加上 Allow User Variables=True 解决. 否则时不时的报错,存储过程名长一点也报错,又有时报有时不报,参数传1位数就正常2位数就报错等…… 折腾mysql蛋疼啊

  7. 如何使一个你没有源代码的DLL文件变为强命名的DLL

    转载: 有时候你会需要一个DLL是强命名的,比如你想把这个文件放到GAC里面.如果这是一个第三方的DLL,你没有源代码,这会是一件比较麻烦的事情.有一个方法可以解决这个问题. 在VS.NET的命名行窗 ...

  8. js 点名

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  9. 浅谈Android序列化

    序列化原因 序列化的原因基本可以归纳为以下三种情况: 永久性保存对象,保存对象的字节序列到本地文件中: 对象在网络中传递: 对象在IPC间传递. --- --- 序列化方法 在Android系统中关于 ...

  10. CodeForces 569A 第六周比赛C踢

    C - C Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Statu ...