验证码

其实我不是想做验证码的,只是想不停的刷新某个图片

看到验证码这个思路可行,就试了下,最后发现,要刷新图片就要传不同的参数才行

JS:

        var aaa = 0;
        Ext.onReady(function () {
            var changingImage = Ext.create('Ext.Img', {
                //src: 'GetImgValidateCode',
                renderTo: Ext.getBody()
            }); 
            // change the src of the image programmatically
            function reload() {
                aaa++; 
                changingImage.setSrc('GetImgValidateCode?name=' + aaa);
            }
            Ext.create('Ext.Button', {
                text: 'Click me',
                renderTo: 'button1',
                handler: function () { 
                    reload(); 
                }
            });
        });

Controllers:

        [HttpGet]
        public void GetImgValidateCode(string name)
        {
            string VCodeString = GetVCode(4);
            //ConfigurationManager.AppSettings["code"] = VCodeString; 
            Session["code"] = VCodeString;
            Font VCodeFont = new Font("Arial", 14, FontStyle.Bold);
            SolidBrush VCodeBrush = new SolidBrush(Color.SandyBrown);
            Pen LinePen = new Pen(Color.Ivory, 1);
            string strPath = "c:\\a.png";
            Bitmap Tmap = new Bitmap(strPath);
            MemoryStream ImageMemoryStream = new MemoryStream();
            Graphics TGrphics;
            TGrphics = Graphics.FromImage(Tmap);
            TGrphics.Clear(BackGroundColor(200, 50));
            //产生干扰线 
            for (int i = 1; i <= 6; i++)
            {
                int TmpPosition = i * 4;
                Color LineColor = BackGroundColor(100, 155);
                LinePen.Color = LineColor;
                TGrphics.DrawLine(LinePen, 0, TmpPosition, VCodeString.Length * 19, 0);
                LineColor = BackGroundColor(100, 155);
                LinePen.Color = LineColor;
                TGrphics.DrawLine(LinePen, 0, 24, VCodeString.Length * 19, TmpPosition);
            }
            //产生干扰线 
            TGrphics.DrawString(VCodeString, VCodeFont, VCodeBrush, VCodeString.Length, 1);
            Tmap.Save(ImageMemoryStream, System.Drawing.Imaging.ImageFormat.Png); 
            Tmap.Dispose();
            TGrphics.Dispose();
            this.Response.ClearContent();
            this.Response.ContentType = "images/Png";
            this.Response.BinaryWrite(ImageMemoryStream.ToArray()); 
        }
        ///  <summary> 
        /// 随机返回颜色 
        ///  </summary> 
        ///  <param name="BeginRandomNumber">指定颜色开始的最小值 </param> 
        ///  <param name="RandomNumber">指定颜色值波动的范围 </param> 
        ///  <returns>随机的Color </returns> 
        private Color BackGroundColor(int BeginRandomNumber, int RandomNumber)
        {
            int ColorR = 0;
            int ColorG = 0;
            int ColorB = 0;
            Random TRandom = new Random();
            ColorR = BeginRandomNumber + TRandom.Next(RandomNumber);
            ColorG = BeginRandomNumber + TRandom.Next(RandomNumber);
            ColorB = BeginRandomNumber + TRandom.Next(RandomNumber);
            Color ColorBG = Color.FromArgb(ColorR, ColorG, ColorB);
            return ColorBG;
        }
        #region 随机产生字符串
        ///  <summary> 
        /// 随机产生字符串 
        ///  </summary> 
        ///  <param name="VCodeLength">要产生的随机字符串长度 </param> 
        ///  <returns> </returns> 
        public string GetVCode(int VCodeLength)
        {
            if (VCodeLength <= 0)
            {
                return "";
            }
            string VCodeString = "0,1,2,3,4,5,6,7,8,9,a,b,c,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
            string[] VCodeStringArray = VCodeString.Split(',');
            string ReturnValue = "";
            int RandomNumber = 0;
            Random TRandom = new Random();
            for (int i = 1; i <= VCodeLength; i++)
            {
                RandomNumber = TRandom.Next(VCodeStringArray.Length);
                ReturnValue += VCodeStringArray[RandomNumber];
            }
            return ReturnValue;
        }
        #endregion



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值