# Captcha **Repository Path**: justdoit-mqr/Captcha ## Basic Information - **Project Name**: Captcha - **Description**: 这是一个使用Qt开发的验证码工具组件 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2022-03-02 - **Last Updated**: 2024-09-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Captcha 这是一个Qt小项目,旨在完成一个验证码工具类的编写与封装。 ## 前言 验证码比较常见,通常在网站注册用户或者论坛发表言论时用到,作用是为了防止使用机器软件批量注册或者恶意灌水。通过验证码设置一个门槛,需要人眼识别输入正确的验证码才可进行下一步。但目前已经有很多机器读取验证码的软件,而且识别率还很高,这也说明了以往的验证码技术需要进步了,比如12306现在的验证码,为了防止机器抢票,验证码换了一代又一代,机器很难分辨,人眼也不容易。 ## 功能概述 该项目中主要是用工具类CaptchaBox用来绘制随机验证码,使用Qpainter的方法drawText()来绘制文本。该类继承自QWidget,它的大小是根据设置的字体确定的,字体类型和字体大小都通过宏定义来设置,默认产生的验证码个数是4个字符,中文则相应减半,字符也是初始化时赋值的列表,包含英文大小写和数字,已经指定的一些汉字,随机产生验证码时,汉字和字符不会同时出现。当然验证码最大的特点就是随机性,代码中用了很多qrand()方法,另外仅仅绘制单纯的文本还不行,需要对文本进行变形以及添加干扰处理。 ``` //形态变换 void rotateAngle(QPainter &painter);//旋转角度 void scaleSize(QPainter &painter);//放缩大小 void shearForm(QPainter &painter);//扭曲形态 //背景干扰,防止机器软件轻易识别 void drawDisturb(QPainter &painter);//此方法中的干扰元素目前是散点和随机线,以后可以再添加 //对外接口 bool checkCaptcha(QString text);//检验输入的验证码是否正确 ``` 注:该程序在设计时是以字体为标准进而自动确定部件的大小以及字符之间的间距,不同的平台,不同的字体类型显示的效果都不同,使用时可以针对性的对某一个平台的某种字体进行调试,改进算法以获得最优的显示效果,运行截图的效果出自于windows平台下的宋体显示。具体使用请看代码注释。。。 ## 运行截图: ![image_1.png](./screenshot/image_1.png "image_1.png") ![image_2.png](./screenshot/image_2.png "image_2.png") ![image_3.png](./screenshot/image_3.png "image_3.png") ## 作者联系方式 **邮箱:justdoit_mqr@163.com** **新浪微博:@为-何-而来**