網上有很多關于驗證碼做法的資料,但是真正做得完整的卻非常少,所以昨天晚上參考了作者: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
效果如圖(我確實懶了點,按紐的名字都沒有改,哈哈)
需要說明的是,因為提交對比后,頁面是重新刷新了,所以文本框里面看見的和后面圖片顯示不一樣,這個不需要太多說明吧!!




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();
}
新聞熱點
疑難解答