天天看點

Silverlight圖檔驗證碼生成代碼

在Silverlight的登入頁面中經常用到輸入驗證碼,怎麼生成的呢,其實和.NET生成差不多,以下簡單介紹一種:

1、在Silverlight項目下建立一個類IndentifyCodeClass.cs檔案

    1)、首先注意添加引用 using System.Windows.Media.Imaging;

    2)、添加一個用來産生驗證碼的方法

        public string CreateIndentifyCode

(int count)

        {

            string allchar = "1,2,3,4,5,6,7,8,9,0,A,a,B,b,C,c,D,d,E,e,F,f," +

                "G,g,H,h,I,i,J,j,K,k,L,l,M,m,N,n,O,o,P,p,Q,q,R,r,S,s," +

                "T,t,U,u,V,v,W,w,X,x,Y,y,Z,z";

            string[] allchararray = allchar.Split(',');

            string randomcode = "";

            int temp = -1;

            Random rand = new Random();

            for (int i = 0; i < count; i++)

            {

                if (temp != -1)

                {

                    rand = new Random(i * temp * ((int)DateTime.Now.Ticks));

                }

                int t = rand.Next(61);

                if (temp == t)

                    return CreateIndentifyCode(count);

                temp = t;

                randomcode += allchararray[t];

            }

            return randomcode;

        }

    3)、添加一個方法,用來産生驗證碼的背景噪聲圖檔

        Random r = new Random(DateTime.Now.Millisecond);

        public void CreatImage

(string Text, Image imgsource, int iw, int ih)

            Grid Gx = new Grid();

            Canvas cv1 = new Canvas();

            for (int i = 0; i < 6; i++)

                Polyline p = new Polyline();

                for (int ix = 0; ix < r.Next(3, 6); ix++)

                    p.Points.Add(new Point(r.NextDouble() * iw,

                        r.NextDouble() * ih));

                byte[] Buffer = new byte[3];

                r.NextBytes(Buffer);

                SolidColorBrush SC = new SolidColorBrush(Color.FromArgb(255,

                    Buffer[0], Buffer[1], Buffer[2]));

                p.Stroke = SC;

                p.StrokeThickness = 0.5;

                cv1.Children.Add(p);

            Canvas cv2 = new Canvas();

            int y = 0;

            int lw = 6;

            double w = (iw - lw) / Text.Length;

            int h = (int)ih;

            foreach (char x in Text)

                TextBlock t = new TextBlock();

                t.TextAlignment = TextAlignment.Center;

                t.FontSize = r.Next(h - 3, h);

                t.Foreground = SC;

                t.Text = x.ToString();

                t.Projection = new PlaneProjection()

                    RotationX = r.Next(-30, 30),

                    RotationY = r.Next(-30, 30),

                    RotationZ = r.Next(-10, 10)

                };

                cv2.Children.Add(t);

                Canvas.SetLeft(t, lw / 2 + y * w);

                Canvas.SetTop(t, 0);

                y++;

            Gx.Children.Add(cv1);

            Gx.Children.Add(cv2);

            WriteableBitmap W = new WriteableBitmap(Gx, new TransformGroup());

            W.Render(Gx, new TransformGroup());

            imgsource.Source = W;

2、在登入頁面的UserControl_Loaded事件中添加如下代碼即可:

      IndentifyCodeClass code = new IndentifyCodeClass();

      string generatedCode =  code.CreateIndentifyCode(6);

      code.CreatImage(generatedCode , CheckCodeImage, 150, 30);

3、擷取使用者在文本框中輸入的驗證碼,然後和産生的驗證碼進行比較驗證。

   ....

     string indentifyCode = this.tbIndentifyCode.Text.trim();

     if(generatedCode !=indentifyCode)

     {

          MessageBox.Show("驗證碼輸入錯誤!");

          this.tbIndentifyCode.Focus(); //輸入焦點聚焦

     }

4、實作驗證效果,just try it!

繼續閱讀