验证码看不清换一组

写一个类

public class ValidateCode

{

public ValidateCode()

{

}

/// <summary>

/// 验证码的最大长度

/// </summary>

public int MaxLength

{

get { return 10; }

}

/// <summary>

/// 验证码的最小长度

/// </summary>

public int MinLength

{

get { return 1; }

}

/// <summary>

/// 生成验证码

/// </summary>

/// <param name="length">指定验证码的长度</param>

/// <returns></returns>

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;

}

/// <summary>

/// 创建验证码的图片

/// </summary>

/// <param name="containsPage">要输出到的page对象</param>

/// <param name="validateNum">验证码</param>

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();

}

}

/// <summary>

/// 得到验证码图片的长度

/// </summary>

/// <param name="validateNumLength">验证码的长度</param>

/// <returns></returns>

public static int GetImageWidth(int validateNumLength)

{

return (int)(validateNumLength * 12.0);

}

/// <summary>

/// 得到验证码的高度

/// </summary>

/// <returns></returns>

public static double GetImageHeight()

{

return 22.5;

}

}

然后在controller中写到

public ActionResult GetValidateCode()

{

MyEbook.Models.ValidateCode vCode =new MyEbook.Models.ValidateCode ();

string code = vCode.CreateValidateCode(5);

Session["ValidateCode"] = code;

byte[] bytes = vCode.CreateValidateGraphic(code);

return File(bytes, @"image/jpeg");

}

然后在view中页面调用

<img id="imgCode" src="../MyEbook/GetValidateCode" style="cursor: pointer; vertical-align: middle" alt="ValidateCode" />

最后单击无刷新更换验证码(使用jquery)

$("#imgCode").click(function() { this.src = "../MyEbook/GetValidateCode?time" + new Date().getTime(); });//后面一定new一个date不然不会进行换组

验证码同步(防止第一次打开页面时不显示session验证码)

 

   首先

      在actionresult中写一个

public ActionResult GetJsonData()//get data(获取数据)

{

return this.Json(Session["ValidateCode"]);

}

   然后

在页面中写点击验证码图片的事件

$.ajax({url:”GetJsonData”,type:”post”,dataType:”json”,success:showResult})

function showResult(result) { $("#hCode").val(result.toString()); };

即可第一次加载时session有值

asp.net-mvc验证码 asp.net-mvc c#验证码的更多相关文章

  1. asp.net mvc 接入美圣短信 验证码发送

    第1步:登录美圣短信控制台 http://www.rcscloud.cn/hy/HY_ZH/login 账号:******* 密码:******* http://www.rcscloud.cn/com ...

  2. asp.net mvc 接入阿里大于 短信验证码发送

    项目前端页面实例 第1步:登录阿里大于控制台 https://www.alidayu.com/center/user/account?spm=0.0.0.0.P1K1jG 第2步:创建应用 第3步:配 ...

  3. 七天学会ASP.NET MVC (三)——ASP.Net MVC 数据处理

    第三天我们将学习Asp.Net中数据处理功能,了解数据访问层,EF,以及EF中常用的代码实现方式,创建数据访问层和数据入口,处理Post数据,以及数据验证等功能. 系列文章 七天学会ASP.NET M ...

  4. 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递

    通过第一天的学习之后,我们相信您已经对MVC有一些基本了解. 本节所讲的内容是在上节的基础之上,因此需要确保您是否掌握了上一节的内容.本章的目标是在今天学习结束时利用最佳实践解决方案创建一个小型的MV ...

  5. ASP.NET MVC 5– 使用Wijmo MVC 5模板1分钟创建应用

    开始使用 使用ComponentOne Studio for ASP.NET Wijmo制作MVC5应用程序,首先要做的是安装Studio for ASP.NET Wijmo . 测试环境 VS201 ...

  6. ASP.NET MVC 混搭 ASP.NET WebForms 所导致的 Html.ActionLink/BeginForm 问题

    首先,需要了解下这篇博文:<ASP.NET WebForms MapPageRoute 路由配置> 之前,在 ASP.NET MVC 中混搭 ASP.NET WebForms,使用 Map ...

  7. 【MVC】ASP.NET MVC Forms验证机制

    http://www.cnblogs.com/bomo/p/3309766.html 随笔 - 121  文章 - 0  评论 - 92 [MVC]ASP.NET MVC Forms验证机制 ASP. ...

  8. 【深入ASP.NET原理系列】--Asp.Net Mvc和Asp.Net WebForm共用一套ASP.NET请求管道

    .NET FrameWork4在系统全局配置文件(如在如下目录中C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config) 中添加了一个名字叫Url ...

  9. 对ASP.NET 5和ASP.NET MVC 6应用程序进行集成测试

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:之前有文章谈到如何对ASP.NET 5的应用程序进行单元测试(需使用xunit),今天 ...

  10. 返璞归真 asp.net mvc (13) - asp.net mvc 5.0 新特性

    [索引页][源码下载] 返璞归真 asp.net mvc (13) - asp.net mvc 5.0 新特性 作者:webabcd 介绍asp.net mvc 之 asp.net mvc 5.0 新 ...

随机推荐

  1. FRP 浅析

    一.Reactive? 请先看一个非常简单的小应用,它允许用户在一个搜索输入框里输入关键词,然后在其下方的结果区域实时显示从Flicker网站搜索得到的图片,当用户输入的关键词发生变化,显示的图片也会 ...

  2. 转载 Deep learning:四(logistic regression练习)

    前言: 本节来练习下logistic regression相关内容,参考的资料为网页:http://openclassroom.stanford.edu/MainFolder/DocumentPage ...

  3. lucene 查询 (转载)

    原网址:http://hi.baidu.com/lszhuhaichao/blog/item/ccffc7cb858f1514bf09e66f.html Lucene3.0之查询处理(1):原理201 ...

  4. 向页面动态添加外部js

    var script = document.createElement("script"); script.src = '/static/js/view/'+url+'.js'; ...

  5. 4-20ma电流信号转0-5v()

    源:4-20ma电流信号转0-5v 电压转电流电路原理图(0-5V转4-20mA) 4mA-20mA转0-5v电路问题,LM324一直输出10V

  6. 常用的dos命名

    注销:logoff 注册表:regedit 查看显存:dxdiag 删除文件: del +文件 删除文件夹: rd+(/s)+文件名 (/s表示删除文件下的子目录和文件); 系统配置实用程序: msc ...

  7. HDU 1166 敌兵布阵(树状数组)

    之前用过了线段树的做法,树状数组的也补上吧 #include<iostream> #include<cstdio> #include<cstring> using ...

  8. MFC中的NMHDR结构体和NMUPDOWN结构体

    建立spin控件,创建UDN_DELTAPOS一个消息函数后: void CSpinDlg::OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult) { NM ...

  9. AD进行行PCB DRC检查时,软件提示...report_drc.xsl不存在

    之前装过一次AD软件没有报过这样的错误,卸掉后重新装了之后,在对电气规则检查检查时“软件提示...report_drc.xsl不存在”. 原因:之前装的目录默认在C盘下,所以AD软件输出的报告也是默认 ...

  10. ural2062 Ambitious Experiment

    Ambitious Experiment Time limit: 3.0 secondMemory limit: 128 MB During several decades, scientists f ...