LazyCaptcha是仿EasyCaptcha和SimpleCaptcha的.net开源图形验证码模块,其支持生成验证码及对应的静态图或动态图,还支持在图形中增加气泡、干扰线等噪音以提升图片自动识别难度。LazyCaptcha既能在B/S程序中使用(本文的原由即Admin.NET中使用LazyCaptcha生成验证码及动态图),也可以在C/S程序中调用。本文基于参考文献1-2中附带的Sample.Winfrom项目的源码,学习采用LazyCaptcha模块生成验证码的基本用法。
生成验证码及对应图片主要使用CaptchaService类,在C/S程序中可以通过CaptchaServiceBuilder类创建并配置CaptchaService类对象示例,示例代码及主要配置说明如下所示:
CaptchaServiceBuilder.New().CodeLength(options.CodeLength).CaptchaType((CaptchaType)options.CaptchaType).FontFamily(fontFamily).FontSize(options.ImageOption.FontSize).BubbleCount(options.ImageOption.BubbleCount).BubbleThickness(options.ImageOption.BubbleThickness).BubbleMinRadius(options.ImageOption.BubbleMinRadius).BubbleMaxRadius(options.ImageOption.BubbleMaxRadius).InterferenceLineCount(options.ImageOption.InterferenceLineCount).Animation(options.ImageOption.Animation).FrameDelay(options.ImageOption.FrameDelay).Width(options.ImageOption.Width).Height(options.ImageOption.Height).Quality(options.ImageOption.Quality).TextBold(options.ImageOption.TextBold).Build();
序号 | 参数名称 | 参数说明 |
---|---|---|
1 | CaptchaType | 设置验证码内容类型,枚举值,主要包括中文汉字、数字、中文数字(小写)、中文数字(大写)、字母大小写、字母小写、字母大写、字母数字小写、字母数字大写、阿拉伯数字运算、中文数字运算等类型。 |
2 | CodeLength | 验证码内容长度,如果是数字运算,则为等号左侧的数字个数(测试时偶尔会出现数字个数小于内容长度的情况,暂时不清楚怎么回事) |
3 | ExpirySeconds | 验证码过期秒数,生成的验证码要么存在内存中,要么存在Redis内,超出本属性设置的时间后即失效 |
4 | IgnoreCase | 对比验证码时是否忽略大小写 |
5 | Animation | 是否生成gif动态图,为false生成静态图片 |
6 | FontSize | 验证码内容字体大小 |
7 | FontFamily | 验证码内容字体名称,主要包括Actionj、Kaiti、Fresnel、Prefix、Ransom、Scandal、Epilog、Headache、Lexo、Progbot、Robot |
8 | TextBold | 验证码内容是否加粗 |
9 | Width | 验证码图片宽度 |
10 | Height | 验证码图片高度 |
11 | BubbleCount | 验证码图片中的气泡数量 |
12 | BubbleThickness | 气泡边框厚度 |
13 | BubbleMinRadius | 气泡最小半径 |
14 | BubbleMaxRadius | 气泡最大半径 |
15 | InterferenceLineCount | 验证码图片中的干扰线数量 |
16 | FrameDelay | 生成gif图片时每帧的间隔,单位为毫秒,用此属性也可以计算帧率 |
调用CaptchaService.Generate函数创建、存储、返回验证码及图片,调用函数时同步传入唯一标识作与验证码关联,用于存储验证码及后续调用Validate函数验证验证码。
Generate函数返回CaptchaData类型数据,其中包括验证码唯一标识(传入的标识)、验证码内容(如果是数字运算则返回运算结果)、图片原始内容及Base64编码后的图片内容字符串。
如果嫌麻烦,也可以使用默认设置创建CaptchaService对象实例并生成验证码。总体而言,LazyCaptcha使用简单方便,不论网页程序还是客户端程序都能快速集成使用。
参考文献:
[1]https://github.com/pojianbing/LazyCaptcha
[2]https://gitee.com/pojianbing/lazy-captcha/tree/master