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 相关文章推荐
python3 读写文件换行符的方法
Apr 09 Python
Python抽象和自定义类定义与用法示例
Aug 23 Python
pygame游戏之旅 调用按钮实现游戏开始功能
Nov 21 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
Jan 22 Python
python pexpect ssh 远程登录服务器的方法
Feb 14 Python
Python实现最常见加密方式详解
Jul 13 Python
浅析python 中大括号中括号小括号的区分
Jul 29 Python
tensorflow没有output结点,存储成pb文件的例子
Jan 04 Python
Tensorflow读取并输出已保存模型的权重数值方式
Jan 04 Python
python使用信号量动态更新配置文件的操作
Apr 01 Python
解决python 执行shell命令无法获取返回值的问题
Dec 05 Python
用pushplus+python监控亚马逊到货动态推送微信
Jan 29 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密码生成类实例
2014/09/24 PHP
Laravel 5.3 学习笔记之 配置
2016/08/28 PHP
PHP基于SMTP协议实现邮件发送实例代码
2017/04/27 PHP
PHP设计模式之原型模式定义与用法详解
2018/04/03 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
javascript 当前日期转化为中文的实现代码
2010/05/13 Javascript
TextArea设置MaxLength属性最大输入值的js代码
2012/12/21 Javascript
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
浅析webapp框架AngularUI的demo
2014/12/21 Javascript
bootstrap下拉列表与输入框组结合的样式调整
2016/10/08 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
node.js中实现kindEditor图片上传功能的方法教程
2017/04/26 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
2017/11/14 Javascript
vue实现自定义H5视频播放器的方法步骤
2019/07/01 Javascript
利用d3.js实现蜂巢图表带动画效果
2019/09/03 Javascript
Layui实现主窗口和Iframe层参数传递
2019/11/14 Javascript
javascript实现弹出层效果
2019/12/10 Javascript
JavaScript实现栈结构Stack过程详解
2020/03/07 Javascript
Element中Slider滑块的具体使用
2020/07/29 Javascript
[02:40]DOTA2超级联赛专访430 从小就爱玩对抗性游戏
2013/06/18 DOTA
Python调用C/C++动态链接库的方法详解
2014/07/22 Python
在Django的视图中使用form对象的方法
2015/07/18 Python
Python中pygal绘制雷达图代码分享
2017/12/07 Python
使用python实现BLAST
2018/02/12 Python
Python实现的微信支付方式总结【三种方式】
2019/04/13 Python
python 随机生成10位数密码的实现代码
2019/06/27 Python
基于python读取.mat文件并取出信息
2019/12/16 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
基于Keras的格式化输出Loss实现方式
2020/06/17 Python
html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
2014/05/08 HTML / CSS
大码女装:Ulla Popken
2019/08/06 全球购物
写给老婆的检讨书
2014/02/21 职场文书
安全责任书范本
2014/04/15 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
nginx rewrite功能使用场景分析
2022/05/30 Servers