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进阶教程之动态类型详解
Aug 30 Python
python自动zip压缩目录的方法
Jun 28 Python
Python基于matplotlib绘制栈式直方图的方法示例
Aug 09 Python
pip安装Python库时遇到的问题及解决方法
Nov 23 Python
PyCharm 设置SciView工具窗口的方法
Jan 15 Python
pytorch 实现tensor与numpy数组转换
Dec 27 Python
Python实现子类调用父类的初始化实例
Mar 12 Python
Django ModelForm操作及验证方式
Mar 30 Python
详细分析Python collections工具库
Jul 16 Python
Pycharm plot独立窗口显示的操作
Dec 11 Python
Jupyter Notebook 远程访问配置详解
Jan 11 Python
Python实现GIF动图以及视频卡通化详解
Dec 06 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
PHP性能优化准备篇图解PEAR安装
2011/12/05 PHP
PHP MYSQL实现登陆和模糊查询两大功能
2016/02/05 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
tp5.1 框架数据库-数据集操作实例分析
2020/05/26 PHP
JavaScript脚本语言在网页中的简单应用
2007/05/13 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
jQuery学习笔记之jQuery原型属性和方法
2014/06/09 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
2016/06/01 Javascript
javascript日期比较方法实例分析
2016/06/17 Javascript
基于jQuery的$.getScript方法去加载javaScript文档解析
2017/11/08 jQuery
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
2019/04/30 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
2019/07/04 jQuery
Vue和React有哪些区别
2020/09/12 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
[50:48]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python模拟登陆阿里妈妈生成商品推广链接
2014/04/03 Python
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
python编写分类决策树的代码
2017/12/21 Python
在python中实现对list求和及求积
2018/11/14 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
通过cmd进入python的步骤
2020/06/16 Python
HTML5 input placeholder 颜色修改示例
2014/05/30 HTML / CSS
荷兰和比利时时尚鞋店:Van Dalen
2018/04/23 全球购物
AJax面试题
2014/11/25 面试题
高三历史教学反思
2014/01/09 职场文书
高级工程师英文求职信
2014/03/19 职场文书
《吃水不忘挖井人》教学反思
2014/04/15 职场文书
民事授权委托书范文
2014/08/02 职场文书
美德少年事迹材料500字
2014/08/19 职场文书
中学教师读书笔记
2015/07/01 职场文书
2016应届毕业生就业指导课心得体会
2016/01/15 职场文书
工作报告范文
2019/06/20 职场文书
教你怎么用Python操作MySql数据库
2021/05/31 Python