网上有很多关于验证码做法的资料,但是真正做得完整的却非常少,所以昨天晚上参考了作者:csdn 上kwklover 的在asp.net下实现数字和字符相混合的验证码 (混合,完整,遗憾的是vb.net,说到这里我想我得感谢stone(qq9337874),因为我在把vb译成c#的过程中几番出错,最终这段翻译由他完成)!!
随机汉字参考了http://navicy.cnblogs.com/archive/2005/05/08/150756.html这篇文章的,
而最终的纯数字以及gdi+绘图则是从□☆近三十☆(qq19302038)传给我的一个oa案例里面分离出来的!
所以完整的说,这里面几乎都是别人做好了的,我只是整理出来了!
完整的下载地址是 http://www.cnblogs.com/files/thcjp/gdi.rar
下面把代码的重点部分贴出来,如果看源文件有什么不明白可以问偶 qq110535808
效果如图(我确实懒了点,按纽的名字都没有改,哈哈)
需要说明的是,因为提交对比后,页面是重新刷新了,所以文本框里面看见的和后面图片显示不一样,这个不需要太多说明吧!!
混合模式刷新出现约界错误 已经被 stone(qq9337874) 修正!!
下面是gdi+绘图的代码段,以及显示的调用等
using system;
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.drawing.drawing2d;
using system.drawing.imaging;
using system.drawing.text;
using system.drawing;
using system.text;
public partial class png : system.web.ui.page
{
private readonly string imagepath = "validator.jpg";
private static string gif = "";
protected void page_load(object sender, eventargs e)
{
switch (request.querystring["aa"])
{
case "1":
gif = stxt();
session["gif"]= stxt();
break;
case "2":
gif = getrandomint();
session["gif"]= getrandomint();
break;
case "3":
gif = rndnum(3);
session["gif"]= rndnum(3);
break;
default:
gif = rndnum(3);
session["gif"]= getrandomint();
break;
}
/**////创建bmp位图
bitmap bitmapimage = new system.drawing.bitmap(server.mappath(imagepath));
graphics graphicimage = graphics.fromimage(bitmapimage);
/**////设置画笔的输出模式
graphicimage.smoothingmode = smoothingmode.highspeed;
/**////添加文本字符串
graphicimage.drawstring(gif, new font("arial", 20, fontstyle.bold), systembrushes.windowtext, new point(0, 0));
/**////设置图像输出的格式
response.contenttype = "image/jpeg";
/**////保存数据流
bitmapimage.save(response.outputstream, imageformat.jpeg);
/**////释放占用的资源
graphicimage.dispose();
bitmapimage.dispose();
}