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排序方法实例分析
Apr 30 Python
使用Django Form解决表单数据无法动态刷新的两种方法
Jul 14 Python
python使用os.listdir和os.walk获得文件的路径的方法
Dec 16 Python
python 多线程串行和并行的实例
Feb 22 Python
解决Django后台ManyToManyField显示成Object的问题
Aug 09 Python
解决使用export_graphviz可视化树报错的问题
Aug 09 Python
简单了解Django ORM常用字段类型及参数配置
Jan 07 Python
Python中文分词库jieba,pkusegwg性能准确度比较
Feb 11 Python
Python读取分割压缩TXT文本文件实例
Feb 14 Python
浅谈Python 函数式编程
Jun 20 Python
如何让PyQt5中QWebEngineView与JavaScript交互
Oct 21 Python
python性能测试工具locust的使用
Dec 28 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网站备份程序代码分享
2011/06/10 PHP
php操作SVN版本服务器类代码
2011/11/27 PHP
js实现的网页颜色代码表全集
2007/07/17 Javascript
javascript 函数式编程
2007/08/16 Javascript
js中复制行和删除行的操作实例
2013/06/25 Javascript
JS日期和时间选择控件升级版(自写)
2013/08/02 Javascript
文本域中换行符的替换示例
2014/03/04 Javascript
jQuery+ajax实现鼠标单击修改内容的思路
2014/06/29 Javascript
简介JavaScript中fixed()方法的使用
2015/06/08 Javascript
angularjs 源码解析之scope
2016/08/22 Javascript
AngularJS用户选择器指令实例分析
2016/11/04 Javascript
vue cli 3.0 使用全过程解析
2018/06/14 Javascript
详解Vue微信授权登录前后端分离较为优雅的解决方案
2018/06/29 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
JS动画实现回调地狱promise的实例代码详解
2018/11/08 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
谈谈JavaScript中super(props)的重要性
2019/02/12 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
2019/05/18 Javascript
如何使用50行javaScript代码实现简单版的call,apply,bind
2019/08/14 Javascript
jquery实现聊天机器人
2020/02/08 jQuery
python3图片转换二进制存入mysql
2013/12/06 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
2018/12/07 Python
python next()和iter()函数原理解析
2020/02/07 Python
详解python 破解网站反爬虫的两种简单方法
2020/02/09 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
英国最大的奢侈品零售网络商城:Flannels
2016/09/16 全球购物
美国在线印刷公司:PsPrint
2017/10/12 全球购物
物流管理应届生求职信
2013/11/07 职场文书
运动会四百米广播稿
2014/01/19 职场文书
《我的信念》教学反思
2014/02/15 职场文书
舞蹈毕业生的自我评价
2014/03/05 职场文书
详细的本科生职业生涯规划范文
2014/09/16 职场文书
小学教师求职信范文
2015/03/20 职场文书
居住证明范文
2015/06/17 职场文书
创业计划书之家政服务
2019/09/18 职场文书
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python