黑马程序员技术交流社区
标题:
怎么实现随机验证码?
[打印本页]
作者:
李永涛
时间:
2012-11-25 01:55
标题:
怎么实现随机验证码?
本帖最后由 李永涛 于 2012-11-25 18:58 编辑
比如在验证时,界面上出现一个验证码图标,我想知道这种随机验证码图标的出现怎么实现?有看到说是GDI?
作者:
王继光
时间:
2012-11-25 08:15
最新第10季 asp基础视频 第 17 - 19课 仔细看。。 可以解决你的问题。
作者:
吴步兵
时间:
2012-11-25 14:00
/// <summary>
/// 随即从"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"中取codeCount个字符组成验证码字符串
/// </summary>
/// <param name="codeCount">验证码长度</param>
/// <returns></returns>
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;
}
/// <summary>
/// 根据验证码字符生成图片
/// </summary>
/// <param name="checkCode">验证码字符</param>
private void CreateImage(string checkCode)
{
int iwidth = (int)(checkCode.Length * 10.5);
System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 18);
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);
System.Drawing.Font f = new System.Drawing.Font("Arial", 10, System.Drawing.FontStyle.Bold);
System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.White);
g.Clear(System.Drawing.Color.Blue);
g.DrawString(checkCode, f, b, 3, 1);
System.Drawing.Pen blackPen = new System.Drawing.Pen(System.Drawing.Color.Black, 0);
Random rand = new Random();
for (int i = 0; i < 3; 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);
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ContentType = "image/Jpeg";
HttpContext.Current.Response.BinaryWrite(ms.ToArray());
g.Dispose();
image.Dispose();
}
public void ProcessRequest(HttpContext context)
{
string checkCode = CreateRandomCode(4);
HttpContext.Current.Session["CheckCode"] = checkCode.ToLower();
CreateImage(checkCode);
}
public bool IsReusable
{
get
{
return false;
}
}
复制代码
一个简单的例子。
作者:
李永涛
时间:
2012-11-25 18:57
多谢了···
作者:
杨占伟
时间:
2012-11-26 00:05
路过,学习了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2