时间:2021-05-26
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);
}
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];
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
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
ASP.NET(C#)中生成中文汉字验证码源码如下:usingSystem;usingSystem.Data;usingSystem.Configurati
实际上关于asp.net验证码制作的文章已经很多很多了,但是今天还是要和大家继续分享,亲,可以综合几篇实例,编写出适用于自己网站的ASP.NET验证码,大概也就
本文实例讲述了asp.net使用ashx生成图形验证码的方法。分享给大家供大家参考,具体如下:验证码的好处不用我多说,你们都懂的。我在网上看到有人把验证码直接写
本文实例讲述了ASP.NET实现的生成验证码功能。分享给大家供大家参考,具体如下:生成验证码原理:产生随机字符,并将字符生成为图片,同时储存到Session里去
本文实例为大家分享了ASP.NET验证码的具体代码,供大家参考,具体内容如下我主要是看到干扰线了,一个验证码里面要是没有干扰线什么的,至少得在噪点和随机码的排版