zl程序教程

您现在的位置是:首页 >  后端

当前栏目

python生成随机验证码(中文验证码)示例

Python中文 示例 生成 随机 验证码
2023-06-13 09:15:24 时间

复制代码代码如下:


#-*-coding:utf-8-*-
importImage,ImageDraw,ImageFont
importrandom
importmath,string 

classRandomChar():
 """用于随机生成汉字"""
 @staticmethod
 defUnicode():
   val=random.randint(0x4E00,0x9FBF)
   returnunichr(val) 

 @staticmethod
 defGB2312():
   head=random.randint(0xB0,0xCF)
   body=random.randint(0xA,0xF)
   tail=random.randint(0,0xF)
   val=(head<<8)|(body<<4)|tail
   str="%x"%val
   returnstr.decode("hex").decode("gb2312") 

classImageChar():
 def__init__(self,fontColor=(0,0,0),
                    size=(100,40),
                    fontPath="wqy.ttc",
                    bgColor=(255,255,255),
                    fontSize=20):
   self.size=size
   self.fontPath=fontPath
   self.bgColor=bgColor
   self.fontSize=fontSize
   self.fontColor=fontColor
   self.font=ImageFont.truetype(self.fontPath,self.fontSize)
   self.image=Image.new("RGB",size,bgColor) 

 defrotate(self):
   self.image.rotate(random.randint(0,30),expand=0) 

 defdrawText(self,pos,txt,fill):
   draw=ImageDraw.Draw(self.image)
   draw.text(pos,txt,font=self.font,fill=fill)
   deldraw 

 defrandRGB(self):
   return(random.randint(0,255),
          random.randint(0,255),
          random.randint(0,255)) 

 defrandPoint(self):
   (width,height)=self.size
   return(random.randint(0,width),random.randint(0,height)) 

 defrandLine(self,num):
   draw=ImageDraw.Draw(self.image)
   foriinrange(0,num):
     draw.line([self.randPoint(),self.randPoint()],self.randRGB())
   deldraw 

 defrandChinese(self,num):
   gap=5
   start=0
   foriinrange(0,num):
     char=RandomChar().GB2312()
     x=start+self.fontSize*i+random.randint(0,gap)+gap*i
     self.drawText((x,random.randint(-5,5)),RandomChar().GB2312(),self.randRGB())
     self.rotate()
   self.randLine(18) 

 defsave(self,path):
   self.image.save(path)