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中用于处理字符串的center()方法
May 18 Python
python简单实例训练(21~30)
Nov 15 Python
python并发编程多进程之守护进程原理解析
Aug 20 Python
python做接口测试的必要性
Nov 20 Python
python二元表达式用法
Dec 04 Python
python标准库OS模块详解
Mar 10 Python
python获取系统内存占用信息的实例方法
Jul 17 Python
python如何删除列为空的行
Jul 17 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
Oct 26 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
Feb 02 Python
如何理解python接口自动化之logging日志模块
Jun 15 Python
python实现双链表
May 25 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
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
vs中通过剪切板循环来循环粘贴不同内容
2011/04/30 PHP
学习php设计模式 php实现装饰器模式(decorator)
2015/12/07 PHP
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
2010/03/18 Javascript
jQuery 锚点跳转滚动条平滑滚动一句话代码
2010/04/30 Javascript
jQuery如何实现点击页面获得当前点击元素的id或其他信息
2014/01/09 Javascript
不用一句js代码初始化组件
2016/01/27 Javascript
详解vue.js的devtools安装
2017/05/26 Javascript
Vue.js实现微信过渡动画左右切换效果
2017/06/13 Javascript
vuex的使用及持久化state的方式详解
2018/01/23 Javascript
vue-cli webpack 引入swiper的操作方法
2018/09/15 Javascript
bootstrap table合并行数据并居中对齐效果
2018/10/17 Javascript
基于vue-cli3和element实现登陆页面
2019/11/13 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
详细分析vue响应式原理
2020/06/22 Javascript
解决Mint-ui 框架Popup和Datetime Picker组件滚动穿透的问题
2020/11/04 Javascript
Python中Django 后台自定义表单控件
2017/03/28 Python
浅谈Python使用Bottle来提供一个简单的web服务
2017/12/27 Python
Python实现的knn算法示例
2018/06/14 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
PyTorch中topk函数的用法详解
2020/01/02 Python
Python 2种方法求某个范围内的所有素数(质数)
2020/01/31 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
2020/02/17 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
使用CSS3实现input多选框自定义样式的方法示例
2019/07/19 HTML / CSS
波兰最大的宠物用品网上商店:FERA.PL
2019/08/11 全球购物
学校介绍信范文
2014/01/14 职场文书
高三生物教学反思
2014/01/25 职场文书
工厂门卫岗位职责范本
2014/04/04 职场文书
知识竞赛拉拉队口号
2014/06/16 职场文书
先进事迹材料怎么写
2014/12/30 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
个人工作年终总结
2015/03/09 职场文书
幼儿园教师读书笔记
2015/06/29 职场文书
诗词赏析-(浣溪沙)
2019/08/13 职场文书
建国70周年的心得体会(2篇)
2019/09/20 职场文书