zoukankan      html  css  js  c++  java
  • 实现验证码

    此页前台代码:

    验证码:   <img src="YanZheng.aspx" onclick="this.src='captcha.aspx?aaa='+new Date()" alt="" />

                       <asp:TextBox ID="txtYanzheng" runat="server" Width="86px"></asp:TextBox>
                       <asp:ImageButton ID="ImageButton1" runat="server" OnClick="ImageButton1_Click" ImageUrl="~/images/denglu.png" />

     

    captcha.aspx的后台:

     protected void Page_Load(object sender, EventArgs e)
            {
                CreateCheckCodeImage(GenerateCheckCode());//调用下面两个方法;
            }
            /// <summary>
            /// 生成验证码的随机数
            /// </summary>
            /// <returns>返回五位随机数</returns>
            private string GenerateCheckCode()
            {
                int number;
                char code;
                string checkCode = String.Empty;


                Random random = new Random();


                for (int i = 0; i < 5; i++)//可以任意设定生成验证码的位数
                {
                    number = random.Next();


                    if (number % 2 == 0)
                        code = (char)('0' + (char)(number % 10));
                    else
                        code = (char)('A' + (char)(number % 26));


                    checkCode += code.ToString();
                }


                Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));//写入COOKIS
                Session["CheckCode"] = checkCode;  //写入Session,可以任意选一下
                return checkCode;
            }




            /// <summary>
            /// 生成验证码图片
            /// </summary>
            /// <param name="checkCode"></param>
            private void CreateCheckCodeImage(string checkCode)
            {
                if (checkCode == null || checkCode.Trim() == String.Empty)
                    return;


                Bitmap image = new Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
                Graphics g = Graphics.FromImage(image);


                try
                {
                    //生成随机生成器
                    Random random = new Random();


                    //清空图片背景色
                    g.Clear(Color.White);


                    //画图片的背景噪音线
                    for (int i = 0; i < 25; i++)
                    {
                        int x1 = random.Next(image.Width);
                        int x2 = random.Next(image.Width);
                        int y1 = random.Next(image.Height);
                        int y2 = random.Next(image.Height);


                        g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
                    }


                    Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
                    LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
                    g.DrawString(checkCode, font, brush, 2, 2);


                    //画图片的前景噪音点
                    for (int i = 0; i < 100; i++)
                    {
                        int x = random.Next(image.Width);
                        int y = random.Next(image.Height);


                        image.SetPixel(x, y, Color.FromArgb(random.Next()));
                    }


                    //画图片的边框线
                    g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);


                    MemoryStream ms = new MemoryStream();
                    image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
                    Response.ClearContent();
                    Response.ContentType = "image/Gif";
                    Response.BinaryWrite(ms.ToArray());
                }
                finally
                {//释放对象资源
                    g.Dispose();
                    image.Dispose();
                }
            }

  • 相关阅读:
    java io系列23之 BufferedReader(字符缓冲输入流)
    java io系列22之 FileReader和FileWriter
    java io系列21之 InputStreamReader和OutputStreamWriter
    java io系列20之 PipedReader和PipedWriter
    java io系列19之 CharArrayWriter(字符数组输出流)
    java io系列18之 CharArrayReader(字符数组输入流)
    java io系列17之 System.out.println("hello world")原理
    java io系列16之 PrintStream(打印输出流)详解
    java io系列15之 DataOutputStream(数据输出流)的认知、源码和示例
    java io系列14之 DataInputStream(数据输入流)的认知、源码和示例
  • 原文地址:https://www.cnblogs.com/duanlinlin/p/3166890.html
Copyright © 2011-2022 走看看