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编写简单爬虫资料汇总
Mar 22 Python
浅谈python 四种数值类型(int,long,float,complex)
Jun 08 Python
Python入门之三角函数全解【收藏】
Nov 08 Python
Django在win10下的安装并创建工程
Nov 20 Python
python编程线性回归代码示例
Dec 07 Python
python使用numpy读取、保存txt数据的实例
Oct 14 Python
pygame游戏之旅 添加icon和bgm音效的方法
Nov 21 Python
使用Python控制摄像头拍照并发邮件
Apr 23 Python
python Tcp协议发送和接收信息的例子
Jul 22 Python
解决Python设置函数调用超时,进程卡住的问题
Aug 08 Python
Django框架中间件定义与使用方法案例分析
Nov 28 Python
Python Sympy计算梯度、散度和旋度的实例
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
关于Appserv无法打开localhost问题的解决方法
2009/10/16 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
2014/10/15 PHP
php获取手机端的号码以及ip地址实例代码
2018/09/12 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
2019/10/30 PHP
Yii框架模拟组件调用注入示例
2019/11/11 PHP
javascript实现轮显新闻标题链接
2007/08/13 Javascript
火狐浏览器(firefox)下获得Event对象以及keyCode
2008/11/13 Javascript
Prototype源码浅析 Enumerable部分(二)
2012/01/18 Javascript
基于JavaScript实现简单的随机抽奖小程序
2016/01/05 Javascript
JavaScript实现移动端滑动选择日期功能
2016/06/21 Javascript
Angular 常用指令实例总结整理
2016/12/13 Javascript
JavaScript变量类型以及变量作用域详解
2017/08/14 Javascript
慕课网题目之js实现抽奖系统功能
2017/09/19 Javascript
nodejs操作mongodb的填删改查模块的制作及引入实例
2018/01/02 NodeJs
vue-cli开发环境实现跨域请求的方法
2018/04/07 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
2018/08/12 Javascript
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
通过vue手动封装on、emit、off的代码详解
2019/05/29 Javascript
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
10款最好的Web开发的 Python 框架
2015/03/18 Python
Python数据类型详解(三)元祖:tuple
2016/05/08 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
对python xlrd读取datetime类型数据的方法详解
2018/12/26 Python
python实现将文件夹内的每张图片批量分割成多张
2019/07/22 Python
利用Python小工具实现3秒钟将视频转换为音频
2019/10/29 Python
pytorch 自定义卷积核进行卷积操作方式
2019/12/30 Python
matlab中二维插值函数interp2的使用详解
2020/04/22 Python
python中adb有什么功能
2020/06/07 Python
scrapy-splash简单使用详解
2021/02/21 Python
检测用户浏览器是否支持CSS3的方法
2009/08/29 HTML / CSS
司机检讨书
2014/02/13 职场文书
暑期社会实践心得体会
2014/09/02 职场文书
暑期实践个人总结
2015/03/06 职场文书
学生会生活部工作总结2015
2015/03/31 职场文书
庆七一主持词
2015/06/29 职场文书
餐馆开业致辞
2015/08/01 职场文书