手机
当前位置:查字典教程网 >编程开发 >asp.net教程 >asp.net下中文验证码,免费开源代码
asp.net下中文验证码,免费开源代码
摘要:usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Col...

usingSystem;

usingSystem.Data;

usingSystem.Configuration;

usingSystem.Collections;

usingSystem.Web;

usingSystem.Web.Security;

usingSystem.Web.UI;

usingSystem.Web.UI.WebControls;

usingSystem.Web.UI.WebControls.WebParts;

usingSystem.Web.UI.HtmlControls;

usingSystem.Text;

usingSystem.Drawing;

publicpartialclassCnCode:System.Web.UI.Page

{

protectedvoidPage_Load(objectsender,EventArgse)

{

//获取GB2312编码页(表)

Encodinggb=Encoding.GetEncoding("gb2312");

//调用函数产生4个随机中文汉字编码

object[]bytes=CreateRegionCode(4);

//根据汉字编码的字节数组解码出中文汉字

stringstr1=gb.GetString((byte[])Convert.ChangeType(bytes[0],typeof(byte[])));

stringstr2=gb.GetString((byte[])Convert.ChangeType(bytes[1],typeof(byte[])));

stringstr3=gb.GetString((byte[])Convert.ChangeType(bytes[2],typeof(byte[])));

stringstr4=gb.GetString((byte[])Convert.ChangeType(bytes[3],typeof(byte[])));

//输出的控制台

CreateImage(str1+str2+str3+str4);

}

/*

此函数在汉字编码范围内随机创建含两个元素的十六进制字节数组,每个字节数组代表一个汉字,并将

四个字节数组存储在object数组中。

参数:strlength,代表需要产生的汉字个数

*/

publicstaticobject[]CreateRegionCode(intstrlength)

{

//定义一个字符串数组储存汉字编码的组成元素

string[]rBase=newString[16]{"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};

Randomrnd=newRandom();

//定义一个object数组用来

object[]bytes=newobject[strlength];

/**//*每循环一次产生一个含两个元素的十六进制字节数组,并将其放入bject数组中

每个汉字有四个区位码组成

区位码第1位和区位码第2位作为字节数组第一个元素

区位码第3位和区位码第4位作为字节数组第二个元素

*/

for(inti=0;i<strlength;i++)

{

//区位码第1位

intr1=rnd.Next(11,14);

stringstr_r1=rBase[r1].Trim();

//区位码第2位

rnd=newRandom(r1*unchecked((int)DateTime.Now.Ticks)+i);//更换随机数发生器的种子避免产生重复值

intr2;

if(r1==13)

{

r2=rnd.Next(0,7);

}

else

{

r2=rnd.Next(0,16);

}

stringstr_r2=rBase[r2].Trim();

//区位码第3位

rnd=newRandom(r2*unchecked((int)DateTime.Now.Ticks)+i);

intr3=rnd.Next(10,16);

stringstr_r3=rBase[r3].Trim();

//区位码第4位

rnd=newRandom(r3*unchecked((int)DateTime.Now.Ticks)+i);

intr4;

if(r3==10)

{

r4=rnd.Next(1,16);

}

elseif(r3==15)

{

r4=rnd.Next(0,15);

}

else

{

r4=rnd.Next(0,16);

}

stringstr_r4=rBase[r4].Trim();

//定义两个字节变量存储产生的随机汉字区位码

bytebyte1=Convert.ToByte(str_r1+str_r2,16);

bytebyte2=Convert.ToByte(str_r3+str_r4,16);

//将两个字节变量存储在字节数组中

byte[]str_r=newbyte[]{byte1,byte2};

//将产生的一个汉字的字节数组放入object数组中

bytes.SetValue(str_r,i);

}

returnbytes;

}

privatevoidCreateImage(stringcheckCode)

{

intiwidth=(int)(checkCode.Length*25);

System.Drawing.Bitmapimage=newSystem.Drawing.Bitmap(iwidth,20);

Graphicsg=Graphics.FromImage(image);

Fontf=newSystem.Drawing.Font("Arial",12,System.Drawing.FontStyle.Bold);

Brushb=newSystem.Drawing.SolidBrush(Color.White);

//g.FillRectangle(newSystem.Drawing.SolidBrush(Color.Blue),0,0,image.Width,image.Height);

g.Clear(Color.Blue);

g.DrawString(checkCode,f,b,3,3);

PenblackPen=newPen(Color.Black,0);

Randomrand=newRandom();

for(inti=0;i<4;i++)

{

inty=rand.Next(image.Height);

g.DrawLine(blackPen,0,y,image.Width,y);

}

System.IO.MemoryStreamms=newSystem.IO.MemoryStream();

image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);

Response.ClearContent();

Response.ContentType="image/png";

Response.BinaryWrite(ms.ToArray());

g.Dispose();

image.Dispose();

}

}

该文章转载自'大智の博客':http://www.csafe.cn/article.asp?id=1274

【asp.net下中文验证码,免费开源代码】相关文章:

asp.net下模态对话框关闭之后继续执行服务器端代码的问题

Asp.net中处理一个站点不同Web应用共享Session的问题

asp.net下Request.QueryString取不到值的解决方法

记录asp.net网站是什么原因导致停止运行的代码

asp.net Web Services上传和下载文件(完整代码)第1/2页

asp.net 获取指定文件夹下所有子目录及文件(树形)

介绍asp.net 操作INI文件的读写

asp.net下大文件上传知识整理

asp.net导出EXCEL的功能代码

asp.net中包含文件的代码及使用方法

精品推荐
分类导航