計算型驗證碼
算數驗證碼,也叫計算型驗證碼。
計算型驗證碼其實是一種特殊的字符型驗證碼,只不過在它的基礎上增加了數字運算。
計算型驗證碼在將人類視覺和計算機視覺的差異作為區分用戶和電腦的依據的同時,還加上了邏輯運算,從而來增加機器識別的難度。
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')
參考:https://mp.weixin.qq.com/s/Yvo0ucKIU8Fpm-GZ-vxOfA