Asp.Net 动态生成验证码

asp.net|动态|验证码

  我们在设计用户登录模块时,经常会用到验证码,可以有效地防止黑客软件的恶意破解,现公开我常用的验证码的源代码。

  使用方法:

  1、在Web项目中添加一个类,如“CreateImage.cs”,然后将我公布的源代码Copy进去;

  2、再新建一个Web窗体,如“Image.aspx”,在Page_Load中加入代码“CreateImage.DrawImage ();”当然别忘了加上对类的引用哦!!

  3、在页面的合适位置上(你想放验证码的位置)上加上如下javascript代码就OK 了,

             <SCRIPT LANGUAGE="JavaScript">
                <!--
                    var numkey = Math.random();
                    numkey = Math.round(numkey*10000);
                    document.write("<img src=\"Image.aspx?k="+ numkey +"\" width=\"52\" height=\"23\" hspace=\"4\"");
                file://->
             </SCRIPT>

源代码如下:

/// <summary>
/// 验证码模块
/// </summary>
public class CreateImage
{
public static void DrawImage()
{
CreateImage img=new CreateImage();
HttpContext.Current.Session["CheckCode"]=img.RndNum(4);
img.CreateImages(HttpContext.Current.Session["CheckCode"].ToString());
}

/// <summary>
/// 生成验证图片
/// </summary>
/// <param name="checkCode">验证字符</param>
private void CreateImages(string checkCode)
{
int iwidth = (int)(checkCode.Length * 13);
System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 23);
Graphics g = Graphics.FromImage(image);
g.Clear(Color.White);
file://定义颜色
Color[] c = {Color.Black,Color.Red,Color.DarkBlue,Color.Green,Color.Orange,Color.Brown,Color.DarkCyan,Color.Purple};
file://定义字体
string[] font = {"Verdana","Microsoft Sans Serif","Comic Sans MS","Arial","宋体"};
Random rand = new Random();
file://随机输出噪点
for(int i=0;i<50;i++)
{
int x = rand.Next(image.Width);
int y = rand.Next(image.Height);
g.DrawRectangle(new Pen(Color.LightGray, 0),x,y,1,1);
}

file://输出不同字体和颜色的验证码字符
for(int i=0;i<checkCode.Length;i++)
{
int cindex = rand.Next(7);
int findex = rand.Next(5);

Font f = new System.Drawing.Font(font[findex], 10, System.Drawing.FontStyle.Bold);
Brush b = new System.Drawing.SolidBrush(c[cindex]);
int ii=4;
if((i+1)%2==0)
{
ii=2;
}
g.DrawString(checkCode.Substring(i,1), f, b, 3+(i*12), ii);
}
file://画一个边框
g.DrawRectangle(new Pen(Color.Black,0),0,0,image.Width-1,image.Height-1);

file://输出到浏览器
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
HttpContext.Current.Response.ClearContent();
file://Response.ClearContent();
HttpContext.Current.Response.ContentType = "image/Jpeg";
HttpContext.Current.Response.BinaryWrite(ms.ToArray());
g.Dispose();
image.Dispose();
}

/// <summary>
/// 生成随机的字母
/// </summary>
/// <param name="VcodeNum">生成字母的个数</param>
/// <returns>string</returns>
private string RndNum(int VcodeNum)
{
string Vchar = "0,1,2,3,4,5,6,7,8,9" ;
string[] VcArray = Vchar.Split(',') ;
string VNum = "" ; file://由于字符串很短,就不用StringBuilder了
int temp = -1 ; file://记录上次随机数值,尽量避免生产几个一样的随机数

file://采用一个简单的算法以保证生成随机数的不同
Random rand =new Random();
for ( int i = 1 ; i < VcodeNum+1 ; i++ )
{
if ( temp != -1)
{
rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));
}
int t = rand.Next(VcArray.Length ) ;
if (temp != -1 && temp == t)
{
return RndNum( VcodeNum );
}
temp = t ;
VNum += VcArray[t];
}
return VNum ;
}
}

时间: 2024-08-19 05:44:56

Asp.Net 动态生成验证码的相关文章

ASP.NET中如何动态生成验证码

现在不少网站中都使用了验证码的技术,实现方式也是多种多样,这里主要介绍ASP.NET中可以采用的一种动态生成验证码的方法,可能并不十分完美,但实现难度是属于较低的. 该方法是利用了普通的动态图片生成技术,但比较特别的一点是图片的生成是在一个Page类型的子类的Page_Load方法中执行的.所以Response的ContentType为image/Gif,而非text/html. GraphicalText.aspx.cs代码: using System; using System.Drawin

Asp.net动态生成html页面

asp.net|动态|生成html|页面 此功能适用于后台数据库功能不强的web站点,即大部分文本不是存放在数据库的记录中,而是放在html文件或者xml文件中,仅仅把索引放到数据库中,如文章标题.类别.查询关键字等.这样适合于后台没有诸如MS Sql Server这样的数据库支持的Web站点. 适用于新闻发布系统,比如sina.163等都是采用动态生成html页面的. 适用于需动态定制页面的程序.比如论坛.聊天室等.可以加载定制好的html页面,来加强美观. 思路 1. 利用如Dw-Mx这样的

asp.net动态生成控件-asp.net 动态生成checkboxlist的问题

问题描述 asp.net 动态生成checkboxlist的问题 从数据库随机取一些记录动态生成多个checkboxlist,怎么把用户选择的结果保存?好像一点提交,checkboxlist就重新生成了,由于每个checkboxlist的item数量不一样,得到的结果总是出错. 解决方案 便利checkboxlist,用逗号拼接,存入数据库字段 解决方案二: ASP.NET动态生成HTML页面Asp.Net 中 动态生成 Excel 解决方案三: 遍历没问题,可是已提交页面要刷新,checkbo

ASP.NET动态生成word文档

问题描述 刚学习C#,ASP.NET,老大让我用ASP.NET动态生成word文档,对于这个我不是太懂,有人可以告诉我应该怎么做么,最好有个程序例子.谢谢了~~~~ 解决方案 解决方案二:首先要添加引用:1.添加引用->COM->MicrosoftWord11.0ObjectLibrary2.在.cs文件中添加usingWord;代码如下:publicstringCreateWordFile(stringCheckedInfo){stringmessage="";try{O

JSP动态生成验证码存储在session作用范围内_JSP编程

(1)在登录应用中,为防止恶意登录,常常需要服务器动态生成验证码并存储在session作用范围中,最后以图像形式返回给客户端显示 (2)下边的代码实现的功能:写一个JSP页,动态生成一个验证码,存储在session作用范围内,并以图像形式返回给客户端显示. 另写一个JSP页面,引用此JSP页面生成的验证码: authen.jsp代码如下: <%@ page import="java.awt.*,java.awt.image.*,java.util.*,com.sun.image.codec

asp.net简单生成验证码的方法_实用技巧

本文实例讲述了asp.net简单生成验证码的方法.分享给大家供大家参考,具体如下: 1.新建一个一般处理程序 namespace WebApplication1 { /// <summary> /// $codebehindclassname$ 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfil

请教:如何用asp.net动态生成表格

问题描述 asp.net动态生成表格,表格某列有不一样的控件,或Textbox,或Dropdownlist,现在生成后,如何在控件里输入值,然后插入到数据库中,同时因为表格行列不固定,数据库怎么设计 解决方案 解决方案二:行列不固定,可以用稀疏矩阵的方法表示.解决方案三:该回复于2012-03-21 09:02:34被版主删除解决方案四:该回复于2012-03-21 09:02:35被版主删除解决方案五:像LZ这样需要动态生成的效果的话建议还是直接在后台拼接html代码比较方法,如果需要text

asp.net动态生成竖向流程图片

问题描述 asp.net动态生成竖向流程图片 解决方案 解决方案二:虽然你表达不清楚虽然你字数精简虽然你有太多的太多我只能说..flash和SL貌似可以实现你的需求解决方案三:什么意思能不能不太明白,能不能帮个忙做个demo给小弟参考一下

如何在asp.net中动态生成验证码

asp.net|动态|验证码   现在越来越多的网站喜欢搞个验证码出来,而且各个语言基本上都能做到,今天我来一个C#写的! using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Drawing;using System.Web;using System.Web.SessionState;using System.Web.UI;using System.Web