写一个含数字,拼音,汉字的验证码生成类(2)

2. 干扰线:通常验证码图片都以一两条干扰线,主要防止某些恶意用户使用图片识别软件进行不正规破解请求,我这里干扰线只设置了横向居中的一天直线代码如: g.DrawLine(new Pen(Color.DarkRed), x1, y1, x2, y2);

3. 字体:一个好看的字体通常也一种用户体验,因此这里根据需要参数传递字体;

4. 验证代码位于图片纵横向居中,这里的关键代码是:

var stringFomart = new StringFormat(); //垂直居中 stringFomart.LineAlignment = StringAlignment.Center; //水平居中 stringFomart.Alignment = StringAlignment.Center;

5.   g.DrawString(code, font, brush, rf, stringFomart); 主要用来把文字画到图片上,这是最关键的地方

6. 咋们通常都是吧验证码弄成图片流,而不是真的生成一个实体的验证码图片保存到服务器上,不然这样服务器很快就会磁盘不足,所以

//保存图片流 var stream = new MemoryStream(); image.Save(stream, ImageFormat.Jpeg); //输出图片流 bb = stream.ToArray();

这句的重要性也不可忽视,主要就把画的内容保存到流中方便使用

7. 最后千万不用忘了使用Dispose释放画布

» mvc登录操作测试验证码正确性

有了上面验证码生成类生成好的验证码图片,那么我们还需要测试验证下正确性和效果;下面我们使用mvc架构来做测试,先创建一个验证码测试Action并生成对应试图ValidCode.cshtml文件,然后自定义几个不同格式的验证码获取Action,代码如下:

public FileResult GetValidateCode() { //返回的验证码文字 var code = string.Empty; var bb_code = ValidateCode.GetValidateCodeStream(ref code); return File(bb_code, "image/jpeg"); } public FileResult GetValidateCode01() { var code = string.Empty; var bb_code = ValidateCode.GetValidateCodeStream(ref code, "1|2|3|4"); return File(bb_code, "image/jpeg"); } public FileResult GetValidateCode02() { var code = string.Empty; var bb_code = ValidateCode.GetValidateCodeStream(ref code, "4|3|2|1"); return File(bb_code, "image/jpeg"); } public FileResult GetValidateCode03() { var code = string.Empty; var bb_code = ValidateCode.GetValidateCodeStream(ref code, "2|2|2|2"); return File(bb_code, "image/jpeg"); } public FileResult GetValidateCode04() { var code = string.Empty; var bb_code = ValidateCode.GetValidateCodeStream(ref code, "4|4|4|4"); return File(bb_code, "image/jpeg"); } public FileResult GetValidateCode05() { var code = string.Empty; var bb_code = ValidateCode.GetValidateCodeStream(ref code, "1|1|1|1"); return File(bb_code, "image/jpeg"); }

感觉上几乎一模一样,只是对应的参数不一样,这里遵循的方法GetValidateCodeStream参数codeType格式是:为空表示自由组合  1:小写拼音 2:大写拼音 3:数字 4:汉字;然后我们往试图中填写如下代码:

<h2>神牛 - 验证码实例</h2> <div> <table> <tbody> <tr> <td>全部随机</td> <td> <img src="https://www.jb51.net/home/GetValidateCode" data-src="https://www.jb51.net/home/GetValidateCode" /> <input type="text" placeholder="请输入验证码" /> <button>登 录</button> <span></span> </td> </tr> <tr> <td>小写|大写|数字|汉字</td> <td><img src="https://www.jb51.net/home/GetValidateCode01" data-src="https://www.jb51.net/home/GetValidateCode01" /></td> </tr> <tr> <td>汉字|数字|大写|小写</td> <td><img src="https://www.jb51.net/home/GetValidateCode02" data-src="https://www.jb51.net/home/GetValidateCode02" /></td> </tr> <tr> <td>全部大写</td> <td><img src="https://www.jb51.net/home/GetValidateCode03" data-src="https://www.jb51.net/home/GetValidateCode03" /></td> </tr> <tr> <td>全部汉字</td> <td><img src="https://www.jb51.net/home/GetValidateCode04" data-src="https://www.jb51.net/home/GetValidateCode04" /></td> </tr> <tr> <td>全部小写</td> <td><img src="https://www.jb51.net/home/GetValidateCode05" data-src="https://www.jb51.net/home/GetValidateCode05" /></td> </tr> </tbody> </table> </div>

好了咋们生成下项目,看下效果图如下:

写一个含数字,拼音,汉字的验证码生成类

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wdppzx.html