博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC中验证码的生成
阅读量:5171 次
发布时间:2019-06-13

本文共 3297 字,大约阅读时间需要 10 分钟。

在项目中验证码的生成通常是需要页面无刷新的,所以验证码图片实际是跟在某个input后面的img,通过控制该img来控制验证码显示的位置,例如:

<div>

<input id="testcode" type="text"/><img id="testimg" src="../Home/codeindex"/>
<a href="javascript:freshimg()" style="font-size: 12px; color: Green;">看不清</a>
</div>
<div>
<img id="imgtest" width="500px" height="600px" src="~/pp.png" style="display:none"/>
</div>

需要做到无刷新的切换图片

function freshimg() {

var randomnum = Math.random();
var getimagecode = document.getElementById("testimg");
getimagecode.src = "../Home/codeindex? " + randomnum;
}

验证输入的验证码是否正确

$(document).ready(function () {

var PerformSearch;
$("#testcode").keyup(function () {
var va = $(this).val();
if (PerformSearch) clearTimeout(PerformSearch);
PerformSearch=setTimeout(function () {
$.ajax({
type: "post",
url: "../Home/CheckCode",
data: { valdatecode: va },
dataType: "text",
success: function (data) {
if (data == "true") {
alert("验证码输入正确");
document.getElementById("imgtest").style.display = "block";
}
else {
alert("验证码输入错误");
fresh();
document.getElementById("imgtest").style.display = "none";
}
}
});
}, 1000)
});
});

后台代码为

public ActionResult codeindex()  //该段代码转载其他文档

{
#region 方法1:调用类方法
//CreateValdateCode cc = new CreateValdateCode();
//cc.GetValDateCode();
//Session["code"] = cc.Code;
//return View();
#endregion

#region 方法二

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", "MS Mincho", "Book Antiqua", "Gungsuh", "PMingLiU", "Impact" };
//验证码的字符集,去掉了一些容易混淆的字符
char[] character = { '2', '3', '4', '5', '6', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'W', 'X', 'Y','a','b','c' };
Random rnd = new Random();
//生成验证码字符串
for (int i = 0; i < 4; i++)
{
chkCode += character[rnd.Next(character.Length)];
}
Session["code"] = chkCode;
Bitmap bmp = new Bitmap(100, 40);
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.White);
//画噪线
for (int i = 0; i < 10; i++)
{
int x1 = rnd.Next(100);
int y1 = rnd.Next(40);
int x2 = rnd.Next(100);
int y2 = rnd.Next(40);
Color clr = color[rnd.Next(color.Length)];
g.DrawLine(new Pen(clr), x1, y1, x2, y2);
}
//画验证码字符串
for (int i = 0; i < chkCode.Length; i++)
{
string fnt = font[rnd.Next(font.Length)];
Font ft = new Font(fnt, 18);
Color clr = color[rnd.Next(color.Length)];
g.DrawString(chkCode[i].ToString(), ft, new SolidBrush(clr), (float)i * 18 + 8, (float)8);
}
//画噪点
for (int i = 0; i < 100; i++)
{
int x = rnd.Next(bmp.Width);
int y = rnd.Next(bmp.Height);
Color clr = color[rnd.Next(color.Length)];
bmp.SetPixel(x, y, clr);
}
Response.Buffer = true;
Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0);
Response.Expires = 0;
Response.CacheControl = "no-cache";
Response.AppendHeader("Pragma", "No-Cache");
MemoryStream ms = new MemoryStream();
try
{
bmp.Save(ms, ImageFormat.Png);
Response.ClearContent();
Response.ContentType = "image/Png";
Response.BinaryWrite(ms.ToArray());

}

finally
{
bmp.Dispose();
g.Dispose();
}
#endregion
return View();
}

public string CheckCode(string valdatecode)

{
if ( Session["code"].ToString().ToUpper()== valdatecode.ToUpper())
{
return "true";
}
else
{
return "false";
}
}

转载于:https://www.cnblogs.com/jinghuimin/p/4976670.html

你可能感兴趣的文章
checkbox:全选、全不选、单选(慕课网题目)
查看>>
supervisor 使用
查看>>
log4j的使用 && slf4j简单介绍
查看>>
只要是[运算] 就会提升数据类型
查看>>
PHP中使用cURL实现Get和Post请求的方法
查看>>
win10下JDK安装,配置环境变量后出现error:could not open '...jvm.cfg'
查看>>
Leetcode 508. Most Frequent Subtree Sum
查看>>
单机配置tomcat 8 集群
查看>>
python-线程互斥锁与递归锁
查看>>
异界冒险
查看>>
Unity3D:UGUI遍历子控件
查看>>
Fizz Buzz 面试题
查看>>
HDU-2027
查看>>
关于 Java 数组的 12 个最佳方法
查看>>
java中强制类型转换
查看>>
合并查找到的文件,至新的文件中
查看>>
Hibernate —— 映射关联关系
查看>>
UVA - 10129 Play on Words(欧拉回路)
查看>>
Spring MVC 基于URL的映射规则(注解版)
查看>>
Elasticsearch增删改查 之 —— mget多文档查询
查看>>