急啊!!网页登陆的附加码问题!!! 请问很多网站的登陆页面都要用户提供附加码,附加码程序的原理是什么啊?怎么可以实现呢?哪位大哥有现成的程序提供啊???谢谢!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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 ; }登录.csprivate 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> /// <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()); } } 生成 N 位随机整数只需要两句:Int32 L=Convert.ToInt32(Math.Pow(10,N-1));result=(new System.Random()).Next(L,10*L-1); 如果是vb,那么只需要一句:result=(new system.random).next(10^(n-1),10^n-1) 我的页面为何执行2次啊,求高手解读很着急,快崩溃了! 各位,给我一个实例帮助我理解:CommandEventArgs和 EventArgs有什么区别??? 【提问】非哥。今天看你挺忙。有一个问题 求最优算法,截取url字段问题 关于asp.net附带软件的收费问题 在hashtable中如何根据value读出key啊? 挺难的javascript问题 强力推荐:一个免费的在线文本编辑器 一个简单问题 这个坛子里的N多人都只顾提问,不注意思考,菜鸟问题太多了,郁闷!!顺便散分 望各位同仁帮我解决个问题 动态修改后的保存问题
{
// 在此处放置用户代码以初始化页面
//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>
/// 图片验证码,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());
}
}
result=(new System.Random()).Next(L,10*L-1);