图片验证码在生活中得到了广泛的应用,在很多登录页面都可以看到验证码的身影。之所以如此,是因为图片验证码可以隔绝不法分子的密码爆破,对我们的登录过程起到了至关重要的保护作用。
我们就来看看如和生成验证码,我主要写了两个函数。一个用于生成验证码字符串,用于用户的输入验证,一个是生成图片,给用户看,让用户输入对应的信息,供系统进行数据比对。从而进行验证码验证。
第一个就是生成验证码字符串,代码如下:
def number(): # 生成随机验证码字符串
# captcha_text = [str(i) for i in range(10)] # 列表形式纯数字,列表的内容为字符串形式的0-9
captcha_text = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
example = [random.sample(captcha_text, 1)[0] for i in range(4)] #随机抽取4个字符,作为验证码,如果需要增加验证码长度,修改range(4)的数值即可
verification_code = ''.join(example) # 将4个字符拼接
return verification_code # 返回验证码内容
第二个就是生成验证码图片了,在有验证码字符串的前提下,获得验证码图片。,代码如下:
def generate_captcha_image(save_path,number): # 生成验证码图片
image = ImageCaptcha()
if not os.path.exists(save_path): # 检测目录是否存在,不在则创建
os.makedirs(save_path)
image.write(number, '%s/%s.png'%(save_path, number)) # 将绘制好的图片验证码保存
return save_path # 返回保存文件的文件夹,方便后期删除
主要的部分就是这两个部分,还有一个也算比较重要的部分吧,就是在生成验证码使用完成后,记得删除验证码,否则会导致不必要的资源浪费,如果不想麻烦,也可以保存,直接供下次使用。这个主要看个人取舍吧。
利用python生成图片验证码的完整代码如下;
import os
import random # 生成随机验证码
from captcha.image import ImageCaptcha # 生成图片
import time
def number(): # 生成随机验证码字符串
# captcha_text = [str(i) for i in range(10)] # 列表形式纯数字,列表的内容为字符串形式的0-9
captcha_text = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
example = [random.sample(captcha_text, 1)[0] for i in range(4)] #生成一个列表,四个随机字符
verification_code = ''.join(example) # 将4个字符拼接
return verification_code # 返回验证码内容
def generate_captcha_image(save_path,number): # 生成验证码图片
image = ImageCaptcha()
if not os.path.exists(save_path): # 检测目录是否存在,不在则创建
os.makedirs(save_path)
image.write(number, '%s/%s.png'%(save_path, number)) # 保存图片
return save_path # 返回保存文件的文件夹,方便后期删除
def remove(path): # 退出程序的时候一定要记得删除验证码,否则内存占用会越来越大
files=os.listdir(path) # 获取目录下的文件
os.chdir(path) # 进入目录
for file in files:os.remove(file) #遍历删除指定目录下的文件
os.chdir("..") # 返回当前目录
os.rmdir(path) # 删除这个目录,可根据需要保存这个目录
return
if __name__ == "__main__":
nb = number()
print(nb)
image = generate_captcha_image("images",nb) # 生成验证码,第一个参数为保存的路径
print("验证码保存在:",image)
# time.sleep(10)
# remove_image = remove(image) # 删除验证码
# print(remove_image)
在实际的生产过程中,对代码进行适当的变更即可正常使用,有些地方注释可能有问题,这只是我个人的理解。希望发现的大佬给予讲解。希望对有需要的人给到帮助。