写在前面

断断续续,今天算是把验证码的东东弄出来了。

系列文章

[EF]vs15+ef6+mysql code first方式

[实战]MVC5+EF6+MySql企业网盘实战(1)

[实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册

[实战]MVC5+EF6+MySql企业网盘实战(2)——验证码

验证码类

using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Wolfy.NetDisk.Utilities
{
/// <summary>
/// 验证码类
/// </summary>
public static class VerifyCode
{
/// <summary>
/// 生成验证码
/// </summary>
/// <param name="len">验证码长度</param>
/// <param name="strCode">验证码</param>
/// <returns>验证码图片</returns>
public static byte[] Create(int len, out string strCode)
{
MemoryStream stream = new MemoryStream();
byte[] buffer = null;
//噪线 噪点
Color[] colors = { Color.Black, Color.Red, Color.Blue, Color.Green, Color.Orange, Color.Brown, Color.DarkBlue };
//验证码字体
string[] fonts = { "Times New Roman", "MS Mincho", "Book Antiqua", "Gungsuh", "PMingLiU", "Impact" };
//验证码内容
char[] charactars = { '', '', '', '', '', '', '', '', '', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'S', 'Y', 'Z' };
//生成验证码字符串
StringBuilder sb = new StringBuilder();
Random r = new Random();
for (int i = ; i < len; i++)
{
char codeChar = charactars[r.Next(, charactars.Length)];
sb.Append(codeChar);
}
strCode = sb.ToString();
using (Bitmap bitmap = new Bitmap(len * , ))
{
using (Graphics g = Graphics.FromImage(bitmap))
{
g.Clear(Color.White);
for (int i = ; i < ; i++)
{
int x1 = r.Next();
int y1 = r.Next();
int x2 = r.Next();
int y2 = r.Next();
Color color = colors[r.Next(colors.Length)];
g.DrawLine(new Pen(color), x1, y1, x2, y2);
}
//将字符串画入图片
for (int i = ; i < strCode.Length; i++)
{
string font = fonts[r.Next(fonts.Length)];
Font fnt = new Font(font, );
Color color = colors[r.Next(colors.Length)];
g.DrawString(strCode[i].ToString(), fnt, new SolidBrush(color), (float)i * + , (float));
}
//画噪点
for (int i = ; i < ; i++)
{
int x = r.Next(bitmap.Width);
int y = r.Next(bitmap.Height);
Color color = colors[r.Next(colors.Length)];
bitmap.SetPixel(x, y, color);
}
}
bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
buffer = stream.ToArray();
} return buffer; }
}
}

在UserInfoController中添加Action

  [HttpGet]
public ActionResult VerifyCodeImage()
{
string strCode = string.Empty;
byte[] buffer = VerifyCode.Create(, out strCode);
Session["code"] = strCode;
return File(buffer, @"image/jpeg");
}

注册页面上添加验证码的表单输入框

    <div class="form-group">
<label class="control-label col-md-2">验证码</label>
<div class="col-md-10">
<input type="text" name="name" value=" " /> <img id="imgCode" style="cursor:pointer;" title="切换下一张" src="/UserInfo/VerifyCodeImage" alt="验证码" />
</div>
</div>

为验证码图片添加单击事件,切换下一张,为了避免缓存,添加随机数参数,保证每次请求是一次新的请求。

<script>
$(function () {
$("#imgCode").click(function () {
var ran = Math.random();
//加上随机数ran,避免验证码缓存。
this.src = "/UserInfo/VerifyCodeImage?_r=" + ran;
});
}); </script>

页面测试

总结

今天比平时早回来会儿,就趁着做了一个功能,进度有点慢啊。

[实战]MVC5+EF6+MySql企业网盘实战(2)——验证码的更多相关文章

  1. [实战]MVC5+EF6+MySql企业网盘实战(28)——其他列表

    写在前面 本篇文章将实现,其他文件类型的列表. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战]MVC5+EF ...

  2. [实战]MVC5+EF6+MySql企业网盘实战(27)——应用列表

    写在前面 本篇文章将实现应用列表,同样和其他列表的不同之处,在于查询条件的不同. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘 ...

  3. [实战]MVC5+EF6+MySql企业网盘实战(4)——上传头像

    写在前面 最近又开始忙了,工期紧比较赶,另外明天又要去驾校,只能一个功能一个功能的添加了,也许每次完成的功能确实不算什么,等将功能都实现了,然后在找一个好点的ui对前端重构一下. 系列文章 [EF]v ...

  4. [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册

    写在前面 上篇文章简单介绍了项目的结构,这篇文章将实现用户的注册.当然关于漂亮的ui,这在追后再去添加了,先将功能实现.也许代码中有不合适的地方,也只有在之后慢慢去优化了. 系列文章 [EF]vs15 ...

  5. [实战]MVC5+EF6+MySql企业网盘实战(1)

    写在前面 不久前,一个朋友让帮他弄一个单位的企业网盘的管理站点,一直忙,最近抽出了点时间,也想琢磨琢磨mvc,ef,mysql,这算是边琢磨,边实践吧. 系列文章 [实战]MVC5+EF6+MySql ...

  6. [实战]MVC5+EF6+MySql企业网盘实战(26)——音乐列表

    写在前面 本篇文章将实现,音乐列表,同样和其他列表的不同之处,在于查询条件的不同. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网 ...

  7. [实战]MVC5+EF6+MySql企业网盘实战(25)——种子列表

    写在前面 上篇文章实现了视频列表,本篇文章继续实现其他的文件列表.功能相似.这里就不再赘述. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MyS ...

  8. [实战]MVC5+EF6+MySql企业网盘实战(24)——视频列表

    写在前面 上篇文章实现了文档列表,所以实现视频列表就依葫芦画瓢就行了. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) ...

  9. [实战]MVC5+EF6+MySql企业网盘实战(23)——文档列表

    写在前面 上篇文章实现了图片列表,这篇文章实现文档列表将轻车熟路,因为逻辑基本相似,只是查询条件的不同.这里将txt,doc,docx,ppt,pptx,xls,xlsx的文件都归为文档列表中. 系列 ...

随机推荐

  1. 动态背景插件Backstretch

    Backstretch是一款简单的jQuery插件,可以帮助你给网页添加一个动态的背景图片,可以自动调整大小适应屏幕的尺寸,当然这样做的缺点是当图片尺寸比屏幕小的时候,图片会因为自动延伸而变形,所以我 ...

  2. vuejs使用FormData对象,ajax上传图片文件

    我相信很多使用vuejs的朋友,都有采用ajax上传图片的需求,因为前后端分离后,我们希望都能用ajax来解决数据问题,传统的表单提交会导致提交成功后页面跳转,而使用ajax能够无刷新上传图片等文件. ...

  3. polarssl rsa & aes 加密与解密

    上周折腾加密与解密,用了openssl, crypto++, polarssl, cyassl, 说起真的让人很沮丧,只有openssl & polarssl两个库的RSA & AES ...

  4. python3.5 中Django框架连接mysql

    ps:mysqldb目前还不支持3.0python唉,最近赶了个新潮,用起了Python3.4跟Django1.6,数据库依然是互联网企业常见的MySql.悲催的是在Python2.7时代连接MySq ...

  5. SQL筛选出同一学科的时间最新的记录

    1.建表语句 CREATE TABLE `score` ( `id` ) NOT NULL AUTO_INCREMENT, `student_id` ) ' COMMENT '学生表ID', `nam ...

  6. Nginx(五)-- 配置文件之Rewrite

    Rewrite支持URL重写 1.常用指令以及语法 1) if指令    if语法: if 空格 (condition) {}     条件:     1. “=” 来判断相等,用于字符的比较     ...

  7. Ansible Playbook 使用条件判断语句

    先介绍一下 gather_facts 参数,该参数用于指定在执行任务前,是否先执行 setup 模块获取主机相关信息,以便给后面的任务使用 [root@localhost ~]# ansible 19 ...

  8. Unity透明Shader

    Shader "Custom/Blocks" { Properties { _Color (,,,) _MainTex ("Albedo (RGB)", 2D) ...

  9. 安装.NET Framework 3.5

    https://www.microsoft.com/zh-CN/download/details.aspx?id=22 https://docs.microsoft.com/zh-cn/dotnet/ ...

  10. 【Linux】将终端的命令输出保存为txt文本文件

    Linux中的终端很方便,可以直接复制粘贴的. 之后开一个gedit文本编辑器,把复制到的内容粘贴就可以的. 不像windows的cmd控制台,需要先右键标题栏,选择编辑->全选/标记,在右键标 ...