Office中国论坛/Access中国论坛

标题: 来个图片验证码如何? [打印本页]

作者: roych    时间: 2023-2-14 21:02
标题: 来个图片验证码如何?
图片验证码,是为了在枯燥的登录界面上添加一些趣味。
一般有三种思路:

这里就采用第3种方法,用Python制作一个工具,生成随机验证码。
一般用户可能没安装python,所以我这里将它打包成exe文件。于是,VBA代码就简单多了:
  1. Private Sub cmdQuit_Click()
  2.     DoCmd.Quit acQuitSaveAll
  3. End Sub

  4. Private Sub imgChapchat_Click()
  5.     Call refreshImage
  6. End Sub

  7. '读取验证码文件,对比输入是否正确。
  8. Private Sub login_Click()
  9.     Dim strNumber As String
  10.     Open CurrentProject.Path & "\chapchat.txt" For Input As #1
  11.     Line Input #1, strNumber
  12.     Close #1
  13.     If Me.txtChapchat = strNumber Then
  14.         DoCmd.OpenForm "frmMain"
  15.     Else
  16.         MsgBox "验证码错误,请重新输入"
  17.         Call refreshImage
  18.         Exit Sub
  19.     End If
  20. End Sub


  21. '刷新验证码
  22. Sub refreshImage()
  23.     Me.imgChapchat.Picture = ""
  24.     Shell CurrentProject.Path & "\chapchat.exe"
  25.     Me.imgChapchat.Picture = CurrentProject.Path & "\chapchat.png"
  26. End Sub
复制代码
代码很简单。先清空图片,再运行exe文件生成验证码图片和输出验证码文本,再读取验证码文本和输入框文本是否一致。如一致则打开主窗体,否则刷新验证码。这里就不添加注释了。
最后附上python部分代码,供有兴趣的网友修改使用(如报错,请使用pip install PIL安装Image包)。
这里主要是从0-9中随机选择4个数字,然后转为字符串,再使用draw方法生成图片,以及用open方法输出文本文件。
  1. from PIL import Image, ImageDraw, ImageFont
  2. from random import sample
  3. from pathlib import Path
  4. import sys
  5. root_path = Path(sys.argv[0]).parent
  6. out_png = root_path / 'chapchat.png'
  7. out_txt = root_path / 'chapchat.txt'
  8. if __name__ == '__main__':
  9.     img = Image.new(mode='RGB', size=(100, 100), color='#FFFFFF')
  10.     draw = ImageDraw.Draw(img)
  11.     number = ''.join([str(x) for x in sample(range(10), 4)])
  12.     with open(out_txt, 'w') as f:
  13.         f.write(number)
  14.     font_name = r'C:\Windows\Fonts\simhei.ttf'
  15.     font = ImageFont.truetype(font=font_name, size=24)
  16.     draw.text(xy=(30, 30), text=number, font=font, fill=(128, 64, 64))
  17.     img.save(out_png)
  18.     img.close()
复制代码
由于exe文件进行了打包,因此稍微大一些(23M),个人觉得应该还是在可接受范围内吧。
[attach]64446[/attach]
最后一点:欢迎大家下载测试,如有报错,请上传截图,以便我改进。

作者: huanghyd    时间: 2023-2-15 13:57
大神牛,学习了,
作者: huanghyd    时间: 2023-2-15 14:28
刚下载测试可用。生成图片时间要10秒钟左右,可能是跟我电脑的配置性能有关系。谢谢分享。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3