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使用win32com在百度空间插入html元素示例
Feb 20 Python
Python编程中运用闭包时所需要注意的一些地方
May 02 Python
Python中的anydbm模版和shelve模版使用指南
Jul 09 Python
python中日志logging模块的性能及多进程详解
Jul 18 Python
pandas Dataframe行列读取的实例
Jun 08 Python
对Python捕获控制台输出流的方法详解
Jan 07 Python
对python PLT中的image和skimage处理图片方法详解
Jan 10 Python
selenium获取当前页面的url、源码、title的方法
Jun 12 Python
django settings.py 配置文件及介绍
Jul 15 Python
python文字转语音的实例代码分析
Nov 12 Python
Python3 获取文件属性的方式(时间、大小等)
Mar 12 Python
Python pip 常用命令汇总
Oct 19 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获取网络上文件
2006/10/09 PHP
PHP 翻页 实例代码
2009/08/07 PHP
PHP中if和or运行效率对比
2014/12/12 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
2016/04/02 PHP
PHP实现的日历功能示例
2018/09/01 PHP
Jquery 最近浏览过的商品的功能实现代码
2010/05/14 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
JQuery设置和去除disabled属性的5种方法总结
2013/05/16 Javascript
showModalDialog在谷歌浏览器下会返回Null的解决方法
2013/11/27 Javascript
jquery判断小数点两位和自动删除小数两位后的数字
2014/03/19 Javascript
一个简单的jquery进度条示例
2014/04/28 Javascript
JavaScript使用循环和分割来替换和删除元素实例
2014/10/13 Javascript
node.js下LDAP查询实例分享
2015/09/30 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
2016/03/12 Javascript
Angular.js回顾ng-app和ng-model使用技巧
2016/04/26 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
2016/05/10 Javascript
js + css实现标签内容切换功能(实例讲解)
2017/10/09 Javascript
基于js中this和event 的区别(详解)
2017/10/24 Javascript
基于Axios 常用的请求方法别名(详解)
2018/03/13 Javascript
Vue项目中使用better-scroll实现菜单映射功能方法
2019/09/11 Javascript
node koa2 ssr项目搭建的方法步骤
2020/12/11 Javascript
python中的字典详细介绍
2014/09/18 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
2018/01/08 Python
Python之list对应元素求和的方法
2018/06/28 Python
Python实现通过继承覆盖方法示例
2018/07/02 Python
Python3单行定义多个变量或赋值方法
2018/07/12 Python
Python的缺点和劣势分析
2019/11/19 Python
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
windeln官方海外旗舰店:德淘超人气母婴超市
2017/12/15 全球购物
会计实习期自我鉴定
2013/10/06 职场文书
财务会计专业自荐书
2014/06/30 职场文书
环境日宣传活动总结
2014/07/09 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
何玥事迹观后感
2015/06/16 职场文书
MySQL数据迁移相关总结
2021/04/29 MySQL
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
2022/04/07 Servers