ASP.NET——生成验证码
实现:随机生成四位数字的验证码,点击验证码可无刷新生成新的验证码,最后点击按钮进行检验
PS:本实例使用UpdatePanel实现无刷新。
前台代码:
<asp:ScriptManager ID="ScriptManager1" runat="server" ></asp:ScriptManager>
页面加载时间:<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<div>
请输入验证码:<asp:TextBox ID="TextBox1" runat="server" Width="50px"></asp:TextBox>
<asp:ImageButton ID="btnImage" runat="server" ImageAlign="AbsMiddle" OnClick="btnImage_Click" />
<asp:Label ID="Label2" runat="server" Text=""></asp:Label>
<asp:HiddenField ID="hidImgVal" runat="server" />
</div>
<div>
<input type="button" value="检验" onclick="document.getElementById('hidImgVal').value == document.getElementById('TextBox1').value ? alert('验证通过') : alert('验证码不正确');" />
</div>
</ContentTemplate>
<Triggers><asp:AsyncPostBackTrigger ControlID="btnImage" EventName="Click"></asp:AsyncPostBackTrigger></Triggers>
</asp:UpdatePanel>
后台代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
CreateCheckCodeImage(, );
this.Label1.Text = DateTime.Now.ToString();
}
} //生成四位随机字符
private string CreateCheckCodeString()
{
char[] allCharArray =
{
'','','','','','','','','',''
}; string randomCode = "";
Random rd = new Random();
for (int i = ; i < ; i++)
{
randomCode += allCharArray[rd.Next(allCharArray.Length)];
} return randomCode;
} public void CreateCheckCodeImage(int iWidth, int iHeight)
{ Random rand = new Random();
Bitmap image = new Bitmap(iWidth, iHeight);//创建一个指定宽高的位图
Graphics g = Graphics.FromImage(image);//将位图放入画图板
g.Clear(ColorTranslator.FromHtml("#F0F0F0"));//清除画图板底色并填充新的颜色 //随机2条横向干扰线
for (int i = ; i < ; i++)
{
Pen pen1 = new Pen(Color.FromArgb(, rand.Next(), rand.Next(), rand.Next()), );//干扰线1
Point p1 = new Point(, rand.Next(iHeight));//横线起点
Point p2 = new Point(iWidth, rand.Next(iHeight));//横线终点
g.DrawLine(pen1, p1, p2);
} //随机4条纵向干扰线
for (int i = ; i < ; i++)
{
Pen pen2 = new Pen(Color.FromArgb(, rand.Next(), rand.Next(), rand.Next()), );//干扰线2
Point p1 = new Point(rand.Next(iWidth), );//横线起点
Point p2 = new Point(rand.Next(iWidth), iHeight);//横线终点
g.DrawLine(pen2, p1, p2);
} //随机字符转为图片
Font font = new Font("华文彩云", , FontStyle.Bold);//字体
SolidBrush brush = new SolidBrush(Color.Red);//颜色
Rectangle rect = new Rectangle(, , iWidth, iHeight);//文字区域
string code = CreateCheckCodeString();
this.hidImgVal.Value = code;
g.DrawString(code, font, brush, rect); //保存验证图
string path = HttpContext.Current.Server.MapPath(".");
string imgName = "img" + code + ".jpg";
image.Save(path + @"\img\4_5\" + imgName, ImageFormat.Jpeg);
this.btnImage.ImageUrl = "~/img/4_5/" + imgName; //释放对象
g.Dispose();
image.Dispose();
} protected void btnImage_Click(object sender, ImageClickEventArgs e)
{
//删除文件
string path = HttpContext.Current.Server.MapPath(".");
string imgName = "img" + this.hidImgVal.Value + ".jpg";
if (File.Exists(path + @"\img\4_5\" + imgName))
{
File.Delete(path + @"\img\4_5\" + imgName);
} CreateCheckCodeImage(, );
this.Label2.Text = DateTime.Now.ToString();
}
遗留问题:
虽然功能实现,但图片保存使用了动态路径,原因是静态路径无法实现刷新,所以会有日益增加的验证图文件。
但是想想,如果可以使用静态路径,那么100个用户同时读取该验证图会有什么结果?
看来较好的方式是将缩略图存放在客户端:)
网上有一种使用MemoryStream来存放验证图:
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
Response.ClearContent();
Response.ContentType = "image/Jpeg";
Response.BinaryWrite(ms.ToArray());
但不知道怎么传给图片的路径,这里请大师指点。
ASP.NET——生成验证码的更多相关文章
- 012. asp.net生成验证码图片(汉字示例/字母+数字)
protected void Page_Load(object sender, EventArgs e) { //生成验证码图片的基本步骤 string checkCode = "新年快乐& ...
- Asp.net 生成验证码
生成验证码一般来说大体有这么几步: 1.生成验证码字符串,一般由四个或更多随机字符拼凑而成: 2.填充图片背景,并绘制图片的背景噪音线: 3.将验证码绘制到图片中: 4.绘制前景噪点: 5.返回图片流 ...
- 【转载】ASP.NET 生成验证码
直接上code using System; using System.Collections.Generic; using System.Linq; using System.Web; using S ...
- ASP.NET生成验证码
首先,添加一个一般处理程序 注释很详细了,有不懂的欢迎评论 using System; using System.Collections.Generic; using System.Drawing; ...
- ASP.NET图形验证码的生成
效果: 调用方法: int[] r = QAPI.VerifImage.RandomList();//取得随机数种子列 );//产生验证码字符 pictureBox1.Image = QAPI.Ver ...
- ASP.NET ashx实现无刷新页面生成验证码
现在大部分网站登陆时都会要求输入验证码,在网上也看了一些范例,现在总结一下如何实现无刷新页面生成验证码. 效果图: 实现方式: 前台: <div> <span>Identify ...
- 详细说说如何生成验证码—ASP.NET细枝末节(4)
前言 今天小编详细的说一下,ASP.NET网站开发过程中生成验证码的全部问题. 本文的目标,是让读者了解,生成验证码涉及的全部基础知识问题. 当然这里说的是比较简单的验证码. 真正符合要求的验证码,涉 ...
- (一)【转】asp.net mvc生成验证码
网站添加验证码,主要为防止机器人程序批量注册,或对特定的注册用户用特定程序暴力破解方式,以进行不断的登录.灌水等危害网站的操作.验证码被广泛应用在注册.登录.留言等提交信息到服务器端处理的页面中. ...
- Asp.net mvc生成验证码
1.生成验证码类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
随机推荐
- Excel 统计在某个区间内数值的个数
=COUNTIF(A1:A50,"<=1.0E-5")-COUNTIF(A1:A50,"<60")
- [转] ubuntu开启SSH服务
点击阅读原文 SSH分客户端openssh-client和openssh-server如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有则sudo ...
- mysql重复索引、冗余索引、未使用索引的定义和查找
1.冗余和重复索引 mysql允许在相同列上创建多个索引,无论是有意还是无意,mysql需要单独维护重复的索引,并且优化器在优化查询的时候也需要逐个地进行考虑,这会影响性能.重复索引是指的在相同的列上 ...
- _vimrc默认配置
"不使用兼容vi的模式set nocompatible source $VIMRUNTIME/vimrc_example.vimsource $VIMRUNTIME/mswin.vimbeh ...
- sourceforge免费空间申请及使用笔记
sourceforge免费空间申请及使用笔记 sourceforge免费空间安装WordPress博客程序 WordPress博客程序安装文件的上传需要使用工具WinSCP. 你需要在FTP地址填写的 ...
- [jetbrains系列] 外链第三方库+代码补全设置
jetbrains系列的IDE真的是太好用了,有种相见恨晚的感觉. 在开发过程中第三方库是必不可少的,在开发的时候如果有一个可以补全的IDE可以节省查文档的时间. 举个例子:给pycharm配pysp ...
- Cron表达式简单学习
CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表.CronTrigger,你可以指定触 ...
- ElasticSearch学习问题记录——Invalid shift value in prefixCoded bytes (is encoded value really an INT?)
最近在做一个电商项目,其中商品搜索中出现一个奇怪的现象,根据某个字段排序的时候会出现商品数量减少的情况.按照一般路要么查不出来,要么正常显示,为什么增加了按照销量排序就会出现查询结果减少的情况. 查了 ...
- 【转】linux命令详解:md5sum命令
[转]linux命令详解:md5sum命令 转自:http://blog.itpub.net/29320885/viewspace-1710218/ 前言 在网络传输.设备之间转存.复制大文件等时,可 ...
- [原创] RT7 Lite win7旗舰版精简方案
[原创] RT7 Lite win7旗舰版精简方案 墨雪SEED 发表于 2016-1-26 21:23:54 https://www.itsk.com/thread-362912-1-5.html ...