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实现将汉字转换成汉语拼音的库
May 05 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
Jul 02 Python
numpy中的高维数组转置实例
Apr 17 Python
Django读取Mysql数据并显示在前端的实例
May 27 Python
python远程连接服务器MySQL数据库
Jul 02 Python
pyqt远程批量执行Linux命令程序的方法
Feb 14 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
Apr 09 Python
Django Channels 实现点对点实时聊天和消息推送功能
Jul 17 Python
使用python动态生成波形曲线的实现
Dec 04 Python
Python调用百度OCR实现图片文字识别的示例代码
Jul 17 Python
Python实现播放和录制声音的功能
Aug 12 Python
pandas实现导出数据的四种方式
Dec 13 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
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
PHP计算指定日期所在周的开始和结束日期的方法
2015/03/24 PHP
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
PHP常用的三种设计模式汇总
2016/08/28 PHP
php统计数组不同元素的个数的实例方法
2019/09/26 PHP
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
jquery 通过name快速取值示例
2014/01/24 Javascript
js中对函数设置默认参数值的3种方法
2015/10/23 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
AngularJs IE Compatibility 兼容老版本IE
2016/09/01 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
2017/04/01 Javascript
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
Vue中如何实现proxy代理
2018/04/20 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
2018/09/04 jQuery
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
2019/09/02 Javascript
[44:22]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第一场 11.01
2020/11/02 DOTA
在Python的Django框架中simple-todo工具的简单使用
2015/05/30 Python
python实现mysql的单引号字符串过滤方法
2015/11/14 Python
Python中print和return的作用及区别解析
2019/05/05 Python
Django的性能优化实现解析
2019/07/30 Python
django 配置阿里云OSS存储media文件的例子
2019/08/20 Python
python中open函数的基本用法示例
2019/09/07 Python
python3中pip3安装出错,找不到SSL的解决方式
2019/12/12 Python
django使用多个数据库的方法实例
2021/03/04 Python
捷克鲜花配送:Florea.cz
2018/10/29 全球购物
难忘的一天教学反思
2014/04/30 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
机关干部四风问题自查报告及整改措施
2014/10/26 职场文书
上班旷工检讨书
2015/08/15 职场文书
2016党校学习心得体会范文
2016/01/07 职场文书
《曾国藩家书》读后感——读家书,立家风
2019/08/21 职场文书
【js设计模式】SOLID五大设计原则
2022/03/24 Javascript