Python实战:打造自定义随机验证码生成器

Python实战:打造自定义随机验证码生成器

在许多网站中,验证码作为一种安全机制被广泛采用,用于验证用户身份、防止自动化攻击和确保数据安全。本篇教程将带领您一步步使用Python创建一个功能齐全的随机验证码生成器。我们将通过导入必要的库、定义辅助函数以及编写主函数check_code(),来实现生成包含随机字符、多彩背景、干扰元素及边缘增强效果的验证码图片。让我们开始动手实践吧!

1. 导入所需库

首先,我们需要引入以下几个Python库来支持验证码生成过程中的图像处理和随机数生成:

import random
from PIL import Image, ImageDraw, ImageFont, ImageFilter
  • random库:用于生成各种随机数,包括字符选择、颜色值确定等。
  • PIL(Python Imaging Library):这是一个强大的图像处理库,包含ImageImageDrawImageFontImageFilter模块,分别用于创建和操作图像、绘制图形、加载字体以及应用图像滤镜。

2. 定义辅助函数

为了使代码更清晰、易读,我们定义两个辅助函数:rndChar()rndColor(),分别用于生成随机字符和随机颜色。

2.1 rndChar():生成随机字母或数字

def rndChar():"""生成随机字母或数字:return:"""random_char = random.choice([chr(random.randint(65, 90)),  # 字母(大写)str(random.randint(0, 9))]  # 数字)return random_char

此函数通过random.choice()从一个列表中随机选取一个元素。列表中包含两种类型的元素:大写字母(ASCII码范围65到90)和数字(0到9)。每次调用rndChar()会返回一个随机的字母或数字。

2.2 rndColor():生成随机颜色

def rndColor():"""生成随机颜色:return:"""return (random.randint(0, 255), random.randint(10, 255), random.randint(64, 255))

该函数返回一个包含三个整数的元组,分别代表红、绿、蓝(RGB)通道的颜色值。每个值都在指定范围内随机选取,确保生成的色彩丰富且具有良好的可读性。

3. 主函数check_code()

接下来,我们编写主函数check_code(),它接受一系列参数并负责整个验证码的生成过程,包括创建空白图像、绘制字符、添加干扰元素,以及最后的图像滤镜处理。

3.1 初始化与设置

def check_code(width=120, height=30, char_length=5, font_file='Monaco.ttf', font_size=28):code = []  # 存储生成的验证码字符序列# 创建一张图片img = Image.new(mode='RGB', size=(width, height), color=(255, 255, 255))draw = ImageDraw.Draw(img, mode='RGB')

函数接受以下参数:

  • widthheight:验证码图片的宽度和高度,默认为120像素宽、30像素高。
  • char_length:验证码字符数量,默认为5个。
  • font_file:字体文件路径,默认使用’Monaco.ttf’。
  • font_size:验证码字符的字体大小,默认为28像素。

首先创建一个空白的RGB模式图像,并设置其背景色为白色。接着,创建一个ImageDraw对象draw,用于在图像上绘制文本和图形。

3.2 绘制验证码字符

def rndChar():...
def rndColor():...font = ImageFont.truetype(font_file, font_size)
for i in range(char_length):char = rndChar()code.append(char)h = random.randint(0, 4)  # 随机字符基线偏移draw.text([i * width / char_length, h], char, font=font, fill=rndColor())

使用ImageFont.truetype()加载指定的字体文件,并设置字体大小。然后,循环char_length次,每次生成一个随机字符、将其添加到code列表中,并在图像上绘制。字符的位置根据索引i均匀分布,基线高度有一个随机的小幅偏移(0到4像素),以增加视觉复杂度。字符颜色由rndColor()函数随机生成。

3.3 添加干扰元素

为了降低机器识别的成功率,我们在验证码图片中加入多种干扰元素:

3.3.1 干扰点
for i in range(40):draw.point([random.randint(0, width), random.randint(0, height)], fill=rndColor())

随机生成40个点,其坐标在图像范围内均匀分布,颜色同样由rndColor()函数提供。

3.3.2 干扰圆圈
for i in range(40):draw.point([random.randint(0, width), random.randint(0, height)], fill=rndColor())x = random.randint(0, width)y = random.randint(0, height)draw.arc((x, y, x + 4, y + 4), 0, 90, fill=rndColor())

除了点状干扰,还生成40个直径为4像素的弧形(近似小圆圈),位置和颜色均为随机。

3.3.3 干扰线
for i in range(5):x1 = random.randint(0, width)y1 = random.randint(0, height)x2 = random.randint(0, width)y2 = random.randint(0, height)draw.line((x1, y1, x2, y2), fill=rndColor())

最后,绘制5条随机起点、终点和颜色的直线作为干扰线。

3.4 应用图像滤镜

img = img.filter(ImageFilter.EDGE_ENHANCE_MORE)

为了进一步提升验证码的抗噪声能力,对生成的图像应用ImageFilter.EDGE_ENHANCE_MORE滤镜,增强图像边缘对比度。

3.5 返回结果

return img, ''.join(code)

函数返回生成的验证码图片以及对应的字符序列。

总结

通过上述步骤,我们成功创建了一个Python随机验证码生成器。只需调用check_code()函数,即可得到一张包含随机字符、多种干扰元素及边缘增强效果的验证码图片,同时返回对应的验证码字符串。这样的验证码设计有助于防止自动化脚本的破解,提升系统的安全性。您可以根据实际需求调整函数参数,定制符合项目要求的验证码样式。现在,您可以将此代码集成到您的应用程序中,为用户登录、注册或其他敏感操作提供可靠的验证码保护机制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/824861.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内网代理技术总结

代理技术就是解决外网和内网的通信问题,例如,我的一个外网主机想要找到另外一个网段下的一个内网主机,理论上是无法找到的。如果我们想要进行通信的话就要使用代理技术。我们可以找到一个与目标内网主机在容易网段下可以通信的外网主机&#…

FMECA对于装备通用质量特性的作用分析——SunFMEA软件

FMECA是一种在产品设计、生产和维护过程中广泛应用的质量分析工具。它通过对产品可能出现的故障模式、故障影响和故障严重度进行分析,为设计者提供改进设计、提高产品质量和可靠性的重要依据。在装备通用质量特性方面,FMECA同样发挥着重要的作用。今天Su…

万兆以太网MAC设计(4)CRC_process模块

文章目录 前言一、模块功能二、实现过程三、仿真总结 前言 上文介绍的MAC_RX模块当中增加了CRC校验和比对的功能,本文将根据CRC校验的结果,来决定将数据输出到上层用户还是丢弃。 一、模块功能 接收MAC_RX模块输出的AXIS数据,存入本地环形…

rust学习(BorrowMut异常)

现象: 编译没有问题,运行时出现: 代码: pub fn do_test() {let v Arc::new(RefCell::new(100));let v1 v.try_borrow_mut().unwrap();let v2 v.try_borrow_mut().unwrap(); } 原因: 一个cell貌似不能同时被借用…

香港裸机云多IP服务器都有哪些配置?

香港裸机云多IP服务器是一种高效、灵活的云计算服务,为用户提供了多IP地址的配置选项,以满足各种复杂的网络需求。这种服务器在配置上具有丰富的多样性和高度的可定制性,下面我们就来科普一下香港裸机云多IP服务器的主要配置。 首先&#xff…

开源模型应用落地-chatglm3-6b-模型输出违禁词检测(九)

一、前言 受限于模型本身的一些缺陷,任何模型均可能会生成一些不正确的输出。如何通过技术的手段去规避模型潜在的风险,提升推理质量是需要持续探究的过程。 如何利用第三方内容安全审核服务去检测模型输出内容的合规性,请查看:开…

【资源分享】Stata 17免费下载安装

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验,帮助大家尽早适应研究生生活,尽快了解科研的本质。祝一切顺利!—…

LabVIEW仪器信息管理系统

LabVIEW仪器信息管理系统 在计量检测实验室的日常工作中,仪器检定校准是一项基础而重要的任务。随着科技的进步和实验室工作量的增加,传统的人工管理方式已经难以满足现代实验室对效率和准确性的要求。开发一套基于LabVIEW的仪器信息管理系统显得尤为必…

魔方网表ERP mailupdate.jsp 任意文件上传漏洞复现

0x01 产品简介 魔方网表ERP是一款高效、灵活的企业资源规划解决方案,旨在帮助企业实现数智化转型,消除信息孤岛,打造全程一体化的管理体系。魔方网表ERP拥有强大的表单功能和模块化的产品特点,使得企业可以根据自身业务需求,通过简单的拖拽和配置,快速搭建符合自身特点的…

python爬豆瓣top250电影

文章目录 前言分析与实现1.对豆瓣网网站进行Ajax分析2.发送请求3.进一步筛选(提取) 完整代码 前言 通过这个项目,可以让小白对爬虫有一个初步认识,爬取豆瓣top250是一个初学者学爬虫的必经之路,话不多说,我…

每日算法4/17

1552. 两球之间的磁力 题目 在代号为 C-137 的地球上,Rick 发现如果他将两个球放在他新发明的篮子里,它们之间会形成特殊形式的磁力。Rick 有 n 个空的篮子,第 i 个篮子的位置在 position[i] ,Morty 想把 m 个球放到这些篮子里&…

【面试经典 150 | 链表】分隔链表

文章目录 写在前面Tag题目来源解题思路方法一:模拟 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾…

Springboot集成JWT token实现权限验证

紧接着上一次的博客&#xff0c;我们现在来给这个项目添加一个jwt的权限验证功能&#xff0c;上一次的博客如下&#xff1a;springboot结合vue实现登录和注册功能-CSDN博客 1.后端 1.1.导入依赖 <dependency><groupId>com.auth0</groupId><artifactId&g…

2021年全国大学生电子设计竞赛D题——基于互联网的摄像测量系统(一)

01 D题实现效果演示 视频参考微信原文&#xff1a;2021年全国大学生电子设计竞赛D题——基于互联网的摄像测量系统&#xff08;一&#xff09; 02 D题任务要求 &#xff08;D题原文件参见本文附录&#xff09; 设计并制作一个图中所示的基于互联网的摄像测量系统。图中边长…

【Python】异常处理结构

文章目录 1.python异常2.try_except异常处理结构3.try... 多个except异常处理4.try_except_else异常处理结构5.try_except_finally异常处理结构6.常见报错类型 在运行代码时&#xff0c;总是遇到各种异常&#xff0c;且出现异常时&#xff0c;脚本就会自动的的停止运行&#xf…

就业班 第三阶段(nginx) 2401--4.17 day1 nginx1

负载均衡集群 1、集群是什么&#xff1f; 1 集群&#xff08;cluster&#xff09;技术是一种较新的技术&#xff0c;通过集群技术&#xff0c;可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益&#xff0c;其任务调度则是集群系统中的核心技术。 …

FinalShell 远程连接 Linux(Ubuntu)系统

Linux 系列教程&#xff1a; VMware 安装配置 Ubuntu&#xff08;最新版、超详细&#xff09;FinalShell 远程连接 Linux&#xff08;Ubuntu&#xff09;系统Ubuntu 系统安装 VS Code 并配置 C 环境 ➡️➡️➡️提出一个问题&#xff1a;为什么使用 FinalShell 连接&#xff0…

初识ansible服务及ansible主机清单配置

目录 1、什么是自动化批量管理 2、自动化工具ansible架构 3、ansible服务专用术语对照表 4、设置主机清单&#xff08;inventory&#xff09; 4.1实验环境准备 4.2配置主机清单 4.2.1分组基本格式 4.2.2指定用户名&#xff0c;密码。端口 4.2.3子组 4.3查看 4.3.1看…

LeetCode———144—— 二叉树的前序遍历

目录 ​编辑 1.题目 2.解答 1.首先计算二叉树的节点个数&#xff1a; 2.以先序遍历&#xff08;Preorder Traversal&#xff09;的方式遍历一个二叉树&#xff0c;并将遍历到的节点的值存储在一个整数数组中 3.最终代码 1.题目 . - 力扣&#xff08;LeetCode&#xff09; 给…

双碳目标下基于“遥感+”集成技术的碳储量、碳排放、碳循环、温室气体等多领域监测与模拟

以全球变暖为主要特征的气候变化已成为全球性环境问题&#xff0c;对全球可持续发展带来严峻挑战。2015年多国在《巴黎协定》上明确提出缔约方应尽快实现碳达峰和碳中和目标。2019年第49届 IPCC全会明确增加了基于卫星遥感的排放清单校验方法。随着碳中和目标以及全球碳盘点的现…