为了防止机器人恶意攻击,在网上注册账号、填写表单等操作时,经常需要通过输入验证码进行身份验证。验证码(Captcha)是一种人机识别技术,通过阻止自动化程序的恶意行为,确保用户行为的真实性。下面是一个用Python实现的简单的验证码生成和验证代码,包含了常见的数字和字母验证码。
```python
import random
from PIL import Image, ImageDraw, ImageFont
# 生成验证码
def generate_captcha(text_length=6, img_width=150, img_height=50, font_size=25):
# 随机生成指定长度的字符串
characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
text = ''.join(random.choice(characters) for _ in range(text_length))
# 创建一个空白图片
image = Image.new('RGB', (img_width, img_height), color=(255, 255, 255))
draw = ImageDraw.Draw(image)
# 设置字体
font = ImageFont.truetype('arial.ttf', font_size)
# 随机绘制干扰线
for _ in range(random.randint(2, 5)):
line_color = tuple(random.randint(0, 255) for _ in range(3))
start_point = (random.randint(0, img_width), random.randint(0, img_height))
end_point = (random.randint(0, img_width), random.randint(0, img_height))
draw.line([start_point, end_point], fill=line_color, width=2)
# 绘制验证码文本
text_width, text_height = draw.textsize(text, font=font)
text_position = ((img_width - text_width) // 2, (img_height - text_height) // 2)
draw.text(text_position, text, font=font, fill=(0, 0, 0))
# 添加噪点
for _ in range(random.randint(100, 200)):
dot_color = tuple(random.randint(0, 255) for _ in range(3))
dot_position = (random.randint(0, img_width), random.randint(0, img_height))
draw.point(dot_position, fill=dot_color)
# 高斯模糊处理
image = image.filter(ImageFilter.GaussianBlur(radius=random.randint(0, 2)))
# 返回验证码文本和图片
return text, image
# 验证验证码
def verify_captcha(input_text, generated_text):
return input_text.lower() == generated_text.lower()
# 测试代码
if __name__ == '__main__':
text, image = generate_captcha()
image.show()
input_text = input('请输入验证码:')
if verify_captcha(input_text, text):
print('验证码输入正确!')
else:
print('验证码输入错误!')
```
以上代码首先定义了一个`generate_captcha`函数,用于生成验证码。在函数内部,首先随机生成指定长度的字符串,然后创建一个空白图片,并使用`PIL`库中的`ImageDraw`和`ImageFont`类来进行绘制。随机绘制几条干扰线,绘制验证码文本,并添加一些噪点。最后,对图片进行高斯模糊处理,以增加验证码的难度。函数最后返回生成的验证码文本和图片。
接下来,定义了一个`verify_captcha`函数,用于验证用户输入的验证码是否正确,该函数将输入的验证码和生成的验证码都转换为小写字母后进行比较。
在测试代码部分,调用`generate_captcha`函数生成验证码,并展示出来。然后通过输入函数获取用户输入的验证码,并调用`verify_captcha`函数进行验证。根据验证结果输出相应的信息。
这是一个简单的验证码生成和验证代码,可以根据需求进行扩展和优化,例如增加更多字符和字体样式的选择,调整干扰线和噪点的数量和样式等,以提高验证码的安全性和可读性。
声明:免责声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,也不承认相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,请发送邮件至:dm@cn86.cn进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。本站原创内容未经允许不得转载。