ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何制作带有图片验证码的登陆窗口?

如何制作带有图片验证码的登陆窗口?

作者:绿色风 分类: 时间:2022-08-17 浏览:146
楼主
amulee
Q:如何制作带有图片验证码的登陆窗口?
A:生成验证码的主程序如下。可以生成随机的噪点,和一些网站验证系统原理相同。
  1. Type RndPic
  2.     RndNumber As String
  3.     FileName As String
  4. End Type
  5. Function Num2Arr(ByVal number As Long)
  6.     Dim strNum As String
  7.     Dim ArrTemp(3) As Byte
  8.     '文件大小
  9.     strNum = WorksheetFunction.Dec2Hex(number, 8)
  10.     '数组转换
  11.     For i = 0 To 3
  12.         ArrTemp(i) = WorksheetFunction.Hex2Dec(Mid(strNum, i * 2 + 1, 2))
  13.     Next i
  14.     Num2Arr = ArrTemp
  15. End Function

  16. Function Create24BitCombinedNumber_RndColor(ByVal RndLen As Integer) As RndPic
  17.     Dim Header(1 To 54) As Byte
  18.     Dim FName As String
  19.     Dim ArrColor(2) As Byte
  20.     Dim ArrNumber(9) As String
  21.     Dim arrRnd() As Integer
  22.     Dim strLen As String
  23.     Dim strRnd As String
  24.     Dim LenTemp
  25.     Dim WidthTemp
  26.     Dim i%, j%, k%
  27.     '生成随机数
  28.     ReDim arrRnd(1 To RndLen)
  29.     Randomize
  30.     For i = 1 To RndLen
  31.         arrRnd(i) = Int(Rnd * 10)
  32.         strRnd = strRnd & arrRnd(i)
  33.     Next i
  34.     '文件大小
  35.     LenTemp = Num2Arr(RndLen * 300 + 54)
  36.     WidthTemp = Num2Arr(RndLen * 12)
  37.     '定义数字数组
  38.     ArrNumber(0) = "111111111111111100001111111011110111111011110111111011110111111011110111111011110111111011110111111011110111111011110111111100001111111111111111"
  39.     ArrNumber(1) = "111111111111111110111111111000111111111110111111111110111111111110111111111110111111111110111111111110111111111110111111111000001111111111111111"
  40.     ArrNumber(2) = "111111111111111100001111111011110111111011110111111111110111111111101111111111011111111110111111111101111111111011110111111000000111111111111111"
  41.     ArrNumber(3) = "111111111111111100001111111011110111111011110111111111101111111110011111111111101111111111110111111011110111111011110111111100001111111111111111"
  42.     ArrNumber(4) = "111111111111111111011111111111011111111110011111111101011111111011011111111011011111111000000111111111011111111111011111111110000111111111111111"
  43.     ArrNumber(5) = "111111111111111000000111111011111111111011111111111010001111111001110111111111110111111111110111111011110111111011110111111100001111111111111111"
  44.     ArrNumber(6) = "1111111111111111100011111111011101111110111111111110111111111110100011111110011101111110111101111110111101111110111101111111000011111111111111111"
  45.     ArrNumber(7) = "111111111111111000000111111011101111111011101111111111011111111111011111111110111111111110111111111110111111111110111111111110111111111111111111"
  46.     ArrNumber(8) = "111111111111111100001111111011110111111011110111111011110111111100001111111101101111111011110111111011110111111011110111111100001111111111111111"
  47.     ArrNumber(9) = "111111111111111100011111111011101111111011110111111011110111111011100111111100010111111111110111111111110111111011101111111100011111111111111111"
  48.     '文件头
  49.     Header(1) = 66
  50.     Header(2) = 77
  51.     Header(3) = LenTemp(3)
  52.     Header(4) = LenTemp(2)
  53.     Header(5) = LenTemp(1)
  54.     Header(6) = LenTemp(0)
  55.     Header(11) = 54
  56.     Header(15) = 40
  57.     Header(19) = WidthTemp(3)
  58.     Header(20) = WidthTemp(2)
  59.     Header(21) = WidthTemp(1)
  60.     Header(22) = WidthTemp(0)
  61.     Header(23) = 12
  62.     Header(27) = 1
  63.     Header(29) = 24
  64.     Header(39) = 18
  65.     Header(40) = 11
  66.     Header(43) = 18
  67.     Header(44) = 11
  68.     '开始生成文件
  69.     FName = ThisWorkbook.Path & "\" & RndLen & "位随机数.bmp"
  70.     FS = FreeFile
  71.     Open FName For Binary Access Write As #FS
  72.     '写文件头
  73.     Put #FS, , Header
  74.     '写颜色
  75.     Pos = 55
  76.     For i = 11 To 0 Step -1 '行
  77.         For k = 1 To RndLen      '数字
  78.             For j = 1 To 12 '写12个像素
  79.                 Randomize
  80.                 If Mid(ArrNumber(arrRnd(k)), i * 12 + j, 1) = "0" Then
  81.                     ArrColor(0) = Abs(Rnd * 256 - 128)
  82.                     ArrColor(1) = Abs(Rnd * 256 - 128)
  83.                     ArrColor(2) = Abs(Rnd * 256 - 128)
  84.                 Else
  85.                     ArrColor(0) = Rnd * 80 + 170
  86.                     ArrColor(1) = Rnd * 80 + 170
  87.                     ArrColor(2) = Rnd * 80 + 170
  88.                 End If
  89.                 Put #FS, Pos, ArrColor
  90.                 Pos = Pos + 3
  91.             Next j
  92.         Next k
  93.     Next i
  94.     Close #FS
  95.     Create24BitCombinedNumber_RndColor.FileName = FName
  96.     Create24BitCombinedNumber_RndColor.RndNumber = strRnd
  97. End Function


效果如图:

 


附件下载:
验证码登陆.rar
2楼
ljh29206
- -!! 你也太猛了吧  版主! 强悍,.,........
3楼
ljh29206
我在 测试的时候  直接 就在

userform1.show  哪里就报错,

好像没什么错吧,请指点下!

另外    ArrNumber(0) = "111111111111111100001111111011110111111011110111111011110111111011110111111011110111111011110111111011110111111011110111111100001111111111111111"
    ArrNumber(1) = "111111111111111110111111111000111111111110111111111110111111111110111111111110111111111110111111111110111111111110111111111000001111111111111111"
    ArrNumber(2) = "111111111111111100001111111011110111111011110111111111110111111111101111111111011111111110111111111101111111111011110111111000000111111111111111"
    ArrNumber(3) = "111111111111111100001111111011110111111011110111111111101111111110011111111111101111111111110111111011110111111011110111111100001111111111111111"
    ArrNumber(4) = "111111111111111111011111111111011111111110011111111101011111111011011111111011011111111000000111111111011111111111011111111110000111111111111111"
    ArrNumber(5) = "111111111111111000000111111011111111111011111111111010001111111001110111111111110111111111110111111011110111111011110111111100001111111111111111"
    ArrNumber(6) = "1111111111111111100011111111011101111110111111111110111111111110100011111110011101111110111101111110111101111110111101111111000011111111111111111"
    ArrNumber(7) = "111111111111111000000111111011101111111011101111111111011111111111011111111110111111111110111111111110111111111110111111111110111111111111111111"
    ArrNumber(8) = "111111111111111100001111111011110111111011110111111011110111111100001111111101101111111011110111111011110111111011110111111100001111111111111111"
    ArrNumber(9) = "111111111111111100011111111011101111111011110111111011110111111011100111111100010111111111110111111111110111111011101111111100011111111111111111"

这段东西的定义是什么,,,,
4楼
amulee
这些数字就是数字的点阵图
这样看明白些吧。

 
5楼
ljh29206
原来这样! 收藏了
6楼
wqfzqgk

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap