Asp.net(C#)实现验证码功能代码

 更新时间:2008年10月22日 14:36:40   作者:  
asp.net验证码的实现方法
新建一个专门用来创建验证码图片的页面ValidateCode.aspx
它的后台cs文件代码如下:
PageLoad
复制代码 代码如下:

private void Page_Load(object sender, System.EventArgs e)
{
string checkCode = CreateRandomCode(4);
Session["CheckCode"] = checkCode;
CreateImage(checkCode);
}

其中CreateRandomCode是自定义的函数,参数代表验证码位数
复制代码 代码如下:

private string CreateRandomCode(int codeCount)
{
string allChar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z";
string[] allCharArray = allChar.Split(',');
string randomCode = "";
int temp = -1; Random rand = new Random();
for (int i = 0; i < codeCount; i++)
{
if (temp != -1)
{
rand = new Random(i * temp * ((int)DateTime.Now.Ticks));
}
int t = rand.Next(35);
if (temp == t)
{
return CreateRandomCode(codeCount);
}
temp = t;
randomCode += allCharArray[t];
}
return randomCode;
}

CreateImage也是一个自定义的函数,用于生成图
复制代码 代码如下:

private void CreateImage(string checkCode)
{
int iwidth = (int)(checkCode.Length * 11.5);
System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 20);
Graphics g = Graphics.FromImage(image);
Font f = new System.Drawing.Font("Arial", 10, System.Drawing.FontStyle.Bold);
Brush b = new System.Drawing.SolidBrush(Color.White);
//g.FillRectangle(new System.Drawing.SolidBrush(Color.Blue),0,0,image.Width, image.Height);
g.Clear(Color.Blue);
g.DrawString(checkCode, f, b, 3, 3);
Pen blackPen = new Pen(Color.Black, 0);
Random rand = new Random();
for (int i=0;i<5;i++)
{
int y = rand.Next(image.Height);
g.DrawLine(blackPen,0,y,image.Width,y);
}
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());
g.Dispose();
image.Dispose();
}
//g.FillRectangle(new System.Drawing.SolidBrush(Color.Blue),0,0,image.Width, image.Height);
g.Clear(Color.Blue);
这两种方法都可以改变生成图片的背景颜色。下面那个for循环用来生成一些随机的水平线
在需要用到验证码的页面添加一个<asp:Image>控件即可,但是要把ImageUrl指向生成验证码的页面
复制代码 代码如下:

<asp:Image Runat="server" ID="ImageCheck" ImageUrl="ValidateCode.aspx"></asp:Image>

相关文章

  • ASP.NET MVC3手把手教你构建Web

    ASP.NET MVC3手把手教你构建Web

    微软更新速度一直都是很快,目前最新版本是ASP.NET MVC 5.1,而我还在刚刚起步研究MVC3.0。本文是MVC的基础,构建最简单的MVC项目,感兴趣的小伙伴们可以参考一下
    2015-09-09
  • asp.net IList查询数据后格式化数据再绑定控件

    asp.net IList查询数据后格式化数据再绑定控件

    这篇文章送给.net初学者或者遇到类似问题的朋友,就是IList如何格式化数据再绑定,我看到网上没有多少朋友讲到这方面的最基本的问题,现在我简单说说吧,代码我就截取其中一些讲,如果不明白的朋友可以留言或者联系我。
    2009-11-11
  • asp.net5中的用户认证与授权(1)

    asp.net5中的用户认证与授权(1)

    Visual Studio 2015 Preview 除了给我们带了了C# 6.0的新语法、跨移动的开发以外,还给我们带来了ASP.NET5(也就是之前被称作下一代ASP.NET的ASP.NET vNext)。本文给大家介绍asp.net5中的用户认证与授权(1),需要的朋友可以参考下
    2015-10-10
  • Asp.net利用一般处理程序实现文件下载功能

    Asp.net利用一般处理程序实现文件下载功能

    这篇文章主要介绍了Asp.net利用一般处理程序实现文件下载功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-07-07
  • .net indexOf(String.indexOf 方法)

    .net indexOf(String.indexOf 方法)

    字符串的IndexOf()方法搜索在该字符串上是否出现了作为参数传递的字符串,如果找到字符串,则返回字符的起始位置 (0表示第一个字符,1表示第二个字符依此类推)如果说没有找到则返回 -1
    2012-10-10
  • ASP.net中获取客户端参数操作系统信息

    ASP.net中获取客户端参数操作系统信息

    这篇文章主要介绍了ASP.net中如何获取客户端参数或操作系统信息,需要的朋友可以参考下
    2014-03-03
  • 区分ASP.NET中get方法和post方法

    区分ASP.NET中get方法和post方法

    我们都知道,get是从服务器上获取数据,post是向服务器上传数据。本文主要介绍ASP.NET中get方法和post方法的区别,需要的朋友可以参考下
    2015-10-10
  • 使用Fiddler调试visual studion多个虚拟站点的问题分析

    使用Fiddler调试visual studion多个虚拟站点的问题分析

    本篇文章小编为大家介绍,使用Fiddler调试visual studion多个虚拟站点的问题分析。需要的朋友参考下
    2013-04-04
  • asp.net 通用分页显示辅助类(改进版)

    asp.net 通用分页显示辅助类(改进版)

    在使用ASP.NET编程时,如果不用控件的默认分页功能,想自己搞一个,可以看看本文的asp.net通用分页显示辅助类哦。
    2010-04-04
  • 强烈推荐一个基于.Net Framework开发的Windows右键菜单管理工具

    强烈推荐一个基于.Net Framework开发的Windows右键菜单管理工具

    这篇文章主要介绍了推荐一个基于.Net Framework开发的Windows右键菜单管理工具,今天给大家推荐一个Windows右键菜单管理工具,方便我们管理我们的右键菜单,需要的朋友可以参考下
    2023-05-05

最新评论