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中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
Jun 23 Python
恢复百度云盘本地误删的文件脚本(简单方法)
Oct 21 Python
java中两个byte数组实现合并的示例
May 09 Python
基于python log取对数详解
Jun 08 Python
Python 隐藏输入密码时屏幕回显的实例
Feb 19 Python
解决python tkinter界面卡死的问题
Jul 17 Python
pytorch下大型数据集(大型图片)的导入方式
Jan 08 Python
python为QT程序添加图标的方法详解
Mar 09 Python
Python实现子类调用父类的初始化实例
Mar 12 Python
详解Python中namedtuple的使用
Apr 27 Python
Python Flask框架实现简单加法工具过程解析
Jun 03 Python
Keras之fit_generator与train_on_batch用法
Jun 17 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实现获取客户端IP并获取IP信息
2015/03/17 PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
2016/10/14 PHP
PHP去除字符串最后一个字符的三种方法实例
2017/03/01 PHP
PHP数据库操作四:mongodb用法分析
2017/08/16 PHP
Javascript 中的 &amp;&amp; 和 || 使用小结
2010/04/25 Javascript
js汉字排序问题 支持中英文混排,兼容各浏览器,包括CHROME
2011/12/20 Javascript
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
2012/05/14 Javascript
javascript常见操作汇总
2014/09/03 Javascript
深入理解JavaScript系列(35):设计模式之迭代器模式详解
2015/03/03 Javascript
javascript+html5实现仿flash滚动播放图片的方法
2015/04/27 Javascript
javascript匀速运动实现方法分析
2016/01/08 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
浅谈Node.js:Buffer模块
2016/12/05 Javascript
Vue组件之自定义事件的功能图解
2018/02/01 Javascript
代码分析vue中如何配置less
2018/09/28 Javascript
ios中视频的最后一桢问题解决
2019/05/14 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
2020/02/11 Javascript
vue2.x数组劫持原理的实现
2020/04/19 Javascript
JavaScript数组类型Array相关的属性与方法详解
2020/09/08 Javascript
express异步函数异常捕获示例详解
2020/11/30 Javascript
详解Python3中yield生成器的用法
2015/08/20 Python
详解python中@的用法
2019/03/27 Python
Python 50行爬虫抓取并处理图灵书目过程详解
2019/09/20 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
2020/03/06 Python
降低python版本的操作方法
2020/09/11 Python
Python制作一个仿QQ办公版的图形登录界面
2020/09/22 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
2020/11/18 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
高校教师思想汇报
2014/01/11 职场文书
学生干部学习的自我评价
2014/02/18 职场文书
法人代表证明书格式
2014/10/01 职场文书
介绍信格式样本
2015/05/05 职场文书
原告代理词范文
2015/05/25 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书
Java基于字符界面的简易收银台
2021/06/26 Java/Android