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.Text;
  9. using System.Threading.Tasks;
  10. using System.Web;
  11. namespace HuaTong.General.Utility
  12. {
  13. public class ValidateCode
  14. {
  15. public ValidateCode()
  16. {
  17. }
  18. /// <summary>
  19. /// 验证码的最大长度
  20. /// </summary>
  21. public int MaxLength
  22. {
  23. get { return ; }
  24. }
  25. /// <summary>
  26. /// 验证码的最小长度
  27. /// </summary>
  28. public int MinLength
  29. {
  30. get { return ; }
  31. }
  32. /// <summary>
  33. /// 生成验证码
  34. /// </summary>
  35. /// <param name="length">指定验证码的长度</param>
  36. /// <returns></returns>
  37. public string CreateValidateCode(int length)
  38. {
  39. int[] randMembers = new int[length];
  40. int[] validateNums = new int[length];
  41. string validateNumberStr = "";
  42. //生成起始序列值
  43. int seekSeek = unchecked((int)DateTime.Now.Ticks);
  44. Random seekRand = new Random(seekSeek);
  45. int beginSeek = (int)seekRand.Next(, Int32.MaxValue - length * );
  46. int[] seeks = new int[length];
  47. for (int i = ; i < length; i++)
  48. {
  49. beginSeek += ;
  50. seeks[i] = beginSeek;
  51. }
  52. //生成随机数字
  53. for (int i = ; i < length; i++)
  54. {
  55. Random rand = new Random(seeks[i]);
  56. int pownum = * (int)Math.Pow(, length);
  57. randMembers[i] = rand.Next(pownum, Int32.MaxValue);
  58. }
  59. //抽取随机数字
  60. for (int i = ; i < length; i++)
  61. {
  62. string numStr = randMembers[i].ToString();
  63. int numLength = numStr.Length;
  64. Random rand = new Random();
  65. int numPosition = rand.Next(, numLength - );
  66. validateNums[i] = Int32.Parse(numStr.Substring(numPosition, ));
  67. }
  68. //生成验证码
  69. for (int i = ; i < length; i++)
  70. {
  71. validateNumberStr += validateNums[i].ToString();
  72. }
  73. return validateNumberStr;
  74. }
  75. /// <summary>
  76. /// 创建验证码的图片
  77. /// </summary>
  78. /// <param name="context">要输出到的page对象</param>
  79. /// <param name="validateNum">验证码</param>
  80. public void CreateValidateGraphic(string validateCode, HttpContext context)
  81. {
  82. Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), );
  83. Graphics g = Graphics.FromImage(image);
  84. try
  85. {
  86. //生成随机生成器
  87. Random random = new Random();
  88. //清空图片背景色
  89. g.Clear(Color.White);
  90. //画图片的干扰线
  91. for (int i = ; i < ; i++)
  92. {
  93. int x1 = random.Next(image.Width);
  94. int x2 = random.Next(image.Width);
  95. int y1 = random.Next(image.Height);
  96. int y2 = random.Next(image.Height);
  97. g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
  98. }
  99. Font font = new Font("Arial", , (FontStyle.Bold | FontStyle.Italic));
  100. LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(, , image.Width, image.Height),
  101. Color.Blue, Color.DarkRed, 1.2f, true);
  102. g.DrawString(validateCode, font, brush, , );
  103. //画图片的前景干扰点
  104. for (int i = ; i < ; i++)
  105. {
  106. int x = random.Next(image.Width);
  107. int y = random.Next(image.Height);
  108. image.SetPixel(x, y, Color.FromArgb(random.Next()));
  109. }
  110. //画图片的边框线
  111. g.DrawRectangle(new Pen(Color.Silver), , , image.Width - , image.Height - );
  112. //保存图片数据
  113. MemoryStream stream = new MemoryStream();
  114. image.Save(stream, ImageFormat.Jpeg);
  115. //输出图片流
  116. context.Response.Clear();
  117. context.Response.ContentType = "image/jpeg";
  118. context.Response.BinaryWrite(stream.ToArray());
  119. }
  120. finally
  121. {
  122. g.Dispose();
  123. image.Dispose();
  124. }
  125. }
  126. /// <summary>
  127. /// 得到验证码图片的长度
  128. /// </summary>
  129. /// <param name="validateNumLength">验证码的长度</param>
  130. /// <returns></returns>
  131. public static int GetImageWidth(int validateNumLength)
  132. {
  133. return (int)(validateNumLength * 12.0);
  134. }
  135. /// <summary>
  136. /// 得到验证码的高度
  137. /// </summary>
  138. /// <returns></returns>
  139. public static double GetImageHeight()
  140. {
  141. return 22.5;
  142. }
  143.  
  144. //C# MVC 升级版
  145. /// <summary>
  146. /// 创建验证码的图片
  147. /// </summary>
  148. /// <param name="containsPage">要输出到的page对象</param>
  149. /// <param name="validateNum">验证码</param>
  150. public byte[] CreateValidateGraphic(string validateCode)
  151. {
  152. Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 16.0), );
  153. Graphics g = Graphics.FromImage(image);
  154. try
  155. {
  156. //生成随机生成器
  157. Random random = new Random();
  158. //清空图片背景色
  159. g.Clear(Color.White);
  160. //画图片的干扰线
  161. for (int i = ; i < ; i++)
  162. {
  163. int x1 = random.Next(image.Width);
  164. int x2 = random.Next(image.Width);
  165. int y1 = random.Next(image.Height);
  166. int y2 = random.Next(image.Height);
  167. g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
  168. }
  169. Font font = new Font("Arial", , (FontStyle.Bold | FontStyle.Italic));
  170. LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(, , image.Width, image.Height),
  171. Color.Blue, Color.DarkRed, 1.2f, true);
  172. g.DrawString(validateCode, font, brush, , );
  173. //画图片的前景干扰点
  174. for (int i = ; i < ; i++)
  175. {
  176. int x = random.Next(image.Width);
  177. int y = random.Next(image.Height);
  178. image.SetPixel(x, y, Color.FromArgb(random.Next()));
  179. }
  180. //画图片的边框线
  181. g.DrawRectangle(new Pen(Color.Silver), , , image.Width - , image.Height - );
  182. //保存图片数据
  183. MemoryStream stream = new MemoryStream();
  184. image.Save(stream, ImageFormat.Jpeg);
  185. //输出图片流
  186. return stream.ToArray();
  187. }
  188. finally
  189. {
  190. g.Dispose();
  191. image.Dispose();
  192. }
  193. }
  194. }
  195. }

c# 验证码图片生成类的更多相关文章

  1. 验证码图片生成工具类——Captcha.java

    验证码图片生成工具,使用JAVA生成的图片验证码,调用getRandcode方法获取图片验证码,以流的方式传输到前端页面. 源码如下:(点击下载  Captcha.java) import java. ...

  2. .Net中验证码图片生成

    开发网站或平台系统,登录页面是必不可少的功能,但是现在很多人可以使用工具暴力破解网站密码,为了防止这类非法操作,需要在登录页面添加验证,验证码就是最常用的一种验证方式. 我结合了自己的经验和网上的验证 ...

  3. asp.net验证码图片生成示例

    验证码,一个很常见的东西.不管你是使用者还是开发者,这个东西80%的人都见到过,但是之前有人给我说过这么一句话“内行看门道,外行看热闹!”,仔细琢磨一下还真的是那么一回事.对于怎么实现验证码,闲话不多 ...

  4. mvc验证码图片生成

    /// <summary> ///生成验证码 /// </summary> public class VerifyCode { /// <summary> /// ...

  5. django 验证码图片生成视图函数

    def verify_code(request): import random # 定义验证码图片背景颜色 宽和高 bgcolor = (random.randrange(20,180),random ...

  6. python验证码图片生成

    环境:win10(64位)+pycharm2018+pillow5.4+python3.7 对Django的跨站请求保护的有所了解的同学会知道{%csrf_token%}在实际上作用并不是那么大,只要 ...

  7. java 验证码图片处理类,为验证码识别做准备

    /* * To change this template, choose Tools | Templates * and open the template in the editor. */pack ...

  8. J2EE如何生成验证码图片和点击刷新验证码

    验证码图片生成步骤 创建BufferedImage对象. 获取BufferedImage的画笔,即调用getGraphics()方法获取Graphics对象. 调用Graphics对象的setColo ...

  9. 第二百七十节,Tornado框架-生成验证码图片,以及验证码结合Session验证

    Tornado框架-生成验证码图片,以及验证码结合Session验证 第一.生成验证码图片  生成验证码图片需要两个必须模块 1.python自带的random(随机模块) 2.Pillow()图像处 ...

随机推荐

  1. 20145331 《Java程序设计》第7周学习总结

    20145331 <Java程序设计>第7周学习总结 教材学习内容总结 第十二章 Lambda 1.Lambda定义:一个不用被绑定到一个标识符上,并且可能被调用的函数. 2.在只有Lam ...

  2. 尝试编辑java程序

    尝试编译java程序 之前在用软件eclipse编译过简单的hello  java程序,因为软件操作简单,后来学会了用命令符来编译程序.代码如下 public class abc     {      ...

  3. Linux下C连接MySql数据库

    目录: 一.解决小的问题: 二.大问题,如果你不小心把/usr/lib的所属用户改了导致sudo命令用不了: 三.C连接MySql编程本身: 其实写这个程序真的很简单,十多分钟的事情,只是以前没在Li ...

  4. hdu 2896:病毒侵袭

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission ...

  5. caffe平台快速搭建:caffe+window7+vs2013

    caffe平台快速搭建:caffe+window7+vs2013 1.caffe-master下载 采用微软提供Windows工具包(caffe-master),下载地址:https://github ...

  6. BZOJ 3192: [JLOI2013]删除物品 奇淫技巧&树状数组

    点我看题 这题十分奇淫技巧...QAQ因为知道是树状数组的题QAQ刚开始以为维护两个数组的树状数组然后模拟从大到小,然后发现不会打QAQ 于是悄悄咪咪翻开题解了. 实际上两个数组可以看做一个数组 如 ...

  7. 4.scala中的类

    版权申明:转载请注明出处.文章来源:http://bigdataer.net/?p=269 排版乱?请移步原文获得更好的阅读体验 1.针对不同字段生成的方法 字段生成的方法备注 var/val nam ...

  8. 解题报告:hdu1257 LIS裸题

    2017-09-02 17:28:44 writer:pprp 那个裸题练练手,讲解在之前的博客中提到了 代码如下: /* @theme:hdu1257 @writer:pprp @begin:17: ...

  9. 打开PS是出现“该内存不能为read”是怎么回事?

    打开PS是出现“该内存不能为read”是怎么回事? 答:内存不能为read修复工具可以有效修复计算机运行应用程序时提示:该内存不能为read要终止程序的问题,一般XP系统才会出现这个问题. 指令修复法 ...

  10. Spring Cloud 坑点

    1 配置中心 1.config 默认Git加载 通过spring.cloud.config.server.git.uri指定配置信息存储的git地址,比如:https://github.com/spr ...