python生成随机验证码(中文验证码)示例


Posted in Python onApril 03, 2014
# -*- 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 httplib,smtplib使用方法
Sep 06 Python
使用python检测手机QQ在线状态的脚本代码
Feb 10 Python
ubuntu系统下 python链接mysql数据库的方法
Jan 09 Python
在Django同1个页面中的多表单处理详解
Jan 25 Python
Python 中Django验证码功能的实现代码
Jun 20 Python
python 矢量数据转栅格数据代码实例
Sep 30 Python
Python 实现取多维数组第n维的前几位
Nov 26 Python
python装饰器相当于函数的调用方式
Dec 27 Python
Django的CVB实例详解
Feb 10 Python
如何在python中执行另一个py文件
Apr 30 Python
Django权限设置及验证方式
May 13 Python
python中的unittest框架实例详解
Feb 05 Python
python读取html中指定元素生成excle文件示例
Apr 03 #Python
python实现zencart产品数据导入到magento(python导入数据)
Apr 03 #Python
python模拟登陆阿里妈妈生成商品推广链接
Apr 03 #Python
python多线程抓取天涯帖子内容示例
Apr 03 #Python
python局域网ip扫描示例分享
Apr 03 #Python
python实现数通设备tftp备份配置文件示例
Apr 02 #Python
python实现巡检系统(solaris)示例
Apr 02 #Python
You might like
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
显示、隐藏密码
2006/07/01 Javascript
ASP.NET jQuery 实例18 通过使用jQuery validation插件校验DropDownList
2012/02/03 Javascript
setTimeout的延时为0时多个浏览器的区别
2012/05/23 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
2013/04/11 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
2013/11/07 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
2016/06/02 Javascript
Google 地图叠加层实例讲解
2016/08/06 Javascript
微信小程序 删除项目工程实现步骤
2016/11/10 Javascript
巧用数组制作图片切换js代码
2016/11/29 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
JavaScript数据结构之二叉树的删除算法示例
2017/04/13 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
2017/04/13 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
2017/08/16 Javascript
微信小程序模板和模块化用法实例分析
2017/11/28 Javascript
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
webpack4+react多页面架构的实现
2018/10/25 Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
2019/10/23 Javascript
vue.js循环radio的实例
2019/11/07 Javascript
Javascript实现html转pdf高清版(提高分辨率)
2020/02/19 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
Python中解析JSON并同时进行自定义编码处理实例
2015/02/08 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
浅析python3中的os.path.dirname(__file__)的使用
2018/08/30 Python
Python get获取页面cookie代码实例
2018/09/12 Python
Python格式化输出字符串方法小结【%与format】
2018/10/29 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
2020/03/20 Python
python按照list中字典的某key去重的示例代码
2020/10/13 Python
class类在python中获取金融数据的实例方法
2020/12/10 Python
巴西服装和鞋子购物网站:Marisa
2018/10/25 全球购物
业务经理岗位职责
2013/11/11 职场文书
《小池塘》教学反思
2014/02/28 职场文书
采购意向书范本
2014/03/31 职场文书
市场营销毕业求职信
2014/08/07 职场文书