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安装cx_Oracle模块常见问题与解决方法
Feb 21 Python
Python实现好友全头像的拼接实例(推荐)
Jun 24 Python
一篇文章读懂Python赋值与拷贝
Apr 19 Python
python dataframe向下向上填充,fillna和ffill的方法
Nov 28 Python
对Python3之方法的覆盖与super函数详解
Jun 26 Python
Python shutil模块用法实例分析
Oct 02 Python
wxPython窗体拆分布局基础组件
Nov 19 Python
python将数组n等分的实例
Dec 02 Python
python getopt模块使用实例解析
Dec 18 Python
Python编程快速上手——选择性拷贝操作案例分析
Feb 28 Python
基于python 取余问题(%)详解
Jun 03 Python
C++和python实现阿姆斯特朗数字查找实例代码
Dec 07 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
做个自己站内搜索引擎
2006/10/09 PHP
PHP管理内存函数 memory_get_usage()使用介绍
2012/09/23 PHP
php仿QQ验证码的实例分析
2013/07/01 PHP
thinkphp 一个页面使用2次分页的实现方法
2013/07/15 PHP
php 解压rar文件及zip文件的方法
2014/05/05 PHP
jQuery之网页换肤实现代码
2011/04/30 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
JavaScript替换当前页面的方法
2015/04/03 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
JavaScript 控制字体大小设置的方法
2016/11/23 Javascript
jquery广告无缝轮播实例
2017/01/05 Javascript
jQuery插件HighCharts绘制的2D堆柱状图效果示例【附demo源码下载】
2017/03/14 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
深入理解Angular中的依赖注入
2017/06/26 Javascript
vue实现仿淘宝结账页面实例代码
2017/11/08 Javascript
11行JS代码制作二维码生成功能
2018/03/09 Javascript
微信小程序实现带缩略图轮播效果
2018/11/04 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
2018/11/21 Javascript
用vue 实现手机触屏滑动功能
2020/05/28 Javascript
解决vue单页面应用进入页面加载所有 js 的问题
2020/08/12 Javascript
nuxt.js服务端渲染中axios和proxy代理的配置操作
2020/11/06 Javascript
[02:48]DOTA2英雄基础教程 拉席克
2013/12/12 DOTA
pycharm 使用心得(八)如何调用另一文件中的函数
2014/06/06 Python
Cpy和Python的效率对比
2015/03/20 Python
Python numpy 提取矩阵的某一行或某一列的实例
2018/04/03 Python
python 中如何获取列表的索引
2019/07/02 Python
python实现密码强度校验
2020/03/18 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
HTML块级标签汇总(小篇)
2016/07/13 HTML / CSS
保时捷设计:Porsche Design
2019/03/30 全球购物
客服文员岗位职责
2013/11/29 职场文书
学生党员思想汇报范文
2014/01/09 职场文书
社保转移委托书范本
2014/10/08 职场文书
解除处分决定书
2015/06/25 职场文书
Nginx 过滤静态资源文件的访问日志的实现
2021/03/31 Servers
Django实现在线无水印抖音视频下载(附源码及地址)
2021/05/06 Python