验证码看不清换一组

写一个类

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. sqlserver2008行锁

    select * from tablename WITH (UPDLOCK) where Id=#value#

  2. 把Ubuntu用户目录下的目录名改成英文

    直接改名字是不行的,一重启就回去了 方法一: 把中文文件夹改成相应的英文文件夹,再修改配置文件 ~/.config/user-dirs.dirs XDG_DESKTOP_DIR="$HOME ...

  3. Linux学习 -- 备份与恢复

    备份 Linux系统需要备份的数据 /root/ /home/ /var/spool/mail /etc/ others 备份策略 完全备份 增量备份 差异备份 备份和恢复命令 dump  resto ...

  4. 基于手机传感器数据使用 CNN 识别用户行为的 Tensroflow 实现

    传感器数据集 这个项目使用了 WISDM (Wireless Sensor Data Mining) Lab 实验室公开的 Actitracker 的数据集. WISDM 公开了两个数据集,一个是在实 ...

  5. HDU 1204 基础DP 非连续字段的最大和

    其实这个感觉是一眼题,只不过我真心太菜了. 题目已经告诉你了,有m段,n个数字,那么我们就只需要dp[m][n]即可,然后最后的答案肯定是dp[m][]的那一行,所以其他行都是没有用的,因为我们可以把 ...

  6. Android传感器编程带实例(转)

    源:http://www.cnblogs.com/xiaochao1234/p/3894751.html 看了程序人生 网站的 编程高手的编程感悟 深有感触,好像也是一个android 程序员写的,推 ...

  7. PHP 命名空间以及自动加载(自动调用的函数,来include文件)

    这篇文章的目的是记录 1. php中的自动加载函数 __autoload(), 和 spl_autoload_register()函数, 2 .php中命名空间的使用. 一.当不使用命名空间的时候 a ...

  8. 搭建App主流框架_纯代码搭建(OC)

    转载自:http://my.oschina.net/hejunbinlan/blog/529778?fromerr=EmSuX7PR 搭建主流框架界面 源码地址在文章末尾 达成效果 效果图 注:本文部 ...

  9. Hadoop远程调用机制

  10. FileFilter与FilenameFilter实例

    下面的例子中我们创建了一个FileFilter类,此类根据文件名的扩展名是否为.txt来筛选文件.创建FileFilter实例之后需要将此实例作为参数传给File的listFiles(fileFilt ...