【Github源码】

《上一篇》 介绍了Xmtool工具库中的Web操作类库,今天我们继续为大家介绍其中的图形验证码类库。

图形验证码是为了抵御恶意攻击出现的一种设计;例如用户登录、修改密码等场景。在本类库中,将图形验证码的逻辑进行了抽象封装,能够通过同一套方法使用不同类型的图形验证码;让增加图形验证码逻辑变得更方便友好,且切换不同类型的图形验证码更简易。

使用时,需要先获取图形验证码类库对象:

ICaptcha captcha = Xmtool.Captcha(CaptchaKind.Character);	// 字符验证码
// 或者
ICaptcha captcha = Xmtool.Captcha(CaptchaKind.Sliding); // 滑块验证码

ICaptcha接口提供了配置、生成和校验 3 个方法,通过这 3 个方法可以很方便的将图形验证码能力嵌入到自己的软件功能中。

Config方法

Generate方法

Validate方法

Type属性

1. Config方法

public ICaptcha Config(CaptchaOption option);
说明:配置图形验证码生成规则,根据图形验证码不同的类型,需传入不同的参数配置类。
参数:

option:生成参数配置;字符验证码使用CharacterCaptchaOption配置类,滑块验证码使用SlidingCaptchaOption配置类。

ICaptcha captcha = Xmtool.Captcha(CaptchaKind.Character);

CharacterCaptchaOption option = new CharacterCaptchaOption();
option.BackColor = Color.Blue;
option.BorderColor = Color.DarkBlue;
captcha.Config(option); // TODO

2. Generate方法

public CaptchaResult Generate(CaptchaData data = null);
说明:根据参数配置生成图形验证码图片及相关数据。
参数:

data:生成数据设定,默认不设置将随机生成;字符验证码使用CharacterCaptchaData类,滑块验证码使用SlidingCaptchaData类。

返回:

将返回生成的图片数据(Base64格式)和相关校验性数据。

ICaptcha captcha = Xmtool.Captcha(CaptchaKind.Character);
CharacterCaptchaData data = new CharacterCaptchaData();
data.Code = "1234";
CaptchaResult result = captcha.Generate(data);
// TODO

3. Validate方法

public bool Validate(object source, object input);
说明:将用户输入信息和生成数据进行对比,判断图形验证码输入或操作是否正确。
ICaptcha captcha = Xmtool.Captcha(CaptchaKind.Character);
CaptchaResult result = captcha.Generate();
bool ok = captcha.Validate(result.ValidationData, "用户输入数据");
if (ok)
{
// TODO
}

4. Type属性

说明:返回当前实例的验证码类型,CaptchaKind.Character(字符验证码)或CaptchaKind.Sliding(滑块验证码)。

附加说明

一、CharacterCaptchaOption类

该类用于为字符图形验证码设置生成过程的一些配置信息。

1. Length属性

说明:设置字符验证码的个数,默认6个字符。

2. OnlyNumber属性

说明:生成的字符验证码是否只包含数字,默认为true;否则包含数字和英文字母。

3. Width属性

说明:设置字符验证码整体图片的宽度,默认300。

4. Height属性

说明:设置字符验证码整体图片的高度,默认120。

5. BackColor属性

说明:设置字符验证码整体图片的背景颜色,默认白色。

6. Bordercolor属性

说明:设置字符验证码整体图片的边框颜色,默认浅灰。

二、SlidingCaptchaOption类

该类用于为滑块验证码设置生成过程的一些配置信息。

1. BackgroundDir属性

说明:设置滑块验证码背景图片的存放目录。

2. ResultError属性

说明:设置滑块验证码校验时允许的位置偏差百分比,默认0.02。

三、CharacterCaptchaData类

该类用于设置生成字符验证码内容的指定。

1. Code属性

说明:字符验证码默认随机生成字符内容,通过该属性可以指定生成内容。

四、SlidingCaptchaData类

该类用于设置生成滑块验证码的规格信息。

1. GapX属性

说明:滑块凹槽生成的横向坐标位置,默认随机生成。

2. GapY属性

说明:滑块凹槽生成的纵向坐标位置,默认随机生成。

3. GapTemplate属性

说明:滑块凹槽的形状,支持0-4五种形状,默认随机选择。

五、CaptchaResult类

该类用于返回图形验证码生成的具体内容。

1. ValidationData属性

说明:用于图形验证码进行校验的数据。字符验证码是字符验证码生成的字符内容;滑块验证码是凹槽横向坐标和图片整体宽度的百分数。该数据即是使用Validate方法时的souce参数。

2. DisplayData属性

说明:图形验证码生成图片数据,以Base64图片格式返回,可以直接复制到浏览器地址栏查看。字符验证码直接返回图片数据内容;滑块验证码返回包括图片的宽度、高度、背景图片数据内容、滑块图片的宽度、高度、滑块图片的数据内容,中间使用“|”分隔。

【Github源码】

开源.NetCore通用工具库Xmtool使用连载 - 图形验证码篇的更多相关文章

  1. 开源.NetCore通用工具库Xmtool使用连载 - 加密解密篇

    [Github源码] <上一篇>详细介绍了Xmtool工具库中的正则表达式类库,今天我们继续为大家介绍其中的加密解密类库. 在开发过程中我们经常会遇到需要对数据进行加密和解密的需求,例如密 ...

  2. Net Core 生成图形验证码

    1. NetCore ZKweb       在我第一次绘制图形验证码时是采用的ZKweb的绘制库,奉上代码参考      public byte[] GetVerifyCode(out string ...

  3. 一百一十四:CMS系统之图形验证码生成

    安装Pillow库,用于生成图形验证码:pip install Pillow 字体文件来源 生成一个验证码图片 import randomimport stringfrom PIL import Im ...

  4. Django中图形验证码(django-simple-captcha)

    django-simple-captcha 在网站开发的登录页面中,经常会需要使用到图形验证码来验证.在Django中,django-simple-captcha库包提供了图形验证码的使用. 下面我们 ...

  5. Android开源项目及库搜集

    TimLiu-Android 自己总结的Android开源项目及库. github排名 https://github.com/trending,github搜索:https://github.com/ ...

  6. 开源.NET界面库

    一.十大开源的.NET用户界面框架 选择一款合适的GUI框架是.NET开发中比较重要但又很棘手的问题,因为用户界面相当于一款应用的"门面",直接面向用户.好的UI更能吸引用户,有时 ...

  7. 值得推荐的C/C++开源框架和库

    值得推荐的C/C++开源框架和库  转自:http://www.cnblogs.com/lidabo/p/5514155.html   - 1. Webbench Webbench是一个在Linux下 ...

  8. 值得学习的C语言开源项目和库

    收集一些C/C++相关的源码,如有更高效的库,请提醒我 补充上去 C/C++相关交流Q群 1414577 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具. ...

  9. 转载一篇c++开源框架和库

    值得学习的C语言开源项目 -1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性 ...

  10. Android 开源项目及库汇总(2)

    Android 开源项目及库汇总(2) ListenToCode 2.7 2018.10.10 15:43 字数 8527 阅读 1001评论 0喜欢 29 地图 百度地图– Android百度地图 ...

随机推荐

  1. GitHub 私有仓库完全免费且不限制协作人数

    GitHub is now free for teams GitHub CEO Nat Friedman 在 2020.04.14 宣布已面向全体 GitHub 用户和团队提供不限制协作人数的私有仓库 ...

  2. Python爬虫————泉州二手房数据爬取和数据可视化

    1.选题的背景 我本次的主题是泉州二手房房价的调查分析. 首先通过爬虫采集链家网上所有二手房的房源数据,并对采集到的数据进行清洗:然后,对清洗后的数据进行可视化分析,探索隐藏在大量数据背后的规律:将这 ...

  3. 使用默认pypi源出现连接超时

    背景信息 安装 dataworks sdk 时报错,原因是连接默认的 pypi 仓库超时 pip install aliyun-python-sdk-dataworks-public==4.2.1 报 ...

  4. 使用 InstructPix2Pix 对 Stable Diffusion 进行指令微调

    本文主要探讨如何使用指令微调的方法教会 Stable Diffusion 按照指令 PS 图像.这样,我们 Stable Diffusion 就能听得懂人话,并根据要求对输入图像进行相应操作,如: 将 ...

  5. 【python基础】类-继承

    编写类时,并非总是要从空白开始.如果要编写的类时另一个现成类的特殊版本,可使用继承.一个类继承另一个类时,它将自动获得另一个类的所有属性和方法 原有的类称为父类,而新类被称为子类.子类继承了其父类的所 ...

  6. 数仓性能调优:大宽表关联MERGE性能优化

    摘要:本文主要为大家讲解在数仓性能调优过程中,关于大宽表关联MERGE性能优化过程. 本文分享自华为云社区<GaussDB(DWS)性能调优:大宽表关联MERGE性能优化>,作者:譡里个檔 ...

  7. CH32V003使用ADC八通道转换注意事项

    本文以CH32V003_F4P6(20Pin)为模板 1.PA1.PA2为外部晶振输入引脚,同时也是ADC的CH1与CH0,所以需要先在system_ch32v00x.c文件中更改为内部48M的宏即可 ...

  8. Java_Day16_作业

    A:简答题 1.请把我们讲解过的所有类中的方法在API中找到,并使用自己的话进行描述 答案: Map public V put(K key, V value): public void clear() ...

  9. 烧死10亿脑细胞的SQL长啥样?

    1 前言 今天在生产中碰到了一个让我十分费解的 SQL,十分有趣. 2 现象 SQL 很好复现,就是逻辑看起来有点唬人 postgres=# create table test(id1 int,id2 ...

  10. Libvirtd networks -- 为libvirtd 中虚拟机指定ip遇到的问题

    backgroup 为libvirtd 中虚拟机指定ip,操作如下: virsh --connect qemu:///system dumpxml vm01 | grep "mac addr ...