python随机数生成验证码,随机生成验证码的代码

  python随机数生成验证码,随机生成验证码的代码

  如何用python绕过验证码,是一件很秃的事情。本文将详细介绍如何用Python生成随机验证码。文章中的示例代码简单易懂,感兴趣的朋友可以和边肖一起尝试一下。

  00-1010 1.先启动环境。2.开始码码。3.添加干扰。4.多加干扰。5.保存验证码的随机字符。本地(可选)最近感觉自己被大数据定义成机器人了。随便看个网页,跳转验证码就行了。

  如何用python绕过验证码是个光头的事情,

  我投降!所以今天教大家怎么写验证码,让别人难堪,让别人秃顶。

  错了,其实是教你如何通过python代码生成验证码~ ~

  

目录

  1.我们需要你的电脑有3.4以上的python3.4版本。

  2.pip安装PIL包

  pip安装枕头

  3.默念‘人生苦短,我用python’,然后打开闲置启动代码!

  

1.先搞环境

  1.确定画布大小和背景颜色

  #导入相关绘画模块

  从PIL导入图像,图像绘制,图像字体

  #设置背景颜色

  bg_color=(100,100,255)

  #设置画布的长度和宽度(以像素为单位)

  宽度=400

  高度=100

  #通过设置生成新画布

  im=Image.new(RGB ,(宽度,高度),bg_color)

  #显示画布

  im.show()

  bg_color背景色的设置是按照RGB颜色标准设置的。如果不喜欢这个背景色,可以自己调整。

  “常见的RGB颜色

  运行代码后:

  2.在背景布上画人物

  第一代码

  从PIL导入图像,图像绘制,图像字体

  #省略第一步的代码

  #创建一个画笔对象

  draw=ImageDraw。绘制(im)

  #验证码文本

  string=MSBC

  #构造一个字体对象

  font=ImageFont.truetype(。/ziti.ttf ,90)

  # font=ImageFont.load_default()。字体

  #构造字体颜色

  fontcolor=(255,100,100)

  #画4个字

  draw.text((10,2),string[0],font=font,fill=fontcolor)

  draw.text((110,2),string[1],font=font,fill=fontcolor)

  draw.text((210,2),string[2],font=font,fill=fontcolor)

  draw.text((310,2),string[3],font=font,fill=fontcolor)

  #放开画笔

  德尔画图

  #显示图片

  im.show()

  代码分析:

  draw=ImageDraw。绘制(im)

  在im画布上实例化一支笔。

  font=ImageFont.truetype(。/ziti.ttf ,90)

  # font=ImageFont.load_default()。字体

  第一个参数是设置字体。我这里下载了一个ttf字体文件,可以用。如果没有指定的字体文件,我可以使用默认的# font=imagefont.load _ default()。字体;

  第二个参数是绘图字体的大小。因为我们的画布是400x100,为了美观,我们把字体大小设置为90x90。

  #构造字体颜色

  fontcolor=(255,100,100)

  字体的颜色,参考第一步画布的RGB设置。

  ss="brush:py;"># 绘制4个字

  draw.text((10, 2), string[0], font=font, fill=fontcolor)

  draw.text((110, 2), string[1], font=font, fill=fontcolor)

  draw.text((210, 2), string[2], font=font, fill=fontcolor)

  draw.text((310, 2), string[3], font=font, fill=fontcolor)

  

  这里 draw.text 函数,顾名思义就是开始拿画起画笔开始写字,

  第一个参数 写字的坐标;

  第二个参数 要写的字;

  第三个参数 字的颜色(上面构造过了,你也可以设成一字一色)。

  代码跑一下看成果:

  

  效果还行,就是总觉得少了点什么?

  

  

3. 加干扰

  既然是验证码,肯定要稍微难识别,上面那个那么傻白甜的验证码是怎么回事??

  这一步我们需要导入 random 模块,因为干扰是不规则随机生成的。

  

import random

  from PIL import Image, ImageDraw, ImageFont

  # 省略第一步代码

  # 省略第二步代码

  #使用point函数绘制噪点

  for i in range(0, 100):

      xy = (random.randrange(0, width), random.randrange(0, height))

      fill = (random.randrange(0, 255), 255, random.randrange(0, 255))

      draw.point(xy, fill=fill)

  #释放画笔

  del draw   

  im.show()

  代码分析:

  

import random

  

  别忘了导入 random 模块

  

for i in range(0, 100):

   xy = (random.randrange(0, width), random.randrange(0, height))

   fill = (255, 255, 255)

   draw.point(xy, fill=fill)

  

  一个循环100次的 for 循环,

  xy 变量是画干扰点的坐标值

  fill 变量是噪点的颜色,还是 RGB 标准的

  draw.point 画点的动作

  这个for循环的次数越多,画布上噪点也会相应增多。

  跑一下代码看看噪点的效果如何:

  

  感觉还是有点傻白甜,我们来循环1000次的试试:

  

  10000次!

  

  够了。

  

  

4. 加入更多的干扰

  这一步我将各个参数结合 random 模块,使我们的验证码更难辨别!

  

import random

  from PIL import Image, ImageDraw, ImageFont

  bg_color = (random.randrange(20, 120), random.randrange(20, 120), random.randrange(150, 255))

  width = 400

  height = 100

  im = Image.new(RGB,(width,height),bg_color)

  # 创建画笔对象

  draw = ImageDraw.Draw(im)

  # 构造字体对象

  font = ImageFont.truetype(./ziti.ttf, 100)

  # font = ImageFont.load_default().font

  # 构造字体颜色

  fontcolor = (random.randrange(0, 255), random.randrange(0, 255), random.randrange(0, 255))

  # 绘制4个字

  string = MSBC

  draw.text((random.randint(10, 30), (random.randint(0, 10))), string[0], font=font, fill=fontcolor)

  draw.text((random.randint(90, 130), (random.randint(0, 10))), string[1], font=font, fill=fontcolor)

  draw.text((random.randint(180, 230), (random.randint(0, 10))), string[2], font=font, fill=fontcolor)

  draw.text((random.randint(270, 330), (random.randint(0, 10))), string[3], font=font, fill=fontcolor)

  #调用画笔的point()函数绘制噪点

  for i in range(0, 10000):

      xy = (random.randrange(0, width), random.randrange(0, height))

      fill = (random.randrange(0, 255), random.randrange(0, 255), random.randrange(0, 255))

      draw.point(xy, fill=fill)

  #释放画笔

  del draw

  im.show()

  我把字体颜色,噪点颜色,文本位置都结合了random模块,效果图如下:

  

  

  

5. 验证码 + 随机字符

  这一步,我们需要把上面的代码封装到函数中,大致把上面代码重构成:

  

# 使用for循环生成文本字符

  # 生成验证码图片的函数,参数就是上面生成的文本

  # 调用生成验证码图片函数

  重构后:

  

import random

  from PIL import Image, ImageDraw, ImageFont

  string =

  #随机选取4个值作为验证码

  rand_str = ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

  for i in range(0, 4):

      string += rand_str[random.randrange(0, len(rand_str))]

  def gen_verify_img(text):

      bg_color = (random.randrange(20, 120), random.randrange(20, 120), random.randrange(150, 255))

      width = 400

      height = 100

      im = Image.new(RGB,(width,height),bg_color)

      # 创建画笔对象

      draw = ImageDraw.Draw(im)

      # 构造字体对象

      font = ImageFont.truetype(./ziti.ttf, 100)

      # font = ImageFont.load_default().font

      # 构造字体颜色

      fontcolor = (random.randrange(0, 255), random.randrange(0, 255), random.randrange(0, 255))

      # 绘制4个字

      draw.text((random.randint(10, 30), (random.randint(0, 10))), string[0], font=font, fill=fontcolor)

      draw.text((random.randint(90, 130), (random.randint(0, 10))), string[1], font=font, fill=fontcolor)

      draw.text((random.randint(180, 230), (random.randint(0, 10))), string[2], font=font, fill=fontcolor)

      draw.text((random.randint(270, 330), (random.randint(0, 10))), string[3], font=font, fill=fontcolor)

      #调用画笔的point()函数绘制噪点

      for i in range(0, 10000):

          xy = (random.randrange(0, width), random.randrange(0, height))

          fill = (random.randrange(0, 255), random.randrange(0, 255), random.randrange(0, 255))

          draw.point(xy, fill=fill)

      #释放画笔

      del draw

      im.show()

  # 调用函数

  gen_verify_img(string)

  把原先代码中的 string 变量提到了函数外,把它变成函数需要传入的参数,

  再用 for 循环,随机选出4个字符。

  

string = 

  #随机选取4个值作为验证码

  rand_str = ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

  for i in range(0, 4):

   string += rand_str[random.randrange(0, len(rand_str))]

  

  代码再跑一下:

  

  上面的验证码是 DZNO 还是 DZN0 ?

  

  

6. 验证码保存本地(选)

  在web开发的登录操作,和训练验证码识别的神经运算中,都需要大量的验证码图片。

  所以需要把大量的验证码图片文件,我们将批量验证码保存到本地。

  

  完整代码:

  

import random

  from PIL import Image, ImageDraw, ImageFont

  def gen_verify_img(text):

      bg_color = (random.randrange(20, 120), random.randrange(20, 120), random.randrange(150, 255))

      width = 400

      height = 100

      im = Image.new(RGB,(width,height),bg_color)

      # 创建画笔对象

      draw = ImageDraw.Draw(im)

      # 构造字体对象

      font = ImageFont.truetype(./ziti.ttf, 100)

      # font = ImageFont.load_default().font

      # 构造字体颜色

      fontcolor = (random.randrange(0, 255), random.randrange(0, 255), random.randrange(0, 255))

      # 绘制4个字

      draw.text((random.randint(10, 30), (random.randint(0, 10))), string[0], font=font, fill=fontcolor)

      draw.text((random.randint(90, 130), (random.randint(0, 10))), string[1], font=font, fill=fontcolor)

      draw.text((random.randint(180, 230), (random.randint(0, 10))), string[2], font=font, fill=fontcolor)

      draw.text((random.randint(270, 330), (random.randint(0, 10))), string[3], font=font, fill=fontcolor)

      #调用画笔的point()函数绘制噪点

      for i in range(0, 10000):

          xy = (random.randrange(0, width), random.randrange(0, height))

          fill = (random.randrange(0, 255), random.randrange(0, 255), random.randrange(0, 255))

          draw.point(xy, fill=fill)

      #释放画笔

      del draw

      # im.show()

      im.save(f./{text}.png,png)

  for i in range(100):

      string =

      #随机选取4个值作为验证码

      rand_str = ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

      for i in range(0, 4):

          string += rand_str[random.randrange(0, len(rand_str))]

      gen_verify_img(string)

      print(f{string} 验证码生成成功!!)

  最后再跑一下:

  

  部分验证码展示:

  

  注:如果再将本文中的代码进行变形或改写,可能会得到更五花八门的验证码,怎么发挥就看屏幕钱你的了。

  以上就是利用Python生成随机验证码详解的详细内容,更多关于Python验证码的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • qq短信验证码发送失败怎么回事,qq验证码失败是怎么回事
  • ,,使用阿里大于(大鱼)平台进行发送手机验证码的流程
  • ,,SpringSceurity实现短信验证码登陆
  • android读取短信验证码,
  • android读取短信验证码,,Android使用MobSDK短信验证
  • android自动获取短信验证码功能在哪,安卓自动获取短信验证码
  • android自动获取短信验证码功能在哪,android自动获取短信验证码功能失效,Android自动获取短信验证码功能
  • android实现短信验证码自动填写功能是什么,安卓短信验证码自动填充 实现
  • android实现短信验证码自动填写功能是什么,安卓短信验证码自动填充 实现,Android实现短信验证码自动填写功能
  • android如何通过手机自动获取短信验证码信息,安卓自动获取短信验证码
  • android如何通过手机自动获取短信验证码信息,安卓自动获取短信验证码,Android如何通过手机自动获取短信验证码
  • ,,python网络爬虫实现发送短信验证码的方法
  • ,,Python实现滑块拼图验证码详解
  • ,,python3 破解 geetest(极验)的滑块验证码功能
  • 发验证码不在桌面显示,验证码能收到桌面上不显示怎么回事
  • 留言与评论(共有 条评论)
       
    验证码: