Python 生成验证码

Python 生成验证码

CAPTCHA,短语表示 完全自动化的图灵测试,用于区分计算机和人类 是许多网站中使用的重要测试,用于检查访问网站的人是人还是机器人。这主要是出于安全考虑,以防止机器人侵入网站并引发虚假统计数据和扭曲网络流量。

其主要目的是生成对人类来说易于理解,但对机器人或其他计算机来说难以解决的测试。它们提供利用用户的认知和思维能力的测试。

有各种类型的CAPTCHA可用。最常见的CAPTCHA类型包括:

  • 基于图像的CAPTCHA :向人类提供图像,并对特征进行扭曲,以使计算机的图像识别变得困难。

  • 基于文本的CAPTCHA :提供一系列模糊字符,通过扭曲特征和随机噪声使字符识别变得困难。

  • 基于音频的CAPTCHA :向人类提供已朗读的字符或片段的音频记录,需要正确输入系统。

  • 行为CAPTCHA :执行对机器人难以复制/自动化的特定操作。

要在Python中生成CAPTCHA,我们需要在系统中安装PIL(Python Imaging Library)库。为此,我们安装PIL库的一个分支叫做Pillow。为此,我们在命令提示符中键入:

pip install Pillow

然后我们可以在Python中导入PIL来生成我们的验证码代码。

示例1

在本例中,我们将学习使用Python生成基于文本的验证码。

步骤

  • 导入所需的库。

  • 创建一个带有任意颜色背景的空白图像。

  • 定义验证码的长度并连接一个随机单词的字符串。

  • 自定义生成文本的字体和字体大小。

  • 计算文本大小并将其居中。

  • 使用需要在中心打印的值来绘制计算的文本图像。

  • 在图像上添加一些随机噪声并填充黑色。

  • 定义验证码图像的宽度、高度和字符串长度。

  • 保存验证码图像。

import random
from PIL import Image, ImageDraw, ImageFont

def generate_captcha(width, height, length):
   # Create a blank image with a yellow background
   image = Image.new('RGB', (width, height), 'yellow')
   draw = ImageDraw.Draw(image)

   # Define the characters to be used in the CAPTCHA
   characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'

   # With a given length a random string is generated
   captcha_text = ''.join(random.sample(characters, length))

   # Define the font and its size
   font = ImageFont.truetype('arial.ttf', 72)

   # Calculate the text size and position it in the center
   t_width, t_height = draw.textsize(captcha_text, font)
   text_x = (width - t_width) / 2
   text_y = (height - t_height) / 2

   #Text is drawn in the image
   draw.text((text_x, text_y), captcha_text, font=font, fill='black')

   # Noise is added to create image distortion
   for x in range(width):
    for y in range(height):
      if random.random() < 0.1:
       draw.point((x, y), fill='black')

   # Return the generated CAPTCHA image and the corresponding text
   return image, captcha_text

width = 700  # Width of the CAPTCHA image
height = 350  # Height of the CAPTCHA image
length = 6   # Length of the CAPTCHA text

captcha_image, captcha_text = generate_captcha(width, height, length)
captcha_image.save('captcha.png')

我们将需要用于生成CAPTCHA的所有字符定义为一个字符串变量。在定义字体(Arial)和CAPTCHA图像的字体大小之后,将其定位在图像的中心是很重要的。然后,我们使用draw()函数将这段文字绘制在空白图像上,并将颜色填充为“黑色”(可以更改为不同的颜色)。

然后,我们需要向图像中添加噪声。这是通过在整个图像上启动一个for循环来完成的,并检查随机值是否小于0.1(如果大于0.1,那么它将非常明显)。然后,这些位置被填充为黑色,以创建图像失真,众所周知,计算机软件目前无法处理非常嘈杂的数据。

输出

Python 生成验证码

结论

生成CAPTCHA是防止恶意和可疑机器人访问网站的有效方法。在这个充满技术蓬勃发展的世界中,每个网站都需要拥有CAPTCHA,因为它比以往任何时候都更容易受到攻击和黑客的威胁。

因此,由于技术的进步和实施了更高准确性的OCR(光学字符识别)技术,一些机器人可能能够相对容易地绕过CAPTCHA。另一个问题是恶意用户可以构建机器学习算法,并根据CAPTCHA训练模型以绕过测试。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程