Git Product home page Git Product logo

captcha's Introduction

Captcha项目旨在完成一个验证码工具类的编写与封装。
验证码比较常见,通常在网站注册用户或者论坛发表言论时用到,作用是为了防止使用机器软件批量注册或者恶意灌水。通过验证码设置一个门槛,需要人眼识别输入正确的验证码才可进行下一步。但目前已经有很多机器读取验证码的软件,而且识别率还很高,这也说明了以往的验证码技术需要进步了,比如12306现在的验证码,为了防止机器抢票,验证码换了一代又一代,机器很难分辨,人眼也不容易。

Captcha项目中主要是用工具类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平台下的宋体显示。具体使用请看代码注释。。。

作者联系方式:@为-何-而来(新浪微博)

captcha's People

Contributors

justdoit-mqr avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.