.netFramewrok,asp.net的验证码如何生成? 这要怎么回答才可以?希望详细一点谢谢!!!!!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 新建一个Createimage.aspx页面,然后在CS代码如下:使用方法:例如登陆界面上需要验证码,就放一个image或者imagebutton,imageurl就选Createimage.aspx protected void Page_Load(object sender, EventArgs e) { CreateImageM(CreateValidate(5)); //5是验证码的位数. 可以根据需要改 } /// <summary> /// 生成随机验证码 /// </summary> /// <param name="count"></param> /// <returns></returns> private string CreateValidate(int count) { //定义验证码中要用到的字符 string allchar = "1,2,3,4,5,6,7,8,9,0,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"; //将验证码中的字符保存到一个字符串数组中去 string[] allchararray = allchar.Split(','); //初始化一个随机数 string randomcode = ""; int temp = -1; //生成一个对象 Random rand = new Random(); //根据验证码的位数循环 for (int i = 0; i<count; i++ ) { //防止生成相同的验证码 if(temp!=-1) { //加入时间的刻度 rand = new Random(i*temp*((int)DateTime.Now.Ticks)); } int t = rand.Next(35); if(temp==t) { //相等就重新生成 return CreateValidate(count); } temp = t; randomcode += allchararray[t]; } //在Session中保存随机数验证码 Session["Valid"] = randomcode.ToLower(); //返回生成的随机数 return randomcode; } /// <summary> /// 生成验证码背景图片 /// </summary> /// <param name="validateCode"></param> private void CreateImageM(string validateCode) { //图像的高度,与验证码的长度成一定比例 int iwidth = (int)(validateCode.Length * 11.5); //创建一个长20,宽iwidth的图像对象 System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 20); //创建一个新绘图对象 Graphics g = Graphics.FromImage(image); //绘图用的字体和字号 Font f = new System.Drawing.Font("Arial", 11, System.Drawing.FontStyle.Bold); //刷子的大小 Brush b = new System.Drawing.SolidBrush(Color.White); //清除背景色,用一颜色填充 g.Clear(Color.DarkOliveGreen); //格式化刷子 g.DrawString(validateCode,f,b,3,3); //创建铅笔 Pen blackPen = new Pen(Color.Black,0); //创建随机对象 Random rand = new Random(); //随机画线 for (int i = 0; i<2; 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(); } 新建一个aspx文件,在Aspx中,去掉除第一行<%%>之外的所有内容。在对应的aspx.cs中,加入如下代码: protected void Page_Load(object sender, EventArgs e) { Response.Buffer = true; Response.ExpiresAbsolute = DateTime.Now.AddDays(-1); Response.Expires = 0; Response.CacheControl = "no-cache"; Response.AddHeader("Pragma", "No-Cache"); System.Random rdm = new Random(); Bitmap bp = new Bitmap(100, 40); string AllStr = "23456789ABCDEFGHJKMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz"; string[] zt = new string[] { "Arial Black", "Comic Sans MS", "Georgia" }; SolidBrush bs = new SolidBrush(Color.FromArgb(255, 55, 0)); SolidBrush bs1 = new SolidBrush(Color.FromArgb(243, 241, 241)); SolidBrush bs2 = new SolidBrush(Color.FromArgb(80, 230, 115, 0)); Graphics Dr = Graphics.FromImage(bp); Dr.FillRectangle(bs1, 0, 0, 100, 40); string rr = ""; for (int i = 0; i <= 30; i++) { char c1 = AllStr[rdm.Next(0, AllStr.Length - 1)]; Dr.DrawString(c1.ToString(), new Font(zt[rdm.Next(0, zt.Length - 1)], (float)rdm.Next(12, 22)), bs2, rdm.Next(0, 100) - 20, rdm.Next(0, 40) - 15); } Dr.DrawLine(new Pen(Color.FromArgb(100, Color.Red)), 0, rdm.Next(0, 40), 100, rdm.Next(0, 40)); Dr.DrawLine(new Pen(Color.FromArgb(100, Color.Red)), 0, rdm.Next(0, 40), 100, rdm.Next(0, 40)); for (int i = 0; i < 4; i++) { char c1 = AllStr[rdm.Next(0, AllStr.Length - 1)]; rr += c1; Dr.DrawString(c1.ToString(), new Font(zt[rdm.Next(0, zt.Length - 1)], (float)rdm.Next(12, 22)), bs, i * 25, rdm.Next(0, 7)); } Dr.DrawLine(new Pen(Color.FromArgb(100, Color.Red)), rdm.Next(0, 100), 0, rdm.Next(0, 100), 40); for (int i = 0; i <= 160; i++) bp.SetPixel(rdm.Next(0, 100), rdm.Next(0, 40), Color.FromArgb(rdm.Next(0, 255), rdm.Next(0, 255), rdm.Next(0, 255))); Session["ValidateCode"] = rr; bp.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); Response.Flush(); Response.End(); } 首先我们使用.NET框架中随机数生成器 Random类型来生成一个不定长的包含随机数字和英文字符的文本,这就是验证码原始文本,我们将其保存在session中供以后使用。然后我们创建一个临时图片,并据此创建一个临时的图象绘制对象,然后调用Graphics的MeasureString函数获得这个字符串的显示大小。据此我们就可以计算出验证码图片的大小。然后我们创建一个位图对象,在此基础上创建一个图形绘制对象,然后调用图形绘制对象的DrawString函数将验证码文本绘制在这个位图上。绘制验证码后我们在图片上随机的制造杂点来混淆图片内容。这些杂点的面积占图片面积的30%,而且其位置和颜色都是随机的。这些杂点能严重的干扰程序辨认验证码文本。但人脑在辨认文本时能比较轻松的排除这些干扰。图片生成后页面就使用PNG格式将图片文档发送到客户端。 为什么我用VS2005建立的项目移动到其他盘就不可用了? girdview动态绑定列 请教高手:怎样判断dataset中的某一字段为空值? 各位帮帮忙 ASP.net 上传图片,并及时显示 懂网站发布的大侠帮帮小弟!!小弟郁闷啊!! 求助:GridView的ImageField字段如何才能从数据库字段的字符串中提取图片名? 新手来,问个很怪的问题! 大家一定帮我答复啊,50分 asp.net2.0无刷新回调如何指向单文件页 再加100分,关于iframe里打开Word文档内容为空白的问题 登陆问题!! GirdView控件emptydata模板里写了LINKBUTTON控件为何没有显示
使用方法:例如登陆界面上需要验证码,就放一个image或者imagebutton,imageurl就选Createimage.aspx protected void Page_Load(object sender, EventArgs e)
{
CreateImageM(CreateValidate(5)); //5是验证码的位数. 可以根据需要改
}
/// <summary>
/// 生成随机验证码
/// </summary>
/// <param name="count"></param>
/// <returns></returns>
private string CreateValidate(int count)
{
//定义验证码中要用到的字符
string allchar = "1,2,3,4,5,6,7,8,9,0,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
//将验证码中的字符保存到一个字符串数组中去
string[] allchararray = allchar.Split(',');
//初始化一个随机数
string randomcode = "";
int temp = -1;
//生成一个对象
Random rand = new Random();
//根据验证码的位数循环
for (int i = 0; i<count; i++ )
{
//防止生成相同的验证码
if(temp!=-1)
{
//加入时间的刻度
rand = new Random(i*temp*((int)DateTime.Now.Ticks));
}
int t = rand.Next(35);
if(temp==t)
{
//相等就重新生成
return CreateValidate(count);
}
temp = t;
randomcode += allchararray[t];
}
//在Session中保存随机数验证码
Session["Valid"] = randomcode.ToLower();
//返回生成的随机数
return randomcode;
}
/// <summary>
/// 生成验证码背景图片
/// </summary>
/// <param name="validateCode"></param>
private void CreateImageM(string validateCode)
{
//图像的高度,与验证码的长度成一定比例
int iwidth = (int)(validateCode.Length * 11.5);
//创建一个长20,宽iwidth的图像对象
System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 20);
//创建一个新绘图对象
Graphics g = Graphics.FromImage(image);
//绘图用的字体和字号
Font f = new System.Drawing.Font("Arial", 11, System.Drawing.FontStyle.Bold);
//刷子的大小
Brush b = new System.Drawing.SolidBrush(Color.White);
//清除背景色,用一颜色填充
g.Clear(Color.DarkOliveGreen); //格式化刷子
g.DrawString(validateCode,f,b,3,3);
//创建铅笔
Pen blackPen = new Pen(Color.Black,0);
//创建随机对象
Random rand = new Random();
//随机画线
for (int i = 0; i<2; 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();
}
在对应的aspx.cs中,加入如下代码:
protected void Page_Load(object sender, EventArgs e)
{
Response.Buffer = true;
Response.ExpiresAbsolute = DateTime.Now.AddDays(-1);
Response.Expires = 0;
Response.CacheControl = "no-cache";
Response.AddHeader("Pragma", "No-Cache"); System.Random rdm = new Random();
Bitmap bp = new Bitmap(100, 40);
string AllStr = "23456789ABCDEFGHJKMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz";
string[] zt = new string[] { "Arial Black", "Comic Sans MS", "Georgia" };
SolidBrush bs = new SolidBrush(Color.FromArgb(255, 55, 0));
SolidBrush bs1 = new SolidBrush(Color.FromArgb(243, 241, 241));
SolidBrush bs2 = new SolidBrush(Color.FromArgb(80, 230, 115, 0));
Graphics Dr = Graphics.FromImage(bp);
Dr.FillRectangle(bs1, 0, 0, 100, 40);
string rr = "";
for (int i = 0; i <= 30; i++)
{
char c1 = AllStr[rdm.Next(0, AllStr.Length - 1)];
Dr.DrawString(c1.ToString(), new Font(zt[rdm.Next(0, zt.Length - 1)], (float)rdm.Next(12, 22)), bs2, rdm.Next(0, 100) - 20, rdm.Next(0, 40) - 15);
}
Dr.DrawLine(new Pen(Color.FromArgb(100, Color.Red)), 0, rdm.Next(0, 40), 100, rdm.Next(0, 40));
Dr.DrawLine(new Pen(Color.FromArgb(100, Color.Red)), 0, rdm.Next(0, 40), 100, rdm.Next(0, 40));
for (int i = 0; i < 4; i++)
{
char c1 = AllStr[rdm.Next(0, AllStr.Length - 1)];
rr += c1;
Dr.DrawString(c1.ToString(), new Font(zt[rdm.Next(0, zt.Length - 1)], (float)rdm.Next(12, 22)), bs, i * 25, rdm.Next(0, 7));
}
Dr.DrawLine(new Pen(Color.FromArgb(100, Color.Red)), rdm.Next(0, 100), 0, rdm.Next(0, 100), 40);
for (int i = 0; i <= 160; i++)
bp.SetPixel(rdm.Next(0, 100), rdm.Next(0, 40), Color.FromArgb(rdm.Next(0, 255), rdm.Next(0, 255), rdm.Next(0, 255))); Session["ValidateCode"] = rr;
bp.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
Response.Flush();
Response.End();
}