asp.net中验证码的实现
using System.Collections.Generic;
using System.Text;
using System.Drawing;
namespace Sooyie.Common
{
/// <summary>
/// 产生随即图片
/// </summary>
public sealed class RandImage
{
private const string RandCharString = "0123456789";
private int width;
private int height;
private int length;
/// <summary>
/// 默认构造函数,生成的图片宽度为48×24,随即字符串字符个数
/// </summary>
public RandImage():this(48,24,4)
{
}
/// <summary>
/// 指定生成图片的宽和高,默认生成图片的字符串长度为4个字符
/// </summary>
/// <param name="width"></param>
/// <param name="height"></param>
public RandImage(int width, int height):this(width,height,4)
{
}
/// <summary>
/// 指定生成图片的宽和高以及生成图片的字符串字符个数
/// </summary>
/// <param name="width"></param>
/// <param name="height"></param>
/// <param name="length"></param>
public RandImage(int width, int height, int length)
{
this.width = width;
this.height = height;
this.length = length;
}
/// <summary>
/// 以默认的大小和默认的字符个数产生图片
/// </summary>
/// <returns></returns>
public Image GetImage()
{
Bitmap p_w_picpath = new Bitmap(width, height);
Graphics g = Graphics.FromImage(p_w_picpath);
g.Clear(Color.White);
string randString = "";
Random random=new Random();
do
{
randString += RandCharString.Substring(random.Next(DateTime.Now.Millisecond)%RandCharString.Length, 1);
}
while (randString.Length < 4);
float emSize=(float)width/randString.Length;
Font font = new Font("Arial", emSize, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
Pen pen = new Pen(Color.Silver);
#region 画图片的背景噪音线
int x1,y1,x2,y2;
for (int i = 0; i < 25; i++)
{
x1 = random.Next(p_w_picpath.Width);
y1 = random.Next(p_w_picpath.Height);
x2 = random.Next(p_w_picpath.Width);
y2 = random.Next(p_w_picpath.Height);
g.DrawLine(pen, x1, y1, x2, y2);
}
#endregion
#region 画图片的前景噪音点
for (int i = 0; i < 100; i++)
{
x1 = random.Next(p_w_picpath.Width);
y1 = random.Next(p_w_picpath.Height);
p_w_picpath.SetPixel(x1, y1, Color.FromArgb(random.Next(Int32.MaxValue)));
}
#endregion
g.DrawString(randString, font, Brushes.Red, 2, 2);
g.Dispose();
return p_w_picpath;
}
}
}
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
using Sooyie.Common;
public partial class CheckImage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
RandImage randImage=new RandImage();
System.Drawing.Image p_w_picpath = randImage.GetImage();
System.IO.MemoryStream memoryStream = new MemoryStream();
p_w_picpath.Save(memoryStream, ImageFormat.Jpeg);
Response.ClearContent();
Response.ContentType = "p_w_picpath/gif";
Response.BinaryWrite(memoryStream.ToArray());
p_w_picpath.Dispose();
Response.End();
}
}
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>后台管理用户登录</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table border="0" cellpadding="0" cellspacing="0" width="480">
<tr>
<td colspan="2" align="center">
公文管理系统后台登陆</td>
</tr>
<tr>
<td style="width: 83px">
用户名</td><td>
<asp:TextBox ID="txtUserName" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtUserName"
ErrorMessage="用户名"></asp:RequiredFieldValidator></td>
</tr>
<tr>
<td style="height: 19px; width: 83px;">
密码</td><td>
<asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="txtPassword"
ErrorMessage="密码"></asp:RequiredFieldValidator></td>
</tr>
<tr>
<td style="height: 19px; width: 83px;">
校验码</td><td>
<asp:TextBox ID="txtCheckCode" runat="server"></asp:TextBox><img src="CheckImage.aspx" alt="校验码" />
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="txtCheckCode"
ErrorMessage="校验码必填"></asp:RequiredFieldValidator></td>
</tr>
<tr>
<td style="width: 83px">
<asp:Button ID="btnLogin" runat="server" Text="登陆" OnClick="btnLogin_Click" /></td><td style="width: 9px">
<input id="Reset1" type="reset" value="清除" /></td>
</tr>
</table>
</div>
<asp:Literal ID="lStatus" runat="server" Visible="False"></asp:Literal>
</form>
</body>
</html>
转载于:https://blog.51cto.com/zhoufoxcn/166995
asp.net中验证码的实现相关推荐
- ASP.NET中Image控件不能自动刷新
问题描述:无论是本地VS 调试环境还是IIS 测试环境,验证码都可以随机显示,问题是部署到客户的空间上时,验证码点击看不清楚,需要重新刷新的时候,图片验证码依旧是原来的那张,用ashx 的方式跟直接通 ...
- ASP生成BMP验证码图片
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <% '''''''''''''''''''''''''' ...
- asp.net ajax怎样传值,JQuery在asp.net中三种ajax传值
1)通过webservice,注意去掉注释[System.Web.Script.Services.ScriptService]这行前的注释 2)通过aspx.cs文件中的静态方法 3)通过aspx文件 ...
- 关于ASP.NET中的session
文章来源:http://www.cnblogs.com/yinrq/p/5032493.html 此处仅做保存备份之用,如若侵权,请告知删除. 一.概述 Session用于存储特定的用户会话所需的信息 ...
- ASP.NET中 RequiredFieldValidator(非空验证)的使用
ylbtech-ASP.NET-Control-Validator: RequiredFieldValidator(非空验证)的使用 ASP.NET中 RequiredFieldValidator(非 ...
- 搜集《ASP.NET中常用的26个优化性能方法》
1. 数据库访问性能优化 a.数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接 ...
- 在ASP.NET中跟踪和恢复大文件下载
在Web应用程序中处理大文件下载的问题一直出了名的困难,因此对于大多数站点来说,如果用户的下载被中断了,它们只能说悲哀降临到用户的身上了.但是我们现在不必这样了,因为你可以使自己的ASP.NET应用程 ...
- ASP.NET中使用MD5和SHA1算法加密
你的主页或者你管理的网站有各种密码需要保护,把密码直接放在数据库或者文件中存在不少安全隐患,所以密码加密后存储是最常见的做法.在ASP.NET中实现加密非常容易..NET SDK中提供了CookieA ...
- ASP.NET中如何防范SQL注入式攻击
1将sql中使用的一些特殊符号,如' -- /* ; %等用Replace()过滤: 2限制文本框输入字符的长度: 3检查用户输入的合法性:客户端与服务器端都要执行,可以使用正则. 4使用带参数的SQ ...
最新文章
- [C] 层层递进——C语言实现广度优先搜索
- 响应式Spring Cloud初探
- 删除链表重复节点 python_java删除链表中重复的节点(保留一个节点)
- 组件化实践详解(二)
- 你聚类个数是靠拍的?
- jsp文件的请求是如何被服务器的JSP容器转换成静态网页的
- java流换行符方法_java换行符的使用方法
- java 从控制台读取_转载 java从控制台读取输入的方法
- ActiveMQ使用spring JmsTemplate发送消息(一)
- 01.轮播图之四 :imageViews(2 或者 3 个imageview) 轮播
- 删除mysql临时文件_mysql自动备份数据库与自动删除临时文件
- ipoo3可以用鸿蒙,vivo新机入网!支持44W快充 配置与iQOO Neo3类似
- 图像数据流识别圆形_python opencv :使用Hough变换检测圆形,数钱。
- 拓端tecdat|数据视域下图书馆话题情感分析
- 【数字基带信号】基于matlab三阶高密度双极型码【含Matlab源码 990期】
- 小任务:简单实现银行业务系统(附 ideal编辑器固定序列化版本方法)
- 内存卡linux系统格式化,SD卡无法格式化怎么办的解决方法
- 输入中文错误:\xE4\xBB\x8E\xE5\x85\xA5...‘ for column ‘detail‘ at row 1
- OSChina 新年乱弹 ——爱你们,新年快乐
- 2023江苏大学计算机考研信息汇总