请问很多网站的登陆页面都要用户提供附加码,附加码程序的原理是什么啊?怎么可以实现呢?
哪位大哥有现成的程序提供啊???谢谢!!

解决方案 »

  1.   

    gif.csprivate void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    //RndNum是一个自定义函数
    string VNum=RndNum(4); //这里的数字4代表显示的是4位的验证字符串!
    Session["VNum"]=VNum;
    ValidateCode(VNum);
    }
    //生成图像函数
    private void ValidateCode(string VNum) 
    {
    int Gheight=(int)(VNum.Length * 11.5);
    //gheight为图片宽度,根据字符长度自动更改图片宽度
    System.Drawing.Bitmap Img = new System.Drawing.Bitmap(Gheight,20);
    Graphics g = Graphics.FromImage(Img);
    g.DrawString(VNum,new System.Drawing.Font("Arial",13),new System.Drawing.SolidBrush(Color.Blue),3,3); 
    //在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y) 
    System.IO.MemoryStream ms=new System.IO.MemoryStream();
    Img.Save(ms,System.Drawing.Imaging.ImageFormat.Png); 
    Response.ClearContent(); //需要输出图象信息 要修改HTTP头 
    Response.ContentType="image/Png";
    Response.BinaryWrite(ms.ToArray());
    g.Dispose();
    Img.Dispose(); 
    Response.End();
    } //生成随机数函数中从Vchar数组中随机抽取
    //字母区分大小写
    public string RndNum(int VcodeNum) 
    {
    // string Vchar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z" ;
    string Vchar = "0,1,2,3,4,5,6,7,8,9" ;
    string[] VcArray = Vchar.Split(',') ;
    string  VNum = "" ;//由于字符串很短,就不用StringBuilder了
    int temp = -1 ;//记录上次随机数值,尽量避免生产几个一样的随机数 //采用一个简单的算法以保证生成随机数的不同
    Random rand =new Random();
    for ( int i = 1 ; i < VcodeNum+1 ; i++ ) 
    {    
    if ( temp != -1) 
    {
    rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));
    }    
    //int t =  rand.Next(35) ;
    int t=rand.Next(10);
    if (temp != -1 && temp == t) 
    {
    return RndNum( VcodeNum );
    }
    temp = t  ;
    VNum += VcArray[t]; }
    return VNum ;
    }
    登录.cs
    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    if(!Page.IsPostBack)
    {
    Session.Clear();
    }

    }
    private void login_Click(object sender, System.EventArgs e)
    {
    if(Page.IsValid)
    {
    string VNum;
    VNum=Session["VNum"].ToString();        
    ViewState["VNum"]=VNum;
    if(jy.Text==ViewState["VNum"].ToString())

    SqlConnection conn=new SqlConnection(publicDB.strConn);
    SqlCommand cmd=new SqlCommand();
    cmd.CommandType=CommandType.StoredProcedure;
    cmd.CommandText="eadmin_select"; cmd.Parameters.Add("@admin_name",SqlDbType.NVarChar,40);
    cmd.Parameters.Add("@admin_pwd",SqlDbType.NVarChar,40);
    cmd.Parameters.Add("@ip",SqlDbType.NVarChar,15); cmd.Parameters["@admin_name"].Value=aid.Text.Trim();
    cmd.Parameters["@admin_pwd"].Value=pwd.Text.Trim();
    cmd.Parameters["@ip"].Value=Request.UserHostAddress.ToString();
    try
    {
    conn.Open();
    cmd.Connection=conn;
    int suee=Convert.ToInt32(cmd.ExecuteScalar());
    if(suee>0)
    {
    Session["admin"] =aid.Text.Trim();
    Response.Redirect("index.aspx");
    }
    else
    {
    Response.Write("<script language=javascript>alert('用户名或者密码不对!')</script>");
    clearBox();
    return;
    }
    }
    catch(Exception ex)
    {
    throw(ex);
    }
    }
    else
    {
    Response.Write("<script>alert(\"附加码不对!\");</script>");
    clearBox(); }
    }

    }登录.aspx
    <asp:image id="img1" Runat="server" Height="20" ImageUrl="gif.aspx"></asp:image>
      

  2.   

    /// <summary>
    /// 图片验证码,ZYL 2005-4-16
    /// </summary>
    public class ValidateCode : System.Web.UI.Page
    {
    private Random rand = new Random();
    protected override void OnInit(EventArgs e)
    {
    base.OnInit(e);
    this.Load += new System.EventHandler(this.Page_Load);
    } private void Page_Load(object sender, System.EventArgs e)
    {
    string checkCode = CreateRandomCode(4);//4个字符
    Session["CheckCode"] = checkCode;//设Session,用于比较输入是否正确
    CreateImage(checkCode);//产生图片。
    } /// <summary>
    /// 产生随机字符
    /// </summary>
    /// <param name="codeCount">产生的字符个数</param>
    /// <returns>结果字符串</returns>
    private string CreateRandomCode(int codeCount)
    {
    string allChar = "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,0,1,2,3,4,5,6,7,8,9" ;
    string[] allCharArray = allChar.Split(',');
    string randomCode = "";
    int temp = -1;
    for(int i = 0; i < codeCount; i++)
    {
    if(temp != -1)
    {
    rand = new Random(i*temp*((int)DateTime.Now.Ticks));
    }
    int t = rand.Next(35);
    if(temp == t)
    {
    return CreateRandomCode(codeCount);
    }
    temp = t;
    randomCode += allCharArray[t];
    }
    return randomCode;
    } private void TransformG(Graphics g)
    {
    Matrix myMatrix = new Matrix();
    int num1=rand.Next(80,900);
    int num2=rand.Next(80,800);
    float dd1=(float)num1;
    float dd2=(float)num2;
    dd1=dd1/10000;
    dd2=dd2/10000;
    float f1 = (float)(dd1);
    float f2 = (float)(dd2);
    myMatrix.Shear(f1,f2);
    g.MultiplyTransform(myMatrix);
    } private void CreateImage(string checkCode)
    {
    int iwidth = (int)(checkCode.Length * 8);
    System.Drawing.Bitmap image = new System.Drawing.Bitmap(60, 24);
    Graphics g = Graphics.FromImage(image);
    g.SmoothingMode=SmoothingMode.HighQuality;
    Font f = new System.Drawing.Font("Arial", 12, System.Drawing.FontStyle.Regular);
    Brush b = new System.Drawing.SolidBrush(Color.LightSlateGray);
    Rectangle rect = new Rectangle(0, 0, 60, 24);
    HatchBrush hatchBrush = new HatchBrush(
    HatchStyle.SmallConfetti,
    Color.LightGray,
    Color.White);
    g.FillRectangle(hatchBrush, rect); SizeF size;
    float CPostion=1;
    for(int i=0;i<checkCode.Length;i++)
    {
    TransformG(g);
    size = g.MeasureString(checkCode[i].ToString(), f);
    g.DrawString(checkCode[i].ToString(),f, b, CPostion, 5);
    CPostion+=size.Width-1;
    g.ResetTransform();
    } System.IO.MemoryStream ms = new System.IO.MemoryStream();
    image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
    g.Dispose();
    image.Dispose();
    this.Response.ClearContent();
    this.Response.ContentType = "image/Jpeg";
    this.Response.BinaryWrite(ms.ToArray());
    }
    }
      

  3.   

    生成 N 位随机整数只需要两句:Int32 L=Convert.ToInt32(Math.Pow(10,N-1));
    result=(new System.Random()).Next(L,10*L-1);
      

  4.   

    如果是vb,那么只需要一句:result=(new system.random).next(10^(n-1),10^n-1)