栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > asp

MVC+EasyUI+三层新闻网站建立 验证码生成(三)

asp 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MVC+EasyUI+三层新闻网站建立 验证码生成(三)

我们在项目中的NewWeb.Common类库里面建立一个类用来存放生成验证码的代码。

这里我类的名字叫 ValidateCode

生成验证码(ValidateCode)类的代码:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;

namespace NewWeb.Common
{
  public class ValidateCode
  {
      public ValidateCode()
      {
      }
      /// 
      /// 验证码的最大长度
      /// 
      public int MaxLength
      {
 get { return 10; }
      }
      /// 
      /// 验证码的最小长度
      /// 
      public int MinLength
      {
 get { return 1; }
      }
      /// 
      /// 生成验证码
      /// 
      /// 指定验证码的长度
      /// 
      public string CreatevalidateCode(int length)
      {
 int[] randMembers = new int[length];
 int[] validateNums = new int[length];
 string validateNumberStr = "";
 //生成起始序列值
 int seekSeek = unchecked((int)DateTime.Now.Ticks);
 Random seekRand = new Random(seekSeek);
 int beginSeek = (int)seekRand.Next(0, Int32.MaxValue - length * 10000);
 int[] seeks = new int[length];
 for (int i = 0; i < length; i++)
 {
   beginSeek += 10000;
   seeks[i] = beginSeek;
 }
 //生成随机数字
 for (int i = 0; i < length; i++)
 {
   Random rand = new Random(seeks[i]);
   int pownum = 1 * (int)Math.Pow(10, length);
   randMembers[i] = rand.Next(pownum, Int32.MaxValue);
 }
 //抽取随机数字
 for (int i = 0; i < length; i++)
 {
   string numStr = randMembers[i].ToString();
   int numLength = numStr.Length;
   Random rand = new Random();
   int numPosition = rand.Next(0, numLength - 1);
   validateNums[i] = Int32.Parse(numStr.Substring(numPosition, 1));
 }
 //生成验证码
 for (int i = 0; i < length; i++)
 {
   validateNumberStr += validateNums[i].ToString();
 }
 return validateNumberStr;
      }
      /// 
      /// 创建验证码的图片
      /// 
      /// 要输出到的page对象
      /// 验证码
      public void CreatevalidateGraphic(string validateCode, HttpContext context)
      {
 Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);
 Graphics g = Graphics.FromImage(image);
 try
 {
   //生成随机生成器
   Random random = new Random();
   //清空图片背景色
   g.Clear(Color.White);
   //画图片的干扰线
   for (int i = 0; i < 25; i++)
   {
     int x1 = random.Next(image.Width);
     int x2 = random.Next(image.Width);
     int y1 = random.Next(image.Height);
     int y2 = random.Next(image.Height);
     g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
   }
   Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
   LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
    Color.Blue, Color.DarkRed, 1.2f, true);
   g.DrawString(validateCode, font, brush, 3, 2);
   //画图片的前景干扰点
   for (int i = 0; i < 100; i++)
   {
     int x = random.Next(image.Width);
     int y = random.Next(image.Height);
     image.SetPixel(x, y, Color.FromArgb(random.Next()));
   }
   //画图片的边框线
   g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
   //保存图片数据
   MemoryStream stream = new MemoryStream();
   image.Save(stream, ImageFormat.Jpeg);
   //输出图片流
   context.Response.Clear();
   context.Response.ContentType = "image/jpeg";
   context.Response.BinaryWrite(stream.ToArray());
 }
 finally
 {
   g.Dispose();
   image.Dispose();
 }
      }
      /// 
      /// 得到验证码图片的长度
      /// 
      /// 验证码的长度
      /// 
      public static int GetImageWidth(int validateNumLength)
      {
 return (int)(validateNumLength * 12.0);
      }
      /// 
      /// 得到验证码的高度
      /// 
      /// 
      public static double GetImageHeight()
      {
 return 22.5;
      }


      //C# MVC 升级版
      /// 
      /// 创建验证码的图片
      /// 
      /// 要输出到的page对象
      /// 验证码
      public byte[] CreatevalidateGraphic(string validateCode)
      {
 Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);
 Graphics g = Graphics.FromImage(image);
 try
 {
   //生成随机生成器
   Random random = new Random();
   //清空图片背景色
   g.Clear(Color.White);
   //画图片的干扰线
   for (int i = 0; i < 25; i++)
   {
     int x1 = random.Next(image.Width);
     int x2 = random.Next(image.Width);
     int y1 = random.Next(image.Height);
     int y2 = random.Next(image.Height);
     g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
   }
   Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
   LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
    Color.Blue, Color.DarkRed, 1.2f, true);
   g.DrawString(validateCode, font, brush, 3, 2);
   //画图片的前景干扰点
   for (int i = 0; i < 100; i++)
   {
     int x = random.Next(image.Width);
     int y = random.Next(image.Height);
     image.SetPixel(x, y, Color.FromArgb(random.Next()));
   }
   //画图片的边框线
   g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
   //保存图片数据
   MemoryStream stream = new MemoryStream();
   image.Save(stream, ImageFormat.Jpeg);
   //输出图片流
   return stream.ToArray();
 }
 finally
 {
   g.Dispose();
   image.Dispose();
 }
      }
    }
  
}

这时需要在程序中引入两个命名空间 System.Drawing和System.Web。

完成之后到LoginController控制器里面去新建一个ActionResult   就叫ValidateCode 用于生成验证码。(这里要先对NewWeb.Common引用)

生成验证码代码如下:

 public ActionResult ValidateCode()
    {
      Common.ValidateCode validateCode = new Common.ValidateCode();
      string code = validateCode.CreatevalidateCode(4); //生成的验证码4个长度
      Session["validateCode"] = code;
      byte[] buffer = validateCode.CreatevalidateGraphic(code);//创建验证码图片
      return File(buffer, "image/jpeg");//返回图片
    }

到Login视图里面的index页面去把img的src补充为:

 
   
    
    看不清,换一张

就可以看到页面上面显示出来验证码

下面要做的就是点击切换验证码,这是通过js实现的代码

 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/55537.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号