谢谢啊!
解决方案 »
- 用vsstudio调试时载入javascript的问题
- VS2008创建控件时出错,新建网站提示失败,这是什么原因
- 请大家推荐有几个好的工作流引擎?
- 请教,提交表单后有些字符出现乱码
- 请问各位:在asp.net中如何实现视频技术
- RadioButtonList无法执行SelectIndexChaged事件的问题,很是想不通,高手指教、。
- 在datagrid中定义了一个下拉列表的模板列,我用DataSource='<%# DataBinder.Eval(Container.DataItem,"列名") %>绑定,可下拉列表中的值
- 为什么在页面刷新的时候,css样式,也就消失了!
- 未找到 Oracle 客户端和网络组件?
- 关于asp.net从数据库中提取图片的问题?
- ASP.NET做的校园网站,谁有?急求!急求!
- 我在上传图片的时候,通过构造一组DIV来显示每一个图片,删除图片,就删除相应DIV,我通过查询Request.Form发现这几个图片的记录都在呀,怎么处理
假设你显示验证码的是label,用户输入的是text//公共字节
string a;
bool pass = false;//类1
...
random r = new random();
a = r.next(1000,9999) + "";label.text = a;
...
//类2
...
if ( text1.text == a ) { pass = true; }if ( pass )
{
//你懂的
}
...
{
CreateCheckCodeImage(GenCode(4));
}
/**/
/// <summary>
/// '产生随机字符串
/// </summary>
/// <param name="num">随机出几个字符</param>
/// <returns>随机出的字符串</returns>
private string GenCode(int num)
{
//string str = "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严";
//char[] chastr = str.ToCharArray();
string[] source ={ "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", "V", "W", "X", "Y", "Z", "#", "$", "%", "&", "@" };
string code = "";
Random rd = new Random();
int i;
for (i = 0; i < num; i++)
{
code += source[rd.Next(0, source.Length)];
//code += str.Substring(rd.Next(0, str.Length), 1);
}
return code; } /**/
/// <summary>
/// 生成图片(增加背景噪音线、前景噪音点)
/// </summary>
/// <param name="checkCode">随机出字符串</param>
private void CreateCheckCodeImage(string checkCode)
{
if (checkCode.Trim() == "" || checkCode == null)
return;
//Session["CheckCode"] = checkCode; //将字符串保存到Session中,以便需要时进行验证
Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));
System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)(checkCode.Length * 15), 22);
Graphics g = Graphics.FromImage(image);
try
{
//生成随机生成器
Random random = new Random(); //清空图片背景色
g.Clear(Color.White); // 画图片的背景噪音线
int i;
for (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 System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold));
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, true);
g.DrawString(checkCode, font, brush, 2, 2); //画图片的前景噪音点
g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType = "image/Gif";
Response.BinaryWrite(ms.ToArray()); }
catch
{
g.Dispose();
image.Dispose();
} }
function checkcode()
{
var randomnum=Math.random();
var getimagecode=document.getElementById( "ImgCheckcode");
getimagecode.src= "image.aspx? "+randomnum;
}
<img id="ImgCheckcode" alt="" src="image.aspx" /> <span><a href="javascript:checkcode()"
style="font-size: 12px; color: Green">看不清</a></span>
这应该够你用吧?验证码还有js版的 直接百度吧 很多的
新建一个专门用来创建验证码图片的页面ValidateCode.aspx
它的后台cs文件代码如下:
PageLoadprivate void Page_Load(object sender, System.EventArgs e)
{
string checkCode = CreateRandomCode(4);
Session["CheckCode"] = checkCode;
CreateImage(checkCode);
}
其中CreateRandomCode是自定义的函数,参数代表验证码位数private string CreateRandomCode(int codeCount)
{
string allChar = "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[] allCharArray = allChar.Split(',');
string randomCode = "";
int temp = -1; Random rand = new Random();
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;
}
CreateImage也是一个自定义的函数,用于生成图private void CreateImage(string checkCode)
{
int iwidth = (int)(checkCode.Length * 11.5);
System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 20);
Graphics g = Graphics.FromImage(image);
Font f = new System.Drawing.Font("Arial", 10, System.Drawing.FontStyle.Bold);
Brush b = new System.Drawing.SolidBrush(Color.White);
//g.FillRectangle(new System.Drawing.SolidBrush(Color.Blue),0,0,image.Width, image.Height);
g.Clear(Color.Blue);
g.DrawString(checkCode, f, b, 3, 3); Pen blackPen = new Pen(Color.Black, 0);
Random rand = new Random();
for (int i=0;i<5;i++)
{
int y = rand.Next(image.Height);
g.DrawLine(blackPen,0,y,image.Width,y);
}
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
Response.ClearContent();
Response.ContentType = "image/Jpeg";
Response.BinaryWrite(ms.ToArray());
g.Dispose();
image.Dispose();
}
//g.FillRectangle(new System.Drawing.SolidBrush(Color.Blue),0,0,image.Width, image.Height);
g.Clear(Color.Blue);
这两种方法都可以改变生成图片的背景颜色
下面那个for循环用来生成一些随机的水平线在需要用到验证码的页面添加一个<asp:Image>控件即可,但是要把ImageUrl指向生成验证码的页面 <asp:Image Runat="server" ID="ImageCheck" ImageUrl="ValidateCode.aspx"></asp:Image>