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

 更新时间:2014年04月03日 10:52:33   作者:  
这篇文章主要介绍了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代码的几种常见加密方式分享

    这篇文章主要介绍了python代码的几种常见加密方式分享,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07
  • python 三边测量定位的实现代码

    python 三边测量定位的实现代码

    这篇文章主要介绍了python 三边测量定位的实现代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • python实现的各种排序算法代码

    python实现的各种排序算法代码

    python实现的各种排序算法,包括选择排序、冒泡排序、插入排序、归并排序等,学习python的朋友可以参考下
    2013-03-03
  • Pycharm配置anaconda环境图文教程

    Pycharm配置anaconda环境图文教程

    这篇文章主要介绍了Pycharm配置anaconda环境图文教程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 将Python脚本打包成MACOSAPP程序过程

    将Python脚本打包成MACOSAPP程序过程

    我们编写python程序时,有时候需要想将python脚本转成可执行的程序或者app,可以直接通过双击执行即可,像Windows上可以将其通过工具转换成exe程序,那么在MACOS下我们可以将其打包成MACOS APP程序
    2021-09-09
  • 一文详解NumPy分割与搜索数组

    一文详解NumPy分割与搜索数组

    NumPy 提供了 np.array_split() 函数来分割数组,将一个数组拆分成多个较小的子数组和提供了多种方法来搜索数组中的元素,并返回匹配项的索引,本文将给大家详细介绍NumPy分割与搜索数组,需要的朋友可以参考下
    2024-05-05
  • Python实现邮件自动下载的示例详解

    Python实现邮件自动下载的示例详解

    这篇文章主要为大家详细介绍了如何利用Python语言实现邮件自动下载以及附件解析功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-07-07
  • 基于Pygame中Pygame模块的大战外星人实战

    基于Pygame中Pygame模块的大战外星人实战

    本文主要介绍了基于Pygame中Pygame模块的大战外星人实战,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Python安全获取域管理员权限几种方式操作示例

    Python安全获取域管理员权限几种方式操作示例

    在不考虑直接攻击域控的情况下,如何快速获取域管理员权限呢?本文分享几种常见的获取域管理员权限的方式,有需要的朋友可以借鉴参考下
    2021-10-10
  • python实现转盘效果 python实现轮盘抽奖游戏

    python实现转盘效果 python实现轮盘抽奖游戏

    这篇文章主要为大家详细介绍了python实现转盘效果,python实现轮盘抽奖游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01

最新评论