A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李永涛 中级黑马   /  2012-11-25 01:55  /  1254 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李永涛 于 2012-11-25 18:58 编辑

比如在验证时,界面上出现一个验证码图标,我想知道这种随机验证码图标的出现怎么实现?有看到说是GDI?

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

4 个回复

倒序浏览
最新第10季 asp基础视频  第 17 - 19课  仔细看。。 可以解决你的问题。
回复 使用道具 举报
  1. /// <summary>
  2.         /// 随即从"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个字符组成验证码字符串
  3.         /// </summary>
  4.         /// <param name="codeCount">验证码长度</param>
  5.         /// <returns></returns>
  6.         private string CreateRandomCode(int codeCount)
  7.         {
  8.             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";
  9.             string[] allCharArray = allChar.Split(',');
  10.             string randomCode = "";
  11.             int temp = -1;

  12.             Random rand = new Random();
  13.             for (int i = 0; i < codeCount; i++)
  14.             {
  15.                 if (temp != -1)
  16.                 {
  17.                     rand = new Random(i * temp * ((int)DateTime.Now.Ticks));
  18.                 }
  19.                 int t = rand.Next(35);
  20.                 if (temp == t)
  21.                 {
  22.                     return CreateRandomCode(codeCount);
  23.                 }
  24.                 temp = t;
  25.                 randomCode += allCharArray[t];
  26.             }
  27.             return randomCode;
  28.         }


  29.         /// <summary>
  30.         /// 根据验证码字符生成图片
  31.         /// </summary>
  32.         /// <param name="checkCode">验证码字符</param>
  33.         private void CreateImage(string checkCode)
  34.         {
  35.             int iwidth = (int)(checkCode.Length * 10.5);
  36.             System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 18);
  37.             System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);
  38.             System.Drawing.Font f = new System.Drawing.Font("Arial", 10, System.Drawing.FontStyle.Bold);
  39.             System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.White);


  40.             g.Clear(System.Drawing.Color.Blue);
  41.             g.DrawString(checkCode, f, b, 3, 1);

  42.             System.Drawing.Pen blackPen = new System.Drawing.Pen(System.Drawing.Color.Black, 0);
  43.             Random rand = new Random();
  44.             for (int i = 0; i < 3; i++)
  45.             {
  46.                 int y = rand.Next(image.Height);
  47.                 g.DrawLine(blackPen, 0, y, image.Width, y);
  48.             }

  49.             System.IO.MemoryStream ms = new System.IO.MemoryStream();
  50.             image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
  51.             HttpContext.Current.Response.ClearContent();
  52.             HttpContext.Current.Response.ContentType = "image/Jpeg";
  53.             HttpContext.Current.Response.BinaryWrite(ms.ToArray());
  54.             g.Dispose();
  55.             image.Dispose();
  56.         }



  57.         public void ProcessRequest(HttpContext context)
  58.         {
  59.             string checkCode = CreateRandomCode(4);
  60.             HttpContext.Current.Session["CheckCode"] = checkCode.ToLower();
  61.             CreateImage(checkCode);
  62.         }

  63.         public bool IsReusable
  64.         {
  65.             get
  66.             {
  67.                 return false;
  68.             }
  69.         }
复制代码
一个简单的例子。

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
多谢了···
回复 使用道具 举报
路过,学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马