c# 验证码实现代码
- using System;
- using System.Collections.Generic;
- using System.Drawing;
- using System.Drawing.Drawing2D;
- using System.Drawing.Imaging;
- using System.IO;
- using System.Linq;
- using System.Web;
- namespace Web.Admin.handler
- {
- /// <summary>
- /// ValidateCode 的摘要说明
- /// </summary>
- public class ValidateCode : IHttpHandler, System.Web.SessionState.IRequiresSessionState
- {
- public void ProcessRequest(HttpContext context)
- {
- //创建验证码
- string code = CreateValidateCode(5);
- //把验证码写到响应流里面去
- CreateValidateGraphic(code, context);
- //保存到session中
- context.Session["code"] = code;
- }
- /// <summary>
- /// 生成验证码
- /// </summary>
- /// <param name="length">指定验证码的长度</param>
- /// <returns></returns>
- protected string CreateValidateCode(int length)
- {
- int[] randMembers = new int[length];
- int[] validateNums = new int[length];
- string validateNumberStr = "";
- //生成起始序列值
- int seekSeek = unchecked((int)DateTime.Now.Ticks);
- Random seekRand = new Random(seekSeek);
- int beginSeek = (int)seekRand.Next(0, Int32.MaxValue - length * 10000);
- int[] seeks = new int[length];
- for (int i = 0; i < length; i++)
- {
- beginSeek += 10000;
- seeks[i] = beginSeek;
- }
- //生成随机数字
- for (int i = 0; i < length; i++)
- {
- Random rand = new Random(seeks[i]);
- int pownum = 1 * (int)Math.Pow(10, length);
- randMembers[i] = rand.Next(pownum, Int32.MaxValue);
- }
- //抽取随机数字
- for (int i = 0; i < length; i++)
- {
- string numStr = randMembers[i].ToString();
- int numLength = numStr.Length;
- Random rand = new Random();
- int numPosition = rand.Next(0, numLength - 1);
- validateNums[i] = Int32.Parse(numStr.Substring(numPosition, 1));
- }
- //生成验证码
- for (int i = 0; i < length; i++)
- {
- validateNumberStr += validateNums[i].ToString();
- }
- return validateNumberStr;
- }
- /// <summary>
- /// 创建验证码的图片,把验证码写到响应流里面去。
- /// </summary>
- /// <param name="containsPage">要输出到的page对象</param>
- /// <param name="validateNum">验证码</param>
- public void CreateValidateGraphic(string validateCode, HttpContext context)
- {
- Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);
- Graphics g = Graphics.FromImage(image);
- try
- {
- //生成随机生成器
- Random random = new Random();
- //清空图片背景色
- g.Clear(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 Pen(Color.Silver), x1, y1, x2, y2);
- }
- Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
- LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
- Color.Blue, Color.DarkRed, 1.2f, true);
- g.DrawString(validateCode, font, brush, 3, 2);
- //画图片的前景干扰点
- for (int i = 0; i < 100; i++)
- {
- int x = random.Next(image.Width);
- int y = random.Next(image.Height);
- image.SetPixel(x, y, Color.FromArgb(random.Next()));
- }
- //画图片的边框线
- g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
- //保存图片数据
- MemoryStream stream = new MemoryStream();
- image.Save(stream, ImageFormat.Jpeg);
- //输出图片流
- context.Response.Clear();//把之前Response的字节数组清空。
- context.Response.ContentType = "image/jpeg";
- context.Response.BinaryWrite(stream.ToArray());
- }
- finally
- {
- g.Dispose();
- image.Dispose();
- }
- }
- public bool IsReusable
- {
- get
- {
- return false;
- }
- }
- }
- }
c# 验证码实现代码的更多相关文章
- Android 发送验证码 简易代码
效果 Activity ;//倒计时 private Timer timer; private Handler handler = new Handler() { public void handle ...
- Java Web(四) 一次性验证码的代码实现
其实实现代码的逻辑非常简单,真的超级超级简单. 1.在登录页面上login.jsp将验证码图片使用标签<img src="xxx">将绘制验证码图片的url给它 2.在 ...
- 手机发送验证码—.net代码
注册过程中,短信发送验证码流程如下: (1).用户提交手机号码,申请湖区验证码 (2).网站按照预制规则生成验证码 (3).网站将用户手机号码和验证码发送到短信平台 (4).将制定内容发送到制定手机号 ...
- web开发(四) 一次性验证码的代码实现
在网上看见一篇不错的文章,写的详细. 以下内容引用那篇博文.转载于<http://www.cnblogs.com/whgk/p/6426072.html>,在此仅供学习参考之用. 其实实现 ...
- springMvc注册时图形验证码完整代码与详细步骤``````后续更新注册时对密码进行加密
第一使用 画图软件制作图片 ,文件名就是验证码 ------用户的实体类 import java.util.Date; public class Member { private in ...
- C++ 短信验证码/通知 - 代码示例
//接口类型:互亿无线触发短信接口,支持发送验证码短信.订单通知短信等. // ///////////////////账户注册:请通过该地址开通账户http://user.ihuyi.com/regi ...
- C#生成漂亮验证码完整代码类
using System;using System.Web;using System.Drawing;using System.Security.Cryptography; namespace Dot ...
- jQuery手机发送验证码倒计时代码
<!DOCTYPE> <html> <head> <meta charset="UTF-8"> <script type=&q ...
- 验证码示例代码演示——以php为例
运行 · 修改index.php(图片验证码的生成示例) [html] view plain copy initNECaptcha({ captchaId: 'YOUR_CAPTCHA_ID', // ...
- 验证码插件代码:image.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
随机推荐
- mysql5.7 简易修改mysql密码
MySQL 5.7 mysql库的user表中已经不再有password字段,取而代之的为authentication_string修改语法相同,步骤也相同.注意:/etc/my.cnf这个配置文件中 ...
- 利用Calendar类测试电脑运行速度
今天学习了很多新知识! 这里使用了Calender类来获取系统时间,并计算循环1w次的时间,判断电脑处理时间. import java.util.Calendar; public class Arra ...
- firedac的数据序列和还原单元(Data.FireDACJSONReflect.pas)之拷贝FIREDAC数据集
使用流做中转 procedure CopyDataSet(const ASource, ADest: TFDAdaptedDataSet);var LStream: TStream;begin LSt ...
- Intellij Idea 13:重置设置
最近在将Windows下的Idea的设置导入到Mac下的时候,一时手贱,点了全部结果发现悲剧了,所有的快捷键都变成和Windows的一样了.于是我就在CMD+C,V和Ctrl+C,V中不断的进行头脑锻 ...
- PHP array_diff_assoc()
定义和用法 array_diff_assoc() 函数返回两个数组的差集数组.返回的数组的元素都取自被比较的数组(既第一个数组). 和 array_diff() 函数 不同,本函数要求键名和键值都进行 ...
- mongoDB学习笔记——在C#中查询
1.下载安装 想要在C#中使用MongoDB,首先得要有个MongoDB支持的C#版的驱动.C#版的驱动貌似有很多种,如官方提供的samus. 实现思路大都类似.这里我们用官方提供的mongo-csh ...
- B1821 [JSOI2010]Group 部落划分 Group 二分答案&&并查集
这个题正解是最小生成树,但是...最大值最小?一看就是二分答案啊!不用多想,直接二分答案加暴力验证就行了. 题干: Description 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒 ...
- javascript 原型(prototype 、__proto__、函数、对象)
一.类型 1.JavaScript中分为值类型(string/boolean/null/number/undefind).引用类型(数组.对象.函数): 2.数组.函数.对象都是对象: 对象是由函数创 ...
- LocalDateTime查找最近的五分钟点
/** * 最近的五分钟 * @param dateTime * @return */ public static LocalDateTime getNear5(LocalDateTime dateT ...
- go的语言结构
一.文件名.关键字与标识符 1.1 文件名 1.go 的源文件已 .go 为后缀名 2.文件名已小写组成 如:simple.go 3.如多个部分组成可用"_" 分割 4.不要包含有 ...