我们先来看两张图片,相信大家一定不陌生:
第一张:
这张是12306 预定车票的登录界面,在输入用户名和密码后,还有输入正确的验证码才能够登录到预定车票界面!
第二张:
这一张是小米用户的注册的界面,在申请账户时,要输入正确的验证码才能够注册成功.
这样验证码每一次出来都是不一样的,感觉挺好玩的,那么我们就已C#语言为例子,来看看这么验证码的真实面目:
第一步:建立一般处理程序:
第二步:在一般处理程序中写入随机验证的代码:
引用的命名空间:
using System;
using System.Web;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Web.SessionState;
随机生成的验证码:
public void ProcessRequest(HttpContext context)
{
string checkCode = GenCode(5); // 产生5位随机字符
context.Session["Code"] = checkCode; //将字符串保存到Session中,以便需要时进行验证
System.Drawing.Bitmap image = new System.Drawing.Bitmap(70, 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);
context.Response.ClearContent();
context.Response.ContentType = "image/Gif";
context.Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}
/// <summary>
/// 产生随机字符串
/// </summary>
/// <param name="num">随机出几个字符</param>
/// <returns>随机出的字符串</returns>
private string GenCode(int num)
{
string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char[] chastr = str.ToCharArray();
string code = "";
Random rd = new Random();
int i;
for (i = 0; i < num; i++)
{
code += str.Substring(rd.Next(0, str.Length), 1);
}
return code;
}
HTML:使用验证码的时候使用了javascript控件,进行脚本的隐藏.还有了验证控件验证输入的验证码是否正确!
<script language ="javascript" " type="text/javascript">
<!--点击图片更换验证码-->
function changeCode() { var imgNode = document.getElementById("vimg"); imgNode.src
= "../handler/watermark.ashx?t=" + (new Date()).valueOf(); // 这里加个时间的参数是为了防止浏览器缓存的问题
} </script>
验证码:
<img src="../handler/watermark.ashx" id="vimg" alt="" />
<!--添加毛记-->
<asp:TextBox ID="txtcode" runat="server" CssClass="textcode"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ErrorMessage="请输入验证码"
Text="*" ControlToValidate="txtcode"></asp:RequiredFieldValidator>
代码:获取输入的验证码和存放在缓存文件Sssion中的随机验证码,用两个来比较,如果是一样的,那么验证码输入成功.
//判断验证码是否输入正确
string code = txtcode.Text.Trim().ToUpper();
string rightCode = Session["Code"].ToString();