您好,欢迎光临本网站![请登录][注册会员]  
文件名称: vcg(验证码控件)
  所属分类: C#
  开发工具:
  文件大小: 52kb
  下载次数: 0
  上传时间: 2007-06-27
  提 供 者: ikaif*****
 详细说明: 功能介绍:
  为网页编程人员提供能够自动生成验证码图像并验证网页访问者输入的Web控件,具体功能如下:
1. 提供简单易用的设计时所见即所得的可视化设置方式,并且支持设计时验证码图像效果与特效属性设置的实时联动体现,极大地提高程序员的工作效率;
2. 对验证码图像的包括残影、打散、风化、旋转、斜变等多种图形学图像处理特效以及对各种特效的三个程度等级的灵活控制能力,让程序员在轻松应对基于OCR的恶意识别攻击的情况下,还能有充分的余地考虑验证码图像外观的美化问题;
3. 提供灵活的中文诗词、中文单字、英文大小写字母、阿拉伯数字等丰富的验证码生成字源混合控制以及对于字数和字体的自定义控制,让程序员在面对不同客户以及网页访问者的特殊要求的同时仍能从容兼顾良好的用户体验;
4. 保留对抗OCR的经典的点、线干扰特效以及三个程度等级的灵活控制,并采用色调匹配技术在保证原有的OCR对抗效果的同时加入了更加美观的彩色点、线效果,留给程序员更多的选择;
5. 无刷新页面验证。更好地适用于需要填写大量信息的页面验证,有效地避免由于因突发性网络原因导致的 验证码图像的无法下载,而使网页用户必须刷新页面而重填其它信息的窘境。
运行环境:
1. Microsoft Windows XP Professional
2. Microsoft Visual Studio 2005
3. Microsoft .NET Framework V2.0
4. Microsoft Internet Information Services (IIS) V5.1(注意在子安装选项中选中FrontPage 2000服务器扩展)
常见问答:
1. 如何将本控件添加到Microsoft Visual Studio 2005的IDE中?
a) 在Microsoft Visual Studio 2005中打开源代码的工程文件,重新编译,生成vcg.dll;
b) 在工具箱(Toolbox)面板上单击右键,选择Choose Items…菜单,在弹出来的Choose ToolBox Items属性面板中,点击Browse…找到并选定vcg.dll控件。该控件即被添加到工具箱;
2. 如何使用本控件?
a) 确认需要添加本控件的网页为aspx页面。在IIS管理器中将网站属性的ASP.NET version选中为2.0,并在网站虚拟目录属性的“安全”选项卡中添加ASP.NET用户,赋予写入权限;
b) 在Microsoft Visual Studio 2005中打开相应的网站,并打开相应的aspx页面文件(在本文中以Default.aspx为例),进入Design编辑模式;
c) 从工具箱将之前添加的vcg控件拖到Default.aspx页面上。此时页面上的拖放位置应该出现一个带有文字内容的图片框,说明vcg控件已经被正确添加到页面;
d) 现在可以像修改其它标准控件一样通过鼠标对控件进行拖动、缩放等修改,还可以在属性栏对控件进行进一步的细节设置。主要包括针对验证码图像的特效控制和针对验证码本身的文字控制两个方面。具体内容请参考本控件的使用手册;
e) 在Default.aspx中新增Web控件Button:btnValidate,作为验证促发;在Default.aspx中新增Web控件TextBox:textCode,作为验证码输入;在Default.aspx中新增Web控件Lable:lblMessage,作为验证结果输出;
f) 在Default.aspx.cs中添加验证函数:
protected void btnValidate_Click(object sender, EventArgs e)
{
string code = “”;
try
{
//真正的验证码存储在Session[“Code”]中,需要的只是对验证码输入和该值进行比较。
//(如果属性栏中“文字控制”属性卡下的“SessionCode”默认属性值“Code”改变,
//则在代码中的Session[”Code”]中引号内的值也必须手工修改成与属性值一致的字符串。)
code = Session[”Code”].ToString();
}
catch (Exception ex)
{
throw new Exception(ex.ToString());
}
if (textCode.Text == code)
lblMessage.Text = “u got it.”;
else
lblMessage.Text = “u lost it.”;
}
g) 测试验证功能。浏览default.aspx页面,在TextBox中输入正确的码字,点击“验证”按钮。然后vcg控件返回新验证图,同时标签lblMessage给出成功的验证结果信息—“u got it.”;输入错误的验证码并点击“验证”按钮,标签lblMessage给出失败的验证结果—“u lost it.”。
3. 如何实现无刷新页面验证?
a) 在Source模式下的Default.aspx文件中添加html控件Button,作为刷新促发:

然后在Design模式下即可看见刷新按钮;
b) 在Default.aspx文件首部添加脚本:

由于控件继承自Image,在ShowImage()中使用document.images[’Vcg1’]来找到控件。
c) 在Default.aspx.cs中添加回调
protected string CallBack;
protected void Page_Load(object sender, EventArgs e)
{
CallBack = this.ClientScript.GetCallbackEventReference(Vcg1, “message”, “ShowImage”,
“context”, “OnError”, true);
}
d) 重新编译网站,浏览Default.aspx页面,点击Refresh按钮就可以单独刷新vcg控件的验证码图像,而不会刷新整个页面。
源码说明:
vcg工程源代码中大体上分为四部分:文字生成、图像处理、控制中心和UI。从源代码文件(实际上也对应于类)来看,文字生成部分对应iGbGen.cs;图像处理部分包括iPicGen.cs、iPicManage.cs以及Image_Manage.cs;控制中心对应iControlCenter.cs;UI包括iDesign.cs和vcg.cs。下面简要说明各个类的功能及关键代码。
1. iGbGen类:根据控制参数生成随机验证码串。
//解析控制参数
public string giveString(int[] control)
{
Save_chartxt();
if (control[2] == 1)
{
  Use_Chartxt = true;
}
else Use_Chartxt = false;
if (control[3] == 1)
{
  Use_Poemtxt = true;
}
else Use_Poemtxt = false;
if (control[4] == 1)
{
  Use_num = true;
}
else Use_num = false;
if (control[5] == 1)
{
  Use_ABC = true;
}
else Use_ABC = false;
if (control[6] == 1)
{
  Use_abc = true;
}
  else Use_abc = false;
  if (control[1] >= control[0] && control[1] < 9 && control[0] > 0)
  Generate_control(control[1], control[0]);
  if (Pick_result != null)
  return Pick_result;
  else return “字库参数设定有误”;
}
//生成随机验证码串
private void Generate_control(int max_charnum, int min_charnum)
{
  if (4 >= min_charnum && 4 <= max_charnum)
  poem_available = true;
  if (5 >= min_charnum && 5 <= max_charnum)
  poem_available = true;
  if (6 >= min_charnum && 6 <= max_charnum)
  poem_available = true;
  if (7 >= min_charnum && 7 <= max_charnum)
  poem_available = true;
  Single_char_counter = 0;
 int charnum = random.Next(max_charnum - min_charnum + 1) + min_charnum;//从用户指定字数范围中随机确定一值
  int loop;
//如果用户要使用某字库,就将它加入到single_char字库中待随机选
if (Use_ABC)
for (loop = 0; loop < Cap_Eng.Length; loop++)
{
  Single_char[Single_char_counter] = Cap_Eng[loop];
  Single_char_counter++;
}
  if (Use_abc)
  for (loop = 0; loop < normal_Eng.Length; loop++)
{
  Single_char[Single_char_counter] = normal_Eng[loop];
  Single_char_counter++;
}
  if (Use_num)
  for (loop = 0; loop < num.Length; loop++)
{
  Single_char[Single_char_counter] = num[loop];
  Single_char_counter++;
}
  if (Use_Chartxt)
{
  for (loop = 0; loop < char_txt_counter; loop++)
{
  Single_char[Single_char_counter] = char_txt[loop].ToString();
  Single_char_counter++;
}
}
  if (Use_ABC == false && Use_Chartxt == false && Use_abc == false && Use_num == false)
{
  if (poem_available)
{
Pick_result = Pick_poem(charnum);
while (Pick_result == null)
{
  charnum = random.Next(max_charnum - min_charnum + 1) + min_charnum;
  Pick_result = Pick_poem(charnum);
}
}
  else Pick_result = “字库范围设定错误”;
}
  else
{
  if (Use_Poemtxt)
{
  if (poem_available)
{
  if (random.Next(2) == 1)
{
Pick_result = Pick_poem(charnum);
while (Pick_result == null)
{
 charnum = random.Next(max_charnum - min_charnum + 1) + min_charnum;
  Pick_result = Pick_poem(charnum);
}
}
  else Pick_Single_char(charnum);
}
  else Pick_Single_char(charnum);
}
  else Pick_Single_char(charnum);
}
}
2. iPicGen类:根据字符和控制参数生成单个字符的初始图像并完成除加点、加线之外的所有特效处理。
 public System.Drawing.Bitmap retrieveOne(THECHAR theChar, int[] pArguments)
{
 System.Drawing.Bitmap picTemp = Manage.ChangeCode(theChar.Word_Char.ToString()/*文字*/, theChar.Font_Char/*字体*/, new SolidBrush(theChar.Color_Char)/*字体颜色*/);
picTemp = Manage.Rotate(picTemp, pArguments[0]); //对图像进行旋转处理
picTemp = Manage.RotateTwist(picTemp, pArguments[1]); //对图像产生旋转扭曲
picTemp = Manage.Incline(picTemp, pArguments[2]); //对图像进行斜变处理
picTemp = Manage.Scatter(picTemp, pArguments[3]); //对图像进行打散处理
picTemp = Manage.Shadow(picTemp, pArguments[4]); //对图像进行残影处理
picTemp = Manage.Coordinate(picTemp, pArguments[5]); //对图像产生极坐标变换
picTemp = Manage.LineTwist(picTemp, pArguments[6]); //对图像产生线性扭曲
picTemp = Manage.Decency(picTemp, pArguments[7]); //对图像进行风化处理
picTemp = Manage.Confuse(picTemp, pArguments[8]); //对图像进行模糊处理
picTemp = Manage.Mosaic(picTemp, pArguments[9]); //对图像进行马赛克处理
picTemp = Manage.SmallorLarge(picTemp, pArguments[10]); //对图像进行缩放处理
return picTemp; //返回生成的图像
}
3. iPicManage类:完成最终验证码图像的特效处理,包括贴字和加点加线等。
 public System.Drawing.Bitmap retrieveFinal()
{
int x = 3;
int y = 3;
System.Drawing.Bitmap Word_picBoard = new System.Drawing.Bitmap(picBoard);
///创建字符串Bitmap对象Word_picBoard
picBoard = Manage.AddBackGround(picBoard, System.Drawing.Color.White , x, y);
//加入背景
picBoard = Manage.RedomSpot(picBoard, mArguments[1]);//加入随机点
picBoard = Manage.RedomLine(picBoard, mArguments[2]);//加入随机线
System.Drawing.Graphics Graphics_picBoard =
System.Drawing.Graphics.FromImage(picBoard); //创建picBoard的Graphics对象Graphics_picBoard
Graphics_picBoard.DrawImage(Word_picBoard, x, y); //绘制字符串
picBoard = Manage.SmallorLarge(picBoard, (float)(mArguments[0]) / picBoard.Height
+ 1, (float)(mArguments[0]) / picBoard.Height + 1);
return picBoard; //返回生成的图像
}
4. Image_Manage类:实现对单字图像的具体特效处理方法。是本控件的核心。具体内容请直接参考源代码,在此不再赘述。
5. iControlCenter类:根据参数协调有关的类生成所需的验证码字和最终的验证图像。
//解析参数
public void DistriArgs(int[] arg,THECHAR tc)
{
//arguments for iGbgen
if (arg[4] <= arg[5] && arg[4] > 0 && arg[5] < 9)
{
gArguments[0] = arg[4];
gArguments[1] = arg[5];
}
  for (int i = 6; i < 11; i++)
{
  if ((arg[i] == 0) || (arg[i] == 1))
  gArguments[i - 4] = arg[i];
}
//arguments for iPicGen
for (int i = 13; i < 24; i++)
{
  if (arg[i] > 0 && arg[i] < 4)
  pArguments[i - 13] = arg[i];
}
//arguments for iPicManage
mArguments[1] = arg[1];
mArguments[2] = arg[2];
//UNFINISHED PART, mArguments[0]=y_hight!!!
mArguments[0]=arg[0];
mArguments[3]=0;
  this.workflow(tc);
}
//控制生成从验证码字到最终图像的完整流程
public void workflow(THECHAR tc)
{
iPicManage ipm=new iPicManage(mArguments);
iPicGen ipg=new iPicGen ();
iGbGen gb = new iGbGen();
theString = gb.giveString(gArguments);
//seperates
theChars = theString.ToCharArray();
thecharnotdone.Color_Char = tc.Color_Char;
thecharnotdone.Font_Char = tc.Font_Char;
for(int i=0;i {
  thecharnotdone.Word_Char = theChars[i];
aPic=ipg.retrieveOne(thecharnotdone,pArguments); ipm.pasteOne(aPic);
}
  finalPic=ipm.retrieveFinal();
}
6. iDesign类:继承自设计时控制器ControlDesigner。
 class iDesign : ControlDesigner
{
bool bGetDesignTimeHtmlCalled = false;
vcg ctrl;
  public override string GetDesignTimeHtml()
{
  if (!bGetDesignTimeHtmlCalled)
{
ctrl = (vcg)Component;
bGetDesignTimeHtmlCalled = true;
}
string directory = System.IO.Directory.GetCurrentDirectory();
directory += @”\buptunited”+ctrl.GetFileAppend(ctrl.图片格式);
ctrl.Generate(directory);
 return “”;
}
}
7. vcg类:控件UI。主要包括设计时属性的控制与后端代码的协调以及运行时的一些变量存储问题。
属性包括:文字控制、特效控制、特效模板、综合控制共四块,具体内容请直接参考源代码。
此外还包括一个顶层的完整验证码图像生成流程,利用Session存储后端生成的验证码字。
 public void Generate(string fileUrl)
{
//验证码显示的文字属性
userArgueList[0] = (int)this.IHeight.Value;
THECHAR tc = new THECHAR();
tc.Color_Char = Color.Black;
tc.Font_Char = new Font(字体.ToString(), userArgueList[0], FontStyle.Regular);
//把参数组传进控制器
iControlCenter icc = new iControlCenter();
icc.DistriArgs(userArgueList, tc);
//取得验证码
string code = icc.getString;
try
{
  if (Page.Session[SessionCode] == null)
  Page.Session.Add(SessionCode, code);
  else
  Page.Session[SessionCode] = code;
}
  catch (Exception)
{
  //throw new Exception(“session error!”);
}
//由验证码得到图片
Bitmap pBitmap = icc.getPic;
switch (图片格式)
{
  case graphicType.Jpeg:
pBitmap.Save(fileUrl, ImageFormat.Jpeg);
break;
  case graphicType.Gif:
pBitmap.Save(fileUrl, ImageFormat.Gif);
break;
  case graphicType.Png:
pBitmap.Save(fileUrl, ImageFormat.Png);
break;
  case graphicType.Bmp:
pBitmap.Save(fileUrl, ImageFormat.Bmp);
break;
  default:
pBitmap.Save(fileUrl, ImageFormat.Jpeg);
break;
}
  pBitmap.Dispose();
}
作者声明:
1. 北京邮电大学微软俱乐部BUPTUNITED团队是本控件的开发者和所有者;
2. 北京邮电大学微软俱乐部BUPTUNITED团队发布本控件源代码及相关文档作为共享资源。使用者对本控件源代码及相关文档的使用是免费的,但引用时必须注明出处;
3. 北京邮电大学微软俱乐部BUPTUNITED团队并不保证本控件源代码及相关文档不会引起使用者任何形式的损失,也不对这种损失承担任何责任;
 
北京邮电大学微软俱乐部BUPTUNITED团队 ...展开收缩
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 相关搜索: 验证码
 输入关键字,在本站1000多万海量源码库中尽情搜索: