验证码的使用
前台:
<div class="textcontent">
验证码:
<asp:TextBox ID="validateNumber" runat="server"></asp:TextBox>
</div>
<div class="textcontent">
<asp:ImageButton ID="ValidateButton" runat="server" Width="61" Height="21" />看不清?
<a href="javascript:changeCode()" style="text-decoration: underline;">换一张</a>
</div>
前台js:
function changeCode() {
document.getElementById('ValidateButton').src = document.getElementById('ValidateButton').src + '?';
}
后台:
ValidateButton.ImageUrl = "ValidatePage.aspx";
后台提交:
if (!Session["code"].ToString().Trim().Equals(validateNumber.Text.Trim()))
{
ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", "<script>$('#validateNumber').after('验证码错误')</script>");
}
新建ValidatePage.aspx:
前台不动
后台:
protected void Page_Load(object sender, EventArgs e)
{
string validateCode = CreateValidateCode();//生成验证码
Bitmap bitmap = new Bitmap(imgWidth, imgHeight);//生成Bitmap图像
DisturbBitmap(bitmap); //图像背景
DrewValidateCode(bitmap, validateCode);//绘制验证码图像
bitmap.Save(Response.OutputStream, ImageFormat.Gif);//保存图像,等待输出
}
private int codeLen = 4;//验证码长度
private int fineness = 85;//图片清晰度
private int imgWidth = 48;//图片宽度
private int imgHeight = 24;//图片高度
private string fontFamily = "Times New Roman";//字体名称
private int fontSize = 14;//字体大小
private int fontStyle = 0;//字体样式
private int posX = 0;//绘制起始坐标X
private int posY = 0;//绘制坐标Y
private string CreateValidateCode() //生成验证码
{
string validateCode = "";
Random random = new Random();// 随机数对象
for (int i = 0; i < codeLen; i++)//循环生成每位数值
{
int n = random.Next(10);//数字
validateCode += n.ToString();
}
Session["code"] = validateCode;//保存验证码
return validateCode;// 返回验证码 }
private void DisturbBitmap(Bitmap bitmap)//图像背景
{
Random random = new Random();//通过随机数生成
for (int i = 0; i < bitmap.Width; i++)//通过循环嵌套,逐个像素点生成
{
for (int j = 0; j < bitmap.Height; j++)
{
if (random.Next(90) <= this.fineness)
bitmap.SetPixel(i, j, Color.LightGray);
}
}
}
private void DrewValidateCode(Bitmap bitmap, string validateCode)//绘制验证码图像
{
Graphics g = Graphics.FromImage(bitmap);//获取绘制器对象
Font font = new Font(fontFamily, fontSize, FontStyle.Bold);//设置绘制字体
g.DrawString(validateCode, font, Brushes.Black, posX, posY);//绘制验证码图像
}
}