Click(Link,My Playing Station)

验证码控件

Posted on 2007-07-06 14:11  倒骑驴的人生  阅读(313)  评论(0)    收藏  举报

源码下载

 

 

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.IO;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Collections;



namespace rsfcValidataNumber
{
    
    [DefaultProperty("Text"),
        ToolboxData(
"<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")]
    
public class WebCustomControl1 : System.Web.UI.WebControls.WebControl
    {
        
private string text;

        [Bindable(
true),
            Category(
"Appearance"),
            DefaultValue(
"")]
        
public string Text
        {
            
get
            {
                
return text;
            }

            
set
            {
                text 
= value;
            }
        }

        
        protected override void Render(HtmlTextWriter output)
        {
          

            
if(cont=="number")
            {

                CreateValidateGraphic(objpage,CreateValidateNumber(number));
            }
            
else if (cont=="char")
            {
                CreateValidateGraphic(objpage,RandomChar(number));
            }
            
else if(cont=="+")
            {


                CreateValidateGraphic(objpage,CreateValidateNumber(number)
+RandomChar(number));
            }
            
        }

        
public Page objpage;
        
public int number;
        
public string cont;

       
        public virtual  int  VNumber
        {
            
set{number=value;}
        }

        
public virtual  Page Obj
        {
            
set{objpage=value;}
        }
        
public virtual string Control
        {
            
set{cont=value;}
        }
        
        


        
public string RandomChar(int TheStringNumber)
        {
            
string rachar="";
            Random rd
=new Random(); 
            ArrayList strA 
= new ArrayList(); 
            
for (int i = 0; i < TheStringNumber; i++
            { 
                
char ch; 
                ch
=(char)(Math.Ceiling(rd.NextDouble() * 26)+64); 
                strA.Add(ch); 
            } 
            
for (int i = 0; i < TheStringNumber; i++
                rachar
=rachar+strA[i].ToString(); 
            
return rachar;
        }
      
        public string CreateValidateNumber(int length)
        {
            
int[] randMembers=new int[length];
            
int[] validateNums=new int[length];
            
string validateNumberStr="";
           
            int seekSeek=unchecked((int)DateTime.Now.Ticks);
            Random seekRand
=new Random(seekSeek);
            
int beginSeek=(int)seekRand.Next(0,Int32.MaxValue-length*10000);
            
int[] seeks=new int[length];
            
for(int i=0;i<length;i++)
            {
                beginSeek
+=10000;
                seeks[i]
=beginSeek;
            }
         

            for(int i=0;i<length;i++)
            {
                Random rand
=new Random(seeks[i]);
                
int pownum=1*(int)Math.Pow(10,length);
                randMembers[i]
=rand.Next(pownum,Int32.MaxValue);
            }
            

            for(int i=0;i<length;i++)
            {
                
string numStr=randMembers[i].ToString();
                
int numLength=numStr.Length;
                Random rand
=new Random();
                
int numPosition=rand.Next(0,numLength-1);
                validateNums[i]
=Int32.Parse(numStr.Substring(numPosition,1));
            }
          

            for(int i=0;i<length;i++)
            {
                validateNumberStr
+=validateNums[i].ToString();
            }
            
return validateNumberStr;
        }
      
        public void CreateValidateGraphic(Page containsPage,string validateNum)
        {
            
            Bitmap image
=new Bitmap((int)Math.Ceiling(validateNum.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 Font("Arial",12,(FontStyle.Bold|FontStyle.Italic));
                LinearGradientBrush brush
=new LinearGradientBrush(new Rectangle(0,0,image.Width,image.Height),
                    Color.Blue,Color.DarkRed,
1.2f,true);
                g.DrawString(validateNum,font,brush,
3,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 stream=new MemoryStream();
                image.Save(stream,ImageFormat.Jpeg);
                

                containsPage.Response.Clear();
                containsPage.Response.ContentType
="image/jpeg";
                containsPage.Response.BinaryWrite(stream.ToArray());
            }
            
finally
            {
                g.Dispose();
                image.Dispose();
            }
        }
    }
}

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3

Click(Link,My Playing Station)