文章目录
- 1. 登录注册功能验证码实现
- 2. 验证码生成的流程
- 3. 细节部分
1. 登录注册功能验证码实现
- 🐧①目的:引入验证码,目的是用来避免程序被其它程序暴力破解的方式找到密码。
2. 验证码生成的流程
-
①🍎首先通过
Qt
的QRandomGenerator
的generate
方法生成一个四个字符的随机字符串。
-
②🍎 把这个字符串,通过画图
API (QPainter)
绘制到界面的某个控件,通过随机数的方式,随机画这个字符的位置;
paintEvent
函数是 Qt
绘图系统的核心部分,负责在部件的显示区域绘制内容。它会在多种情况下被触发,包括部件首次显示、大小变化、用户交互等。
void VerifyCodeWidget::paintEvent(QPaintEvent *event)
{
(void) event;
const int width = 180;
const int height = 80;
QPainter painter(this);
QPen pen;
QFont font("楷体",25,QFont::Bold,true);
painter.setFont(font);
// 画点: 添加随机噪点
for(int i = 0; i < 100; i++)
{
pen = QPen(QColor(randomGenerator.generate() % 256, randomGenerator.generate() % 256, randomGenerator.generate() % 256));
painter.setPen(pen);
painter.drawPoint(randomGenerator.generate() % width, randomGenerator.generate() % height);
}
// 画线: 添加随机干扰线
for(int i = 0; i < 5; i++)
{
pen = QPen(QColor(randomGenerator.generate() % 256, randomGenerator.generate() % 256, randomGenerator.generate() % 256));
painter.setPen(pen);
painter.drawLine(randomGenerator.generate() % width, randomGenerator.generate() % height,
randomGenerator.generate() % width, randomGenerator.generate() % height);
}
// 绘制验证码
for(int i = 0; i < verifyCode.size(); i++)
{
pen = QPen(QColor(randomGenerator.generate() % 255, randomGenerator.generate() % 255, randomGenerator.generate() % 255));
painter.setPen(pen);
painter.drawText(5+20*i, randomGenerator.generate() % 10, 30, 30, Qt::AlignCenter, QString(verifyCode[i]));
}
}
- ③最后再这个控件上,随机的绘制一些点和线(噪点/噪线),避免其他的自动识别程序能轻易的分析出验证码;
3. 细节部分
Qt
里面有一个随机生成字符的类,有些字母很相近,所以我们暂时只生成大写字母,以便于区分;
①画点:添加随机噪点(随机颜色、随机位置)
②画线:添加随机干扰线;
drawLine
,随机颜色、随机起点和终点;
③绘制验证码: 随机颜色、随机位置(水平位置不是随机的,水平向右移动,垂直方向是随机的);
④验证码的比较— 要忽略大小写