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


Posted in Python onDecember 22, 2015

使用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, 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, txt, font=self.font, fill=fill) 
 del draw 
 def randRGB(self): 
 return (random.randint(0, 255), 
   random.randint(0, 255), 
   random.randint(0, 255)) 
 def randPoint(self): 
 (width, height) = self.size 
 return (random.randint(0, width), random.randint(0, 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)
Python 相关文章推荐
Python中itertools模块用法详解
Sep 25 Python
在DigitalOcean的服务器上部署flaskblog应用
Dec 19 Python
Python实现快速排序和插入排序算法及自定义排序的示例
Feb 16 Python
总结网络IO模型与select模型的Python实例讲解
Jun 27 Python
Python多进程multiprocessing.Pool类详解
Apr 27 Python
使用Python机器学习降低静态日志噪声
Sep 29 Python
django中forms组件的使用与注意
Jul 08 Python
详解有关PyCharm安装库失败的问题的解决方法
Feb 02 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
Feb 17 Python
Python接口自动化测试框架运行原理及流程
Nov 30 Python
Django显示可视化图表的实践
May 10 Python
python获取带有返回值的多线程
May 02 Python
基于python实现微信模板消息
Dec 21 #Python
python如何实现远程控制电脑(结合微信)
Dec 21 #Python
python从入门到精通(DAY 3)
Dec 20 #Python
python从入门到精通(DAY 2)
Dec 20 #Python
利用python代码写的12306订票代码
Dec 20 #Python
python从入门到精通(DAY 1)
Dec 20 #Python
在DigitalOcean的服务器上部署flaskblog应用
Dec 19 #Python
You might like
ThinkPHP模板自定义标签使用方法
2014/06/26 PHP
php中curl和soap方式请求服务超时问题的解决
2018/06/11 PHP
改版了网上的一个js操作userdata
2007/04/27 Javascript
Prototype RegExp对象 学习
2009/07/19 Javascript
基于json的jquery地区联动效果代码
2011/07/06 Javascript
JavaScript 模式之工厂模式(Factory)应用介绍
2012/11/15 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
2014/05/28 Javascript
Treegrid的动态加载实例代码
2016/04/29 Javascript
angular forEach方法遍历源码解读
2017/01/25 Javascript
详解用函数式编程对JavaScript进行断舍离
2017/09/18 Javascript
浅谈vue的iview列表table render函数设置DOM属性值的方法
2017/09/30 Javascript
Vue加载组件、动态加载组件的几种方式
2018/08/31 Javascript
小程序实现左滑删除功能
2018/10/30 Javascript
js实现秒表计时器
2019/12/16 Javascript
实例解析Python中的__new__特殊方法
2016/06/02 Python
Pandas探索之高性能函数eval和query解析
2017/10/28 Python
Python numpy实现数组合并实例(vstack,hstack)
2018/01/09 Python
python实现多进程代码示例
2018/10/31 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
Numpy将二维数组添加到空数组的实现
2019/12/05 Python
解决安装pyqt5之后无法打开spyder的问题
2019/12/13 Python
HTML5实现的图片无限加载的瀑布流效果另带边框圆角阴影
2014/03/07 HTML / CSS
英国知名衬衫品牌美国网站:Charles Tyrwhitt美国
2016/08/28 全球购物
Lacoste美国官网:经典POLO衫品牌
2016/10/12 全球购物
俄罗斯苹果优质经销商商店:iPort
2020/05/27 全球购物
如何用Python来进行查询和替换一个文本字符串
2014/01/02 面试题
宿舍使用违章电器检讨书
2014/01/12 职场文书
小学生元旦广播稿
2014/02/21 职场文书
企业厂务公开实施方案
2014/03/26 职场文书
学生违反校规检讨书
2014/10/28 职场文书
故意伤害人身损害赔偿协议书
2014/11/19 职场文书
2015试用期转正工作总结
2014/12/12 职场文书
行政文员岗位职责
2015/02/04 职场文书
中国文明网2015年“向国旗敬礼”活动网上签名寄语
2015/09/24 职场文书
python自动化调用百度api解决验证码
2021/04/13 Python
Redis批量生成数据的实现
2022/06/05 Redis