# python 實現驗證碼 #1 import random n = 5 lis = list() count = 0 while count<n: count+=1 lis.append(str(random.randint(0,9))) lis.append(chr(random.randint(65,90))) lis.append(chr(random.randint(97,122))) lis2 = random.sample(lis,n) print(lis2) lis1 = ''.join(lis2) print(lis1) # for i in lis2: # print(i,end=' ')
#2 def get_verified(lenth): code = '' for i in range(lenth): num = str(random.randint(0,9)) alp = chr(random.randint(97,122)) ATP = chr(random.randint(65,90)) code+=str(chr(random.randint(65,90))) return code print(get_verified(5))
極驗科技驗證碼參考文檔python
from PIL import Image,ImageDraw,ImageFont import random from io import BytesIO,StringIO """ BytesIO, 可以存儲數據 並以二進制的格式再返回給你 StringIO 可以存儲數據 並以字符串的格式再返回給你 """ """ Image, 產生圖片的 ImageDraw, 產生畫筆的 ImageFont 控制字體樣式 """
def get_random(): return random.randint(0,255),random.randint(0,255),random.randint(0,255)
def get_code(request): # 推到思路1:直接拿後端現成的圖片 二進制模式打開發送 # with open(r'D:\上海Python11期視頻\python11期視頻\BBS\avatar\u205777803476556477fm26gp0.jpg','rb') as f: # data = f.read() # return HttpResponse(data)
# 圖片驗證碼相關 def get_code(request): # 推導思路2:利用模塊產生圖片 再發送給前端 pillow # img_obj = Image.new('RGB',(310,35),'green') # 生成了一個圖片對象 # img_obj = Image.new('RGB',(310,35),get_random()) # 生成了一個圖片對象 # # 先利用文件操做將圖片對象寫入文件中 # with open('xxx.png','wb') as f: # img_obj.save(f,'png') # # 再利用文件操做將圖片以二進制形式讀取出來發送 # with open('xxx.png','rb') as f: # data = f.read() # return HttpResponse(data)
# 圖片驗證碼相關 def get_code(request): # 推到思路3:再也不利用文件存取數據 藉助於內存管理器 # img_obj = Image.new('RGB',(310,35),get_random()) # io_obj = BytesIO() # 生成一個內存管理器對象 # img_obj.save(io_obj,'png') # 你能夠將io_obj當成文件句柄f # return HttpResponse(io_obj.getvalue()) # 以二進制的方式取出數據
# 圖片驗證碼相關 def get_code(request): # 推到思路4(終極步驟) 圖片上寫字 img_obj = Image.new('RGB',(310,35),get_random()) img_draw = ImageDraw.Draw(img_obj) # 生成一個畫筆對象 img_font = ImageFont.truetype('static/font/111.ttf',30) # 字體的樣式 """ 全部的字體樣式都是由.ttf結尾的文件控制的 """ # 隨機生成驗證碼 a~z A~Z 0~9 code = '' for i in range(5): random_upper = chr(random.randint(65,90)) random_lower = chr(random.randint(97,122)) random_int = str(random.randint(0,9)) temp = random.choice([random_upper,random_lower,random_int]) # 將產生的隨機字符寫到圖片上 img_draw.text((i*45+45,0),temp,get_random(),img_font) code += temp print(code) # 將隨機驗證碼存儲取來 以便其餘函數調用 request.session['code'] = code io_obj = BytesIO() img_obj.save(io_obj,'png') return HttpResponse(io_obj.getvalue())
import time satat = time.time() fac = 10 for i in range(fac+1): print(f'\r{(i*10):^5}% [{i*"*"} {(fac-i)*"-"}]time:{(time.time()-satat):.3f}',end='') time.sleep(1)