C#验证码的创建与使用示例
程序员文章站
2022-11-21 14:42:57
本文实例讲述了c#验证码的创建与使用方法。分享给大家供大家参考,具体如下:
1、c#创建验证码
① 创建获取验证码页面(validatecode.aspx)...
本文实例讲述了c#验证码的创建与使用方法。分享给大家供大家参考,具体如下:
1、c#创建验证码
① 创建获取验证码页面(validatecode.aspx)
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>获取验证码</title> </head> <body> <form id="form1" runat="server"> <div>获取验证码</div> </form> </body> </html>
② 编写获取验证码代码(validatecode.aspx.cs)
/// <summary> /// 验证码类型(0-字母数字混合,1-数字,2-字母) /// </summary> private string validatecodetype = "0"; /// <summary> /// 验证码字符个数 /// </summary> private int validatecodecount = 4; /// <summary> /// 验证码的字符集,去掉了一些容易混淆的字符 /// </summary> char[] character = { '2', '3', '4', '5', '6', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'r', 's', 't', 'w', 'x', 'y' }; protected void page_load(object sender, eventargs e) { //取消缓存 response.bufferoutput = true; response.cache.setexpires(datetime.now.addmilliseconds(-1)); response.cache.setcacheability(system.web.httpcacheability.nocache); response.appendheader("pragma", "no-cache"); //获取设置参数 if (!string.isnullorempty(request.querystring["validatecodetype"])) { validatecodetype = request.querystring["validatecodetype"]; } if (!string.isnullorempty(request.querystring["validatecodecount"])) { int.tryparse(request.querystring["validatecodecount"], out validatecodecount); } //生成验证码 this.createcheckcodeimage(generatecheckcode()); } private string generatecheckcode() { char code ; string checkcode = string.empty; system.random random = new random(); for (int i = 0; i < validatecodecount; i++) { code = character[random.next(character.length)]; // 要求全为数字或字母 if (validatecodetype == "1") { if ((int)code < 48 || (int)code > 57) { i--; continue; } } else if (validatecodetype == "2") { if ((int)code < 65 || (int)code > 90) { i--; continue; } } checkcode += code; } response.cookies.add(new system.web.httpcookie("checkcode", checkcode)); this.session["checkcode"] = checkcode; return checkcode; } private void createcheckcodeimage(string checkcode) { if (checkcode == null || checkcode.trim() == string.empty) return; system.drawing.bitmap image = new system.drawing.bitmap((int)math.ceiling((checkcode.length*15.0+40)), 23); system.drawing.graphics g = system.drawing.graphics.fromimage(image); try { //生成随机生成器 random random = new random(); //清空图片背景色 g.clear(system.drawing.color.white); //画图片的背景噪音线 for (int i = 0; i < 25; i++) { int x1 = random.next(image.width); int x2 = random.next(image.width); int y1 = random.next(image.height); int y2 = random.next(image.height); g.drawline(new system.drawing.pen(system.drawing.color.silver), x1, y1, x2, y2); } system.drawing.font font = new system.drawing.font("arial", 14, (system.drawing.fontstyle.bold | system.drawing.fontstyle.italic)); system.drawing.drawing2d.lineargradientbrush brush = new system.drawing.drawing2d.lineargradientbrush(new system.drawing.rectangle(0, 0, image.width, image.height), system.drawing.color.blue, system.drawing.color.darkred, 1.2f, true); int cyspace = 16; for (int i = 0; i < validatecodecount; i++) { g.drawstring(checkcode.substring(i, 1), font, brush, (i + 1) * cyspace, 1); } //画图片的前景噪音点 for (int i = 0; i < 100; i++) { int x = random.next(image.width); int y = random.next(image.height); image.setpixel(x, y, system.drawing.color.fromargb(random.next())); } //画图片的边框线 g.drawrectangle(new system.drawing.pen(system.drawing.color.silver), 0, 0, image.width - 1, image.height - 1); system.io.memorystream ms = new system.io.memorystream(); image.save(ms, system.drawing.imaging.imageformat.gif); response.clearcontent(); response.contenttype = "image/gif"; response.binarywrite(ms.toarray()); } finally { g.dispose(); image.dispose(); } }
2、验证码的使用
① 验证码的前段显示代码
复制代码 代码如下:
<img src="/validatecode.aspx?validatecodetype=1&0.011150883024061309" onclick="this.src='/validatecode.aspx?validatecodetype=1&'+math.random();" id="imgvalidatecode" alt="点击刷新验证码" title="点击刷新验证码" style="cursor: pointer;">
② 创建验证码测试页面(validatetest.aspx)
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>验证码测试</title> </head> <body> <form id="form1" runat="server"> <div> <input runat="server" id="txtvalidate" /> <img src="/validatecode.aspx?validatecodetype=1&0.011150883024061309" onclick="this.src='/validatecode.aspx?validatecodetype=1&'+math.random();" id="imgvalidatecode" alt="点击刷新验证码" title="点击刷新验证码" style="cursor: pointer;"> <asp:button runat="server" id="btnval" text="提交" onclick="btnval_click" /> </div> </form> </body> </html>
③ 编写验证码测试的提交代码(validatetest.aspx.cs)
protected void btnval_click(object sender, eventargs e) { bool result = false; //验证结果 string usercode = this.txtvalidate.value; //获取用户输入的验证码 if (string.isnullorempty(usercode)) { //请输入验证码 return; } string validcode = this.session["checkcode"] as string; //获取系统生成的验证码 if (!string.isnullorempty(validcode)) { if (usercode.tolower() == validcode.tolower()) { //验证成功 result = true; } else { //验证失败 result = false; } } }
更多关于c#相关内容感兴趣的读者可查看本站专题:《c#图片操作技巧汇总》、《c#常见控件用法教程》、《winform控件用法总结》、《c#数据结构与算法教程》、《c#面向对象程序设计入门教程》及《c#程序设计之线程使用技巧总结》
希望本文所述对大家c#程序设计有所帮助。
上一篇: 建网站必须注重字体的选择
下一篇: 浅谈Mysql大数据分页查询解决方案