1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Drawing.Drawing2D;
  5. using System.Drawing.Imaging;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Web;
  9.  
  10. namespace Web.Admin.handler
  11. {
  12. /// <summary>
  13. /// ValidateCode 的摘要说明
  14. /// </summary>
  15. public class ValidateCode : IHttpHandler, System.Web.SessionState.IRequiresSessionState
  16. {
  17.  
  18. public void ProcessRequest(HttpContext context)
  19. {
  20. //创建验证码
  21. string code = CreateValidateCode(5);
  22. //把验证码写到响应流里面去
  23. CreateValidateGraphic(code, context);
  24. //保存到session中
  25. context.Session["code"] = code;
  26. }
  27.  
  28. /// <summary>
  29. /// 生成验证码
  30. /// </summary>
  31. /// <param name="length">指定验证码的长度</param>
  32. /// <returns></returns>
  33. protected string CreateValidateCode(int length)
  34. {
  35. int[] randMembers = new int[length];
  36. int[] validateNums = new int[length];
  37. string validateNumberStr = "";
  38. //生成起始序列值
  39. int seekSeek = unchecked((int)DateTime.Now.Ticks);
  40. Random seekRand = new Random(seekSeek);
  41. int beginSeek = (int)seekRand.Next(0, Int32.MaxValue - length * 10000);
  42. int[] seeks = new int[length];
  43. for (int i = 0; i < length; i++)
  44. {
  45. beginSeek += 10000;
  46. seeks[i] = beginSeek;
  47. }
  48. //生成随机数字
  49. for (int i = 0; i < length; i++)
  50. {
  51. Random rand = new Random(seeks[i]);
  52. int pownum = 1 * (int)Math.Pow(10, length);
  53. randMembers[i] = rand.Next(pownum, Int32.MaxValue);
  54. }
  55. //抽取随机数字
  56. for (int i = 0; i < length; i++)
  57. {
  58. string numStr = randMembers[i].ToString();
  59. int numLength = numStr.Length;
  60. Random rand = new Random();
  61. int numPosition = rand.Next(0, numLength - 1);
  62. validateNums[i] = Int32.Parse(numStr.Substring(numPosition, 1));
  63. }
  64. //生成验证码
  65. for (int i = 0; i < length; i++)
  66. {
  67. validateNumberStr += validateNums[i].ToString();
  68. }
  69. return validateNumberStr;
  70. }
  71.  
  72. /// <summary>
  73. /// 创建验证码的图片,把验证码写到响应流里面去。
  74. /// </summary>
  75. /// <param name="containsPage">要输出到的page对象</param>
  76. /// <param name="validateNum">验证码</param>
  77. public void CreateValidateGraphic(string validateCode, HttpContext context)
  78. {
  79. Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);
  80. Graphics g = Graphics.FromImage(image);
  81. try
  82. {
  83. //生成随机生成器
  84. Random random = new Random();
  85. //清空图片背景色
  86. g.Clear(Color.White);
  87. //画图片的干扰线
  88. for (int i = 0; i < 25; i++)
  89. {
  90. int x1 = random.Next(image.Width);
  91. int x2 = random.Next(image.Width);
  92. int y1 = random.Next(image.Height);
  93. int y2 = random.Next(image.Height);
  94. g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
  95. }
  96. Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
  97. LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
  98. Color.Blue, Color.DarkRed, 1.2f, true);
  99. g.DrawString(validateCode, font, brush, 3, 2);
  100. //画图片的前景干扰点
  101. for (int i = 0; i < 100; i++)
  102. {
  103. int x = random.Next(image.Width);
  104. int y = random.Next(image.Height);
  105. image.SetPixel(x, y, Color.FromArgb(random.Next()));
  106. }
  107. //画图片的边框线
  108. g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
  109. //保存图片数据
  110. MemoryStream stream = new MemoryStream();
  111. image.Save(stream, ImageFormat.Jpeg);
  112. //输出图片流
  113. context.Response.Clear();//把之前Response的字节数组清空。
  114. context.Response.ContentType = "image/jpeg";
  115. context.Response.BinaryWrite(stream.ToArray());
  116. }
  117. finally
  118. {
  119. g.Dispose();
  120. image.Dispose();
  121. }
  122. }
  123.  
  124. public bool IsReusable
  125. {
  126. get
  127. {
  128. return false;
  129. }
  130. }
  131. }
  132. }

  

c# 验证码实现代码的更多相关文章

  1. Android 发送验证码 简易代码

    效果 Activity ;//倒计时 private Timer timer; private Handler handler = new Handler() { public void handle ...

  2. Java Web(四) 一次性验证码的代码实现

    其实实现代码的逻辑非常简单,真的超级超级简单. 1.在登录页面上login.jsp将验证码图片使用标签<img src="xxx">将绘制验证码图片的url给它 2.在 ...

  3. 手机发送验证码—.net代码

    注册过程中,短信发送验证码流程如下: (1).用户提交手机号码,申请湖区验证码 (2).网站按照预制规则生成验证码 (3).网站将用户手机号码和验证码发送到短信平台 (4).将制定内容发送到制定手机号 ...

  4. web开发(四) 一次性验证码的代码实现

    在网上看见一篇不错的文章,写的详细. 以下内容引用那篇博文.转载于<http://www.cnblogs.com/whgk/p/6426072.html>,在此仅供学习参考之用. 其实实现 ...

  5. springMvc注册时图形验证码完整代码与详细步骤``````后续更新注册时对密码进行加密

      第一使用 画图软件制作图片 ,文件名就是验证码    ------用户的实体类 import java.util.Date; public class Member {    private in ...

  6. C++ 短信验证码/通知 - 代码示例

    //接口类型:互亿无线触发短信接口,支持发送验证码短信.订单通知短信等. // ///////////////////账户注册:请通过该地址开通账户http://user.ihuyi.com/regi ...

  7. C#生成漂亮验证码完整代码类

    using System;using System.Web;using System.Drawing;using System.Security.Cryptography; namespace Dot ...

  8. jQuery手机发送验证码倒计时代码

    <!DOCTYPE> <html> <head> <meta charset="UTF-8"> <script type=&q ...

  9. 验证码示例代码演示——以php为例

    运行 · 修改index.php(图片验证码的生成示例) [html] view plain copy initNECaptcha({ captchaId: 'YOUR_CAPTCHA_ID', // ...

  10. 验证码插件代码:image.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

随机推荐

  1. mysql5.7 简易修改mysql密码

    MySQL 5.7 mysql库的user表中已经不再有password字段,取而代之的为authentication_string修改语法相同,步骤也相同.注意:/etc/my.cnf这个配置文件中 ...

  2. 利用Calendar类测试电脑运行速度

    今天学习了很多新知识! 这里使用了Calender类来获取系统时间,并计算循环1w次的时间,判断电脑处理时间. import java.util.Calendar; public class Arra ...

  3. firedac的数据序列和还原单元(Data.FireDACJSONReflect.pas)之拷贝FIREDAC数据集

    使用流做中转 procedure CopyDataSet(const ASource, ADest: TFDAdaptedDataSet);var LStream: TStream;begin LSt ...

  4. Intellij Idea 13:重置设置

    最近在将Windows下的Idea的设置导入到Mac下的时候,一时手贱,点了全部结果发现悲剧了,所有的快捷键都变成和Windows的一样了.于是我就在CMD+C,V和Ctrl+C,V中不断的进行头脑锻 ...

  5. PHP array_diff_assoc()

    定义和用法 array_diff_assoc() 函数返回两个数组的差集数组.返回的数组的元素都取自被比较的数组(既第一个数组). 和 array_diff() 函数 不同,本函数要求键名和键值都进行 ...

  6. mongoDB学习笔记——在C#中查询

    1.下载安装 想要在C#中使用MongoDB,首先得要有个MongoDB支持的C#版的驱动.C#版的驱动貌似有很多种,如官方提供的samus. 实现思路大都类似.这里我们用官方提供的mongo-csh ...

  7. B1821 [JSOI2010]Group 部落划分 Group 二分答案&&并查集

    这个题正解是最小生成树,但是...最大值最小?一看就是二分答案啊!不用多想,直接二分答案加暴力验证就行了. 题干: Description 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒 ...

  8. javascript 原型(prototype 、__proto__、函数、对象)

    一.类型 1.JavaScript中分为值类型(string/boolean/null/number/undefind).引用类型(数组.对象.函数): 2.数组.函数.对象都是对象: 对象是由函数创 ...

  9. LocalDateTime查找最近的五分钟点

    /** * 最近的五分钟 * @param dateTime * @return */ public static LocalDateTime getNear5(LocalDateTime dateT ...

  10. go的语言结构

    一.文件名.关键字与标识符 1.1 文件名 1.go 的源文件已 .go 为后缀名 2.文件名已小写组成 如:simple.go 3.如多个部分组成可用"_" 分割 4.不要包含有 ...