/// <summary>
///生成验证码
/// </summary>
public class VerifyCode
{
/// <summary>
/// 生成验证码
/// </summary>
/// <returns></returns>
public byte[] GetVerifyCode()
{
int codeW = ;
int codeH = ;
int fontSize = ;
string chkCode = string.Empty;
//颜色列表,用于验证码、噪线、噪点
Color[] color = { Color.Black, Color.Red, Color.Blue, Color.Green, Color.Orange, Color.Brown, Color.Brown, Color.DarkBlue };
//字体列表,用于验证码
string[] font = { "Times New Roman" };
//验证码的字符集,去掉了一些容易混淆的字符
char[] character = { '', '', '', '', '', '', '', 'a', 'b', 'd', 'e', 'f', 'h', 'k', 'm', 'n', 'r', 'x', 'y', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'W', 'X', 'Y' };
Random rnd = new Random();
//生成验证码字符串
for (int i = ; i < ; i++)
{
chkCode += character[rnd.Next(character.Length)];
}
//写入Session、验证码加密
HttpContext.Current.Session("session_verifycode", MD5PassWordProvider.CutMD5(chkCode.ToLower(),));
//创建画布
Bitmap bmp = new Bitmap(codeW, codeH);
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.White);
//画噪线
for (int i = ; i < ; i++)
{
int x1 = rnd.Next(codeW);
int y1 = rnd.Next(codeH);
int x2 = rnd.Next(codeW);
int y2 = rnd.Next(codeH);
Color clr = color[rnd.Next(color.Length)];
g.DrawLine(new Pen(clr), x1, y1, x2, y2);
}
//画验证码字符串
for (int i = ; i < chkCode.Length; i++)
{
string fnt = font[rnd.Next(font.Length)];
Font ft = new Font(fnt, fontSize);
Color clr = color[rnd.Next(color.Length)];
g.DrawString(chkCode[i].ToString(), ft, new SolidBrush(clr), (float)i * , (float));
}
//将验证码图片写入内存流,并将其以 "image/Png" 格式输出
MemoryStream ms = new MemoryStream();
try
{
bmp.Save(ms, ImageFormat.Png);
return ms.ToArray();
}
catch (Exception)
{
return null;
}
finally
{
g.Dispose();
bmp.Dispose();
}
}
} //MD5加密
#region 将普通字符串转成MD5字符串
/// <summary>
/// 将普通字符串转成MD5字符串
/// </summary>
public static class MD5PassWordProvider
{
public static string Hash(string message)
{
if (string.IsNullOrEmpty(message))
{
return string.Empty;
}
else
{
MD5 md5 = MD5.Create();
byte[] source = Encoding.UTF8.GetBytes(message);
byte[] result = md5.ComputeHash(source);
StringBuilder buffer = new StringBuilder(result.Length); for (int i = ; i < result.Length; i++)
{
buffer.Append(result[i].ToString("x"));
}
return buffer.ToString();
}
}
/// <summary>
/// MD5加密验证码
/// </summary>
public static string CutMD5(string str, int code)
{
string strEncrypt = string.Empty;
if (code == )
{
strEncrypt = Hash(str).Substring(, );
}
return strEncrypt;
}
}
#endregio

mvc中使用

/// <summary>
/// 生成验证码
/// </summary>
[HttpGet]
public ActionResult VerifyCode()
{
return File(new VerifyCode().GetVerifyCode(), @"image/Gif");
}

cshtml中显示及刷新

<img id="login_verifycode" class="login_verifycode" src="~/Login/VerifyCode" alt="点击切换验证码"
title="点击切换验证码"/> //样式
.login_verifycode{
float: right;
margin-top: 1px;
display:inline-block;
text-align:center;
cursor:pointer;
width: 100px;
height: 36px;
padding-right: ;
padding-left: ;
/*border: 1px solid #d5d5d5;*/
font-size: 14px;
color: #;
background: white;
margin-left:-4px;
border-top-right-radius: 5px;
border-bottom-right-radius: 5px;
} //js
//点击切换验证码
$("#login_verifycode").click(function () {
$("#code").val('');//验证码的输入
$("#login_verifycode").attr("src", contentPath + "/Login/VerifyCode?time=" + Math.random());
});

最新文章

  1. React Native环境配置之Windows版本搭建
  2. 利用firebug调试功能辅助了解闭包和this
  3. matlab直方图均衡,使用向量优化
  4. UI基础
  5. 第1个linux驱动___打印&quot;hello world&quot;
  6. IIS 8.5 伪静态去掉index.php thinkphp 3.2.2
  7. Codeforce Round #210 Div2
  8. (medium)LeetCode 233.Number of Digit One
  9. Hbase总结(一)-hbase命令,hbase安装,与Hive的区别,与传统数据库的区别,Hbase数据模型
  10. 使用C++11安全的在线程中控制UI
  11. c#中的属性
  12. centos 命令行 连接无线网卡
  13. codeforces DIV2 D 最短路
  14. CentOS6.5-安装yum方法
  15. 好用的Quartz管理器类
  16. Scrapy、Scrapy-redis组件
  17. SQL 同一张表中相同字段的内容合并为一条记录(不同字段的那一列每个记录后面加逗号)
  18. Beta冲刺(2/5)(麻瓜制造者)
  19. Python操作redis系列之 列表(list) (五)
  20. 吴裕雄 python神经网络 花朵图片识别(9)

热门文章

  1. mysql zip方式安装
  2. dubbo服务provider方打印警告日志,getDeserializer - Hessian/Burla &#39;xxx&#39; is an unknown class
  3. [Mysql]一对多关系是如何发挥作用的?
  4. RabbitMQ 使用参考
  5. 一百二十八:CMS系统之轮播图的编辑和删除功能
  6. 图解Go协程调度原理,小白都能理解
  7. Java内部类(4):静态内部类&amp;接口内部类
  8. Java内部类(1):概述
  9. rocketMQ配置事故
  10. Angular05 angular架构、搭建angular开发环境、组件必备三要素、angular启动过程