黑马程序员技术交流社区

标题: 谁有简单验证码的demo啊 [打印本页]

作者: 20131103    时间: 2013-11-3 00:23
标题: 谁有简单验证码的demo啊
本帖最后由 20131103 于 2013-11-3 20:42 编辑

谁有简单验证码的demo啊。
作者: hourglass    时间: 2013-11-3 02:34
这是一个包含两个数字,两个小写字母,两个大写字母并包含一些噪音线和噪音点的简单验证码的例子。
  1. /// <summary>
  2. /// 生成验证码字符串
  3. /// </summary>
  4. /// <returns>验证码</returns>
  5. private string GenerateCode()
  6. {
  7.     int number;
  8.     string result = "";
  9.     char[] code = new char[6];
  10.     Random random = new Random();
  11.     //通过这个for循环, 获取两个数字,两个小写字母和两个大写字符,并按顺序存到code数组中
  12.     for (int i = 0; i < 6; i++)
  13.     {
  14.         number = random.Next();
  15.         switch (i)
  16.         {
  17.             case 0:
  18.             case 1:
  19.                 code[i] = (char)('0' + (char)(number % 10));
  20.                 break;
  21.             case 2:
  22.             case 3:
  23.                 code[i] = (char)('a' + (char)(number % 26));
  24.                 break;
  25.             case 4:
  26.             case 5:
  27.                 code[i] = (char)('A' + (char)(number % 26));
  28.                 break;
  29.         }
  30.     }
  31.     //通过这个for循环,打乱验证码的顺序
  32.     for (int i = 0; i < 6; i++)
  33.     {
  34.         number = random.Next() % 6;
  35.         char k;
  36.         k = code[i];
  37.         code[i] = code[number];
  38.         code[number] = k;
  39.     }
  40.     //这里不能直接code.ToString(), code.ToString()的结果为System.Char[]
  41.     foreach (char Ch in code)
  42.     {
  43.         result += Ch;
  44.     }
  45.     string security = result.ToLower();
  46.     return result;
  47. }
  48. /// <summary>
  49. /// 将验证码输出为图片,并添加一些噪音线和噪音点
  50. /// </summary>
  51. /// <param name="code">验证码</param>
  52. private void DrawSecurityImage(string code)
  53. {
  54.     if (code == null || code.Trim() == "")
  55.     {
  56.         return;
  57.     }
  58.     Bitmap image = new Bitmap((int)Math.Ceiling(code.Length * 12.5), 22);
  59.     Graphics g = Graphics.FromImage(image);
  60.     try
  61.     {
  62.         Random random = new Random();
  63.         g.Clear(Color.White);
  64.         for (int i = 0; i < 5; i++)
  65.         {
  66.             int x1 = random.Next(image.Width);
  67.             int x2 = random.Next(image.Width);
  68.             int y1 = random.Next(image.Height);
  69.             int y2 = random.Next(image.Height);
  70.             g.DrawLine(new Pen(Color.Blue), x1, x2, y1, y2);
  71.         }
  72.         Font font = new Font("Arial", 12, FontStyle.Bold | FontStyle.Italic);
  73.         System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Black, Color.DarkRed, 1.2f, true);
  74.         g.DrawString(code, font, brush, 2, 2);
  75.         for (int i = 0; i < 99; i++)
  76.         {
  77.             int x = random.Next(image.Width);
  78.             int y = random.Next(image.Height);
  79.             image.SetPixel(x, y, Color.FromArgb(random.Next()));
  80.         }
  81.         g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
  82.         System.IO.MemoryStream ms = new System.IO.MemoryStream();
  83.         image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
  84.         Response.ClearContent();
  85.         Response.ContentType = "image/Gif";
  86.         Response.BinaryWrite(ms.ToArray());
  87.     }
  88.     catch (Exception) { }
  89.     finally
  90.     {
  91.         g.Dispose();
  92.         image.Dispose();
  93.     }
  94. }
复制代码

作者: 佟嘉豪    时间: 2013-11-3 10:33
这是在winform下的简单实现
自己对照着参考下吧
namespace 验证码
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {
            Bitmap bmp = new Bitmap(120, 80);
            Graphics g = Graphics.FromImage(bmp);
            Random r = new Random();
            string str = "";
            for (int i = 0; i < 5; i++)
            {
                int rNum = r.Next(0, 10);
                str += rNum;
            }
            
            InstalledFontCollection fonts = new InstalledFontCollection();
            FontFamily[] fs = fonts.Families;

            Color[] colors = { Color.Red,Color.Yellow,Color.Green,Color.Black,Color.Blue};

            for (int i = 0; i < 5; i++)
            {
                Point p=new Point(i*20,0);
                g.DrawString(str[i].ToString(),new Font(fs[i],20,FontStyle.Bold),new SolidBrush(colors[i]),p);
               
            }
            for (int i = 0; i < 20; i++)
            {
                Point p1 = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height));
                Point p2 = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height));
                g.DrawLine(new Pen(Color.Pink), p1, p2);               
            }
            for (int i = 0; i < 20; i++)
            {
                bmp.SetPixel(r.Next(0, bmp.Width), r.Next(0, bmp.Height), Color.Black);
            }
            pictureBox1.Image = bmp;
            //MessageBox.Show(str);
        }
    }




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2