加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python生成随机验证码的两种方法

发布时间:2020-12-16 20:09:58 所属栏目:Python 来源:网络整理
导读:使用python生成随机验证码的方法有很多种,今天小编给大家分享两种方法,大家可以灵活运用这两种方法,设计出适合自己的验证码方法。 方法一: 利用range方法,对于range方法不清楚的同学,请参考文章《python开发的range()函数》 # -*- coding: utf-8 -*-im

使用python生成随机验证码的方法有很多种,今天小编给大家分享两种方法,大家可以灵活运用这两种方法,设计出适合自己的验证码方法。

方法一:

利用range方法,对于range方法不清楚的同学,请参考文章《python开发的range()函数》

# -*- coding: utf-8 -*-
import random
def generate_verification_code(len=6):
 ''' 随机生成6位的验证码 '''
 # 注意: 这里我们生成的是0-9A-Za-z的列表,当然你也可以指定这个list,这里很灵活
 # 比如: code_list = ['P','y','t','h','o','n','T','a','b'] # PythonTab的字母
 code_list = [] 
 for i in range(10): # 0-9数字
  code_list.append(str(i))
 for i in range(65,91): # 对应从“A”到“Z”的ASCII码
  code_list.append(chr(i))
 for i in range(97,123): #对应从“a”到“z”的ASCII码
  code_list.append(chr(i))
 myslice = random.sample(code_list,len) # 从list中随机获取6个元素,作为一个片断返回
 verification_code = ''.join(myslice) # list to string
 return verification_code

方法二:

利用randint方法

# -*- coding: utf-8 -*-
import random
def generate_verification_code_v2():
 ''' 随机生成6位的验证码 '''
 code_list = []
 for i in range(2):
  random_num = random.randint(0,9) # 随机生成0-9的数字
  # 利用random.randint()函数生成一个随机整数a,使得65<=a<=90
  # 对应从“A”到“Z”的ASCII码
  a = random.randint(65,90)
  b = random.randint(97,122)
  random_uppercase_letter = chr(a)
  random_lowercase_letter = chr(b)
  code_list.append(str(random_num))
  code_list.append(random_uppercase_letter)
  code_list.append(random_lowercase_letter)
 verification_code = ''.join(code_list)
 return verification_code

测试:

code = generate_verification_code(6)
code2 = generate_verification_code_v2()
print code
print code2

输出结果:

Glc5Tr
Hr6t7B

我个人更倾向于第一种方法,更加灵活,可以随意设置验证码长度。

Python 随机生成中文验证码

# -*- coding: utf-8 -*- 
import Image,ImageDraw,ImageFont 
import random 
import math,string 
class RandomChar(): 
 """用于随机生成汉字""" 
 @staticmethod 
 def Unicode(): 
 val = random.randint(0x4E00,0x9FBF) 
 return unichr(val) 
 @staticmethod 
 def GB2312(): 
 head = random.randint(0xB0,0xCF) 
 body = random.randint(0xA,0xF) 
 tail = random.randint(0,0xF) 
 val = ( head << 8 ) | (body << 4) | tail 
 str = "%x" % val 
 return str.decode('hex').decode('gb2312') 
class ImageChar(): 
 def __init__(self,fontColor = (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) 
 def rotate(self): 
 self.image.rotate(random.randint(0,30),expand=0) 
 def drawText(self,pos,txt,fill): 
 draw = ImageDraw.Draw(self.image) 
 draw.text(pos,font=self.font,fill=fill) 
 del draw 
 def randRGB(self): 
 return (random.randint(0,random.randint(0,255)) 
 def randPoint(self): 
 (width,height) = self.size 
 return (random.randint(0,width),height)) 
 def randLine(self,num): 
 draw = ImageDraw.Draw(self.image) 
 for i in range(0,num): 
  draw.line([self.randPoint(),self.randPoint()],self.randRGB()) 
 del draw 
 def randChinese(self,num): 
 gap = 5 
 start = 0 
 for i in range(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) 
 def save(self,path): 
 self.image.save(path) 

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读