开源博客项目Blog .NET Core源码学习(4:生成验证码)

  开源博客项目Blog中的后台管理登录界面中支持输入验证码(如下图所示),本文学习并记录项目中验证码的生成及调用方式。
在这里插入图片描述
  博客项目中调用VerifyCode类生成验证码,该类位于App.Framwork项目中,命名空间为App.Framwork.Generate。VerifyCode类主要包括十几种参数设置,两种验证码生成方式(随机字符串,问题型)。主要参数设置如下所示:

序号名称类型说明
1SetLengthint主要用于随机字符串型的验证码,设置随机字符串的长度,默认值为4
2SetVerifyCodeTextstring保存生成的验证码
3SetAddLowerLetterbool设置验证码中是否包含小写字母,默认值为true
4SetAddUpperLetterbool设置验证码中是否包含大写字母,默认值为true
5SetFontSizeint设置验证码的字体大小,用于生成验证码图片,默认值为18
6SetFontColorColor设置验证码的字体颜色,用于生成验证码图片,默认值为蓝色
7SetFontFamilystring设置验证码的字体名称,用于生成验证码图片,默认值为Verdana
8SetBackgroundColorColor设置验证码图片的背景色,用于生成验证码图片,默认值为AliceBlue
9SetIsBackgroundLinebool设置验证码图片中是否包含线条,以便提升识别难度
10SetForeNoisePointCountint设置验证码图片中的前景噪点数量,以便提升识别难度,默认值为2,但实际从代码来看增加的比设置的多
11SetRandomAngleint设置验证码图片中单个字符的最大旋转角度,主要用于随机字符串型的验证码,默认值为40
12SetIsRandomColorbool设置是否随机生成验证码的字体颜色,默认值为true,效果是每次生成的验证码图片中的字体颜色都是随机生成
13SetWithint设置验证码图片的宽度
14SetHeightint设置验证码图片的高度
15VerifyCodeResultstring保存问题型验证码的答案

  随机字符串型验证码的生成函数为GetVerifyCodeText,其生成步骤如下:
  1)创建字符池,首先加入1-9的数字,再根据设置分别加入大写字母和小写字母,这里特地将O和o去掉了,避免难以识别;
  2)根据验证码长度,逐一从字符池中随机取字符,用后即弃(使用StringBuilder实现,用后直接移除指定位置的内容即可),最后返回完整的验证码字符串。

  问题型验证码的生成函数为GetQuestion,其生成步骤如下:
  1)如果提供有问答对集合(即函数输入参数questionList,默认为null),则从集合中随机抽取一组问答对并返回;
  2)如果没有提供问答对集合,则随机生成100以内的加减乘除算式,并保存计算结果,然后返回算式和结果的问答对。

  验证码图片的生成函数为GetVerifyCodeImage,其生成步骤如下:
  1)创建空图片,图片高度大致为1.6倍字体大小,宽度为验证码长度倍字体大小,填充背景色;
  2)增加前景噪点,噪点数量为图片宽度乘以SetForeNoisePointCount,绘制方式为将图片随机像素点位置的颜色换为字体颜色;
  3)增加背景噪点,分为两部分,首先是噪点,数量为2倍图片宽度,绘制方式为在图片随机位置绘制宽和高均为1的矩形。接着按设置增加干扰线条,绘制方式是根据随机生成两侧坐标绘制线条;
  4)从左向右逐个绘制验证码的字符,如果需要旋转字符,则随机生成旋转角度,旋转坐标后再绘制字符,最后返回图片内容

  博客项目中LoginController类调用验证码生成类,该类位于App.Hosting项目中,命名空间为App.Hosting.Areas.Main.Controllers,具体调用函数为ValidateCode,函数返回验证码图片,并将验证码内容放在HttpContext.Session中返回,前端调用页码则是Index.cshtml。

  从上面的分析可以看出,开源博客项目Blog中提供的验证码生成类相对独立,实现逻辑清晰易懂,扩展起来也比较方便,能够按需放在其它项目或程序中。

参考文献:
[1]https://gitee.com/miss_you/Blog
[2]https://www.donet5.com/Home/Doc

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

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

相关文章

基于Java的线上花店管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

Redis数据类型

Redis数据类型 文章目录 Redis数据类型0.基本命令(1)key操作命令(2)注意 1.字符串(String)(1)set key value(2)mset /mget(3)getrange/setrange(4…

I/O模型之非阻塞IO

简介 五种IO模型   阻塞IO   非阻塞IO   信号驱动IO   IO多路转接    异步IO 代码书写 非阻塞IO 再次理解IO 什么是IO?什么是高效的IO? 为了理解后面的一个问题,我们首先要再重新理解一下什么是IO 在之前的网络介绍中&#xff…

C算法:输入一个数n,输出1到n之间所有的质数

需求: 写一个函数,输入一个数n,输出1到n之间所有的质数。(注:质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数。) 输入样例: 10 …

又是一年1024程序员日

程序员节是每年的10月24日,这是一个特殊的节日,旨在庆祝和表彰程序员们对科技和社会的贡献。作为技术领域的从业者,程序员们在现代社会中扮演着重要的角色,他们致力于编写、测试和维护软件代码,为我们的生活带来了无数…

【原创】解决Kotlin无法使用@Slf4j注解的问题

前言 主要还是辟谣之前的网上的用法,当然也会给出最终的使用方法。这可是Kotlin,关Slf4j何事!? 辟谣内容:创建注解来解决这个问题 例如: Target(AnnotationTarget.CLASS) Retention(AnnotationRetentio…

【Excel】WPS单元格快速转换表格字母大小写

使用WPS Office打开表格,选择需要处理的单元格或单元格区域。 依次点击「会员专享」选项卡 —>「智能工具箱」。 再点击「格式」—>「大小写」,选择一种大小写转换方式即可。

Hadoop3教程(三十):(生产调优篇)纠删码

文章目录 (155)纠删码原理纠删码原理纠删码相关命令纠删码策略解释 (156)纠删码案例实操参考文献 (155)纠删码原理 纠删码原理 默认情况下,一个文件在HDFS里会保留3个副本,以此提高…

uniapp map polygons 区域填充色(fillColor)在ios显示正常,但在安卓手机显示是黑色的,怎么解决?

uniapp map polygons 区域填充色&#xff08;fillColor&#xff09;在ios显示正常&#xff0c;但在安卓手机显示是黑色的,怎么解决&#xff1f; <MapPage :longitude"item.centerCoord[0]" :latitude"item.centerCoord[1]":polygons"[{ points: it…

Qt作业九

1、思维导图 2、作业 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimer> #include <QTime> #include <QTimerEvent> #include <QTextToSpeech>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAME…

JAVA入门总结回顾

1.常用的DOS命令&#xff1a;DOS窗口常用命令-CSDN博客 2.检查jdk是否安装成功&#xff1a;在cmd中输入java -version或者java或者javac。出现相应的对应显示内容。 3.JDK&#xff0c;JRE之间的关系&#xff1a;JDK是JAVA的开发工具包&#xff0c;JRE是JAVA的的运行环境。JRE…

09 创建型模式-建造者模式

1.建造者模式介绍&#xff1a; 建造者模式 (builder pattern), 也被称为生成器模式 , 是一种创建型设计模式 定义: 将一个复杂对象的构建与表示分离&#xff0c;使得同样的构建过程可以创建不 同的表示。 2.建造者模式要解决的问题 建造者模式可以将部件和其组装过程分开&am…

【广州华锐互动】VR营销心理学情景模拟培训系统介绍

在高度竞争的汽车市场中&#xff0c;销售人员需要具备强大的专业知识、引人入胜的销售技巧&#xff0c;以及敏锐的市场洞察力。然而&#xff0c;传统的培训方式往往无法满足这些需求&#xff0c;因为它们往往忽略了实践的重要性。 为了解决这个问题&#xff0c;许多公司开始采用…

vsCode 格式化配置

学习目标&#xff1a; 基于 vsCode 配置格式化工具&#xff0c;提高&#xff08;React、Vue &#xff09;开发效率  1. vsCode 安装 prettier 插件并启用  2. 修改配置文件 setting.json setting.json 位置&#xff1a; 依次点击 替换内容&#xff1a;↓ {"git.enab…

Fwupd 1.9.6 Linux 固件升级工具已于近日发布

导读Fwupd 1.9.6 Linux 固件升级工具已于近日发布&#xff0c;支持更多硬件设备、新功能和十几处错误修复。 Fwupd 1.9.6 是在 fwupd 1.9.5 发布一个月后推出的&#xff0c;它引入了对更多硬件设备的支持&#xff0c;包括 AMD dGPUs Navi3x 及更高版本、Star Labs StarBook Mk …

nrf52832 PWM配置

PWM使用时sdk_config.h文件中配置如下:#define PWM_ENABLED 1 #define PWM0_ENABLED 1 #define NRFX_PWM_ENABLED 1 #define NRFX_PWM0_ENABLED 0sdk_config.h 文件中添加下列配置 // <e> NRFX_PWM_ENABLED - nrfx_pwm - PWM peripheral driver // #ifndef NRFX_PWM_ENA…

深度学习_4_实战_直线最优解

梯度 实战 代码&#xff1a; # %matplotlib inline import random import torch import matplotlib.pyplot as plt # from d21 import torch as d21def synthetic_data(w, b, num_examples):"""生成 Y XW b 噪声。"""X torch.normal(0,…

【LeetCode刷题-数组】--27.移除元素

27.移除元素 class Solution {public int removeElement(int[] nums, int val) {int slow 0,fast 0,n nums.length;while(fast < n){if(nums[fast] ! val){nums[slow] nums[fast];slow;}fast;}return slow;} }

又是一年1024,你还在做程序猿嘛

每年的10月24日&#xff0c;对于广大程序员来说&#xff0c;都有着特殊的意义。这一天是程序员节&#xff0c;一个属于这个独特群体的庆祝活动。在这个特别的日子里&#xff0c;我们不禁要问&#xff1a;又是一年1024&#xff0c;你还在做程序猿嘛&#xff1f; 程序员&#xff…

【大数据】Kafka 实战教程(二)

Kafka 实战教程&#xff08;二&#xff09; 1.下载2.安装3.配置4.运行4.1 启动 Zookeeper4.2 启动 Kafka 5.第一个消息5.1 创建一个 Topic5.2 创建一个消息消费者5.3 创建一个消息生产者 1.下载 你可以在 Kafka 官网&#xff1a;http://kafka.apache.org/downloads&#xff0c…