验证码的使用

前台:

  <div class="textcontent">
            验证码:
            <asp:TextBox ID="validateNumber" runat="server"></asp:TextBox>
      </div>
      <div class="textcontent">
            <asp:ImageButton ID="ValidateButton" runat="server" Width="61" Height="21" />看不清?
             <a href="javascript:changeCode()" style="text-decoration: underline;">换一张</a>
       </div>

前台js:

   function changeCode() {

            document.getElementById('ValidateButton').src = document.getElementById('ValidateButton').src + '?';

        }

后台:

  ValidateButton.ImageUrl = "ValidatePage.aspx";

后台提交:

 
                    if (!Session["code"].ToString().Trim().Equals(validateNumber.Text.Trim()))
                    {
                        ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", "<script>$('#validateNumber').after('验证码错误')</script>");
                    }

新建ValidatePage.aspx:

前台不动

后台:

 protected void Page_Load(object sender, EventArgs e)

        {

            string validateCode = CreateValidateCode();//生成验证码

            Bitmap bitmap = new Bitmap(imgWidth, imgHeight);//生成Bitmap图像

            DisturbBitmap(bitmap); //图像背景

            DrewValidateCode(bitmap, validateCode);//绘制验证码图像

            bitmap.Save(Response.OutputStream, ImageFormat.Gif);//保存图像,等待输出

        }

        private int codeLen = 4;//验证码长度

        private int fineness = 85;//图片清晰度

        private int imgWidth = 48;//图片宽度

        private int imgHeight = 24;//图片高度

        private string fontFamily = "Times New Roman";//字体名称

        private int fontSize = 14;//字体大小

        private int fontStyle = 0;//字体样式

        private int posX = 0;//绘制起始坐标X

        private int posY = 0;//绘制坐标Y

        private string CreateValidateCode() //生成验证码

        {

            string validateCode = "";

            Random random = new Random();// 随机数对象

            for (int i = 0; i < codeLen; i++)//循环生成每位数值

            {

                int n = random.Next(10);//数字

                validateCode += n.ToString();

            }  

           Session["code"] = validateCode;//保存验证码

            return validateCode;// 返回验证码         }

        private void DisturbBitmap(Bitmap bitmap)//图像背景

        {

            Random random = new Random();//通过随机数生成

            for (int i = 0; i < bitmap.Width; i++)//通过循环嵌套,逐个像素点生成

            {

                for (int j = 0; j < bitmap.Height; j++)

                {

                    if (random.Next(90) <= this.fineness)

                        bitmap.SetPixel(i, j, Color.LightGray);

                }

            }

        }

        private void DrewValidateCode(Bitmap bitmap, string validateCode)//绘制验证码图像

        {

            Graphics g = Graphics.FromImage(bitmap);//获取绘制器对象

            Font font = new Font(fontFamily, fontSize, FontStyle.Bold);//设置绘制字体

            g.DrawString(validateCode, font, Brushes.Black, posX, posY);//绘制验证码图像

        }

    }

 

posted @ 2015-06-11 11:04  Yida_婷婷  阅读(236)  评论(0编辑  收藏  举报