计算型验证码
算数验证码,也叫计算型验证码。
计算型验证码其实是一种特殊的字符型验证码,只不过在它的基础上增加了数字运算。
计算型验证码在将人类视觉和计算机视觉的差异作为区分用户和电脑的依据的同时,还加上了逻辑运算,从而来增加机器识别的难度。
Python 提供了专门的库用于破解计算性验证码——Ddddocr
破解方式
Ddddocr 其实是一种 OCR,可以将图形识别后得到字符串,字符串中带有运算符
第一步:安装
pip install ddddocr
第二步:准备一张图片,图片命名为 '验证码.jpg'
第三步:使用 Ddddocr
import ddddocr ocr = ddddocr.DdddOcr() with open('验证码.jpg', 'rb') as f: img_bytes = f.read() f.close() res = ocr.classification(img_bytes) print(res) # 47+40
第四步:编写程序,对识别得到的字符串进行运算
if'+'in res: zhi = int(res.split('+')[0])+int(res.split('+')[1][:-1]) print(zhi) if'-'in res: zhi = int(res.split('+')[0])-int(res.split('+')[1][:-1]) print(zhi) if'*'in res: zhi = int(res.split('+')[0])*int(res.split('+')[1][:-1]) print(zhi) if'/'in res: zhi = int(res.split('+')[0])/int(res.split('+')[1][:-1]) print(zhi)
第五步:大功告成
制作验证码
我们也可以自己编写一个程序用于形成一个算数型验证码
from PIL import Image,ImageDraw,ImageFont import random def getRandomColor(): # 获取一个随机的rgb格式颜色 r = random.randint(0, 255) g = random.randint(0, 255) b = random.randint(0, 255) return (r,g,b) def getRandomStr(): # 获取一个随机字符串,其中每个字符也是随机的 num_random = str(random.randint(1,50)) return num_random text ='' for i in range(3): if i != 1: k = getRandomStr()+' ' else: k = random.choice(['+','-','*','/'])+' ' text += k text = text+' = ' # 获取一个Image对象,参数分别是:RGB格式,宽120,高40,随机颜色 image = Image.new('RGB',(160,40),(255,255,255)) # 获取一个画笔对象,将图片对象传过去 draw = ImageDraw.Draw(image) # 获取一个font字体对象,参数是ttf的字体文件的目录,以及字体的大小 font = ImageFont.truetype(r'K:msyh.ttc',size=24) # 在图片上写东西,参数是定位、字符串、颜色和字体 draw.text((10,10),text,getRandomColor(),font=font) image.save('验证码.jpg')