这些东西网上都泛滥了,随便拉了个过来,然后改改,加上自己的标示什么的,就是这样子了。
可以定义验证码的格式,包括字母、数字、特殊符号和汉字,指定生成的图片大小。
本来还想加上图片扭曲的,可怕以后用起来被人说“万恶的验证码”所以就算了。

  1验证码类(转)
    





            
 using System;
  2验证码类(转)
    





            
 using System.Collections;
  3验证码类(转)
    





            
 using System.Collections.Generic;
  4验证码类(转)
    





            
 using System.Drawing;
  5验证码类(转)
    





            
 using System.Text;
  6验证码类(转)
    





            
 using System.Threading;
  7验证码类(转)
    





            
 using System.Drawing.Drawing2D;
  8验证码类(转)
    





            
 
  9验证码类(转)
    





            
 namespace SHNK.Framework.Utility
 10        /// 验证码生成类
 13验证码类(转)
    





            
     /// </summary>
 14验证码类(转)
    





            
     public static class ValidateCodeHelper
 15                    /// 生成长度为length、字符类型为codeType的验证码字符串
 18验证码类(转)
    





            
         /// </summary>
 19验证码类(转)
    





            
         /// <param name="codeType">验证码类型</param>
 20验证码类(转)
    





            
         /// <param name="length">验证码长度</param>
 21验证码类(转)
    





            
         /// <returns>验证码字符串</returns>
 22验证码类(转)
    





            
         public static string GenerateCode(ValidateCodeType codeType, int length)
 23        
 25验证码类(转)
    





            
             const string sNumber = "0123456789";
 26验证码类(转)
    





            
             const string sLetter = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
 27验证码类(转)
    





            
             const string sSymbol = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";
 28验证码类(转)
    





            
 
 29验证码类(转)
    





            
             if ((codeType | ValidateCodeType.Chinese) == codeType)
 30                            return GetChinese(length);
 32验证码类(转)
    





            
             }
 33验证码类(转)
    





            
 
 34验证码类(转)
    





            
             StringBuilder blocks = new StringBuilder();
 35验证码类(转)
    





            
             StringBuilder builder = new StringBuilder();
 36验证码类(转)
    





            
 
 37验证码类(转)
    





            
             if ((codeType | ValidateCodeType.Number) == codeType)
 38验证码类(转)
    





            
                 blocks.Append(sNumber);
 39验证码类(转)
    





            
 
 40验证码类(转)
    





            
             if ((codeType | ValidateCodeType.Letter) == codeType)
 41验证码类(转)
    





            
                 blocks.Append(sLetter);
 42验证码类(转)
    





            
 
 43验证码类(转)
    





            
             if ((codeType | ValidateCodeType.Symbol) == codeType)
 44验证码类(转)
    





            
                 blocks.Append(sSymbol);
 45验证码类(转)
    





            
 
 46验证码类(转)
    





            
             Random rand = new Random();
 47验证码类(转)
    





            
             for (int i = 0; i < length; i++)
 48                            builder.Append(blocks[rand.Next(blocks.Length)]);
 50验证码类(转)
    





            
             }
 51验证码类(转)
    





            
 
 52验证码类(转)
    





            
             return builder.ToString();
 53验证码类(转)
    





            
         }
 54验证码类(转)
    





            
 
 55                /// 获取num个中文字符
 57验证码类(转)
    





            
         /// </summary>
 58验证码类(转)
    





            
         /// <param name="num">字符串长度</param>
 59验证码类(转)
    





            
         /// <returns>中文字符</returns>
 60验证码类(转)
    





            
         private static string GetChinese(int num)
 61                                 * be in common use
 64验证码类(转)
    





            
              * 
 65验证码类(转)
    





            
              * first byte       0xB0 - 0xD7
 66验证码类(转)
    





            
              * second byte      0xA1 - 0xFE
 67验证码类(转)
    





            
              * 
 68验证码类(转)
    





            
              *          except  0xD7FA - 0xD7FE (space)
 69验证码类(转)
    





            
              * *********************************************/
 70验证码类(转)
    





            
             const int _MAX_SIZE = 3755//  (0xD7 - 0xB0 + 1) * (0xFE - 0xA1 + 1) - (0xD7FE - 0xD7FA + 1);
 71验证码类(转)
    





            
             const int _Capacity = 94;   //  0xFE - 0xA1 + 1
 72验证码类(转)
    





            
 
 73验证码类(转)
    





            
             Random rand = new Random();
 74验证码类(转)
    





            
             StringBuilder builder = new StringBuilder();
 75验证码类(转)
    





            
             for (int i = 0; i < num; i++)
 76                            int index = rand.Next(_MAX_SIZE);
 78验证码类(转)
    





            
                 int high = Math.Floor(index.ToDouble() / _Capacity.ToDouble()).ToInt32();
 79验证码类(转)
    





            
                 int lower = index % _Capacity;
 80                string code = Encoding.Default.GetString(new byte[]                 builder.Append(code);
 82验证码类(转)
    





            
             }
 83验证码类(转)
    





            
             return builder.ToString();
 84验证码类(转)
    





            
         }
 85验证码类(转)
    





            
 
 86                /// 按照输入的字符串src和每个字符位图的宽度生成一张图片
 88验证码类(转)
    





            
         /// </summary>
 89验证码类(转)
    





            
         /// <param name="src">验证码</param>
 90验证码类(转)
    





            
         /// <param name="height">图片高度</param>
 91验证码类(转)
    





            
         /// <param name="wdpc">每个字符所占宽度</param>
 92验证码类(转)
    





            
         /// <returns>验证图片</returns>
 93验证码类(转)
    





            
         public static Image GenerateImage(string src, int height, int wdpc)
 94                    Bitmap img = new Bitmap(src.Length * wdpc, height);
 96验证码类(转)
    





            
             Graphics g = Graphics.FromImage(img);
 97验证码类(转)
    





            
             g.Clear(Color.White);
 98验证码类(转)
    





            
 
 99验证码类(转)
    





            
             Random rand = new Random();
100验证码类(转)
    





            
             for (int i = 0; i < 25; i++)
101                            int x1 = rand.Next(img.Width);
103验证码类(转)
    





            
                 int x2 = rand.Next(img.Width);
104验证码类(转)
    





            
                 int y1 = rand.Next(img.Height);
105验证码类(转)
    





            
                 int y2 = rand.Next(img.Height);
106验证码类(转)
    





            
 
107验证码类(转)
    





            
                 g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
108验证码类(转)
    





            
             }
109验证码类(转)
    





            
             Font f = new Font("'Segoe UI' 微软雅黑 Verdana 宋体", 14f);
110验证码类(转)
    





            
             Brush b = new LinearGradientBrush(new Rectangle(new Point(00), img.Size), Color.Blue, Color.DarkRed, LinearGradientMode.ForwardDiagonal);
111验证码类(转)
    





            
             for (int i = 0; i < src.Length; i++)
112验证码类(转)
    





            
                 g.DrawString(src[i].ToString(), f, b, wdpc * i.ToSingle(), 0f);
113验证码类(转)
    





            
 
114验证码类(转)
    





            
             g.Save();
115验证码类(转)
    





            
             for (int i = 0; i < 100; i++)
116                            int x = rand.Next(img.Width);
118验证码类(转)
    





            
                 int y = rand.Next(img.Height);
119验证码类(转)
    





            
 
120验证码类(转)
    





            
                 img.SetPixel(x, y, Color.FromArgb(rand.Next()));
121验证码类(转)
    





            
             }
122验证码类(转)
    





            
 
123验证码类(转)
    





            
             return img;
124验证码类(转)
    





            
         }
125验证码类(转)
    





            
     }
126验证码类(转)
    





            
 
127            /// 验证码类型枚举
130验证码类(转)
    





            
     /// </summary>
131验证码类(转)
    





            
     public enum ValidateCodeType
132                     *  
135验证码类(转)
    





            
          *      Number:
136验证码类(转)
    





            
          *        ASCII Code 48 - 57
137验证码类(转)
    





            
          *        
138验证码类(转)
    





            
          *      Letter:
139验证码类(转)
    





            
          *        Uppercase
140验证码类(转)
    





            
          *          ASCII Code 65 - 90
141验证码类(转)
    





            
          *        Lowercase
142验证码类(转)
    





            
          *          ASCII Code 97 - 122
143验证码类(转)
    





            
          *      
144验证码类(转)
    





            
          *      Symbol:
145验证码类(转)
    





            
          *          ASCII Code 33 - 126 except Number and Letter
146验证码类(转)
    





            
          *          
147验证码类(转)
    





            
          *      Chinese:
148验证码类(转)
    





            
          *          Unicode 0xA1A1-0xF7FE
149验证码类(转)
    





            
          */
150                /// 数字
152验证码类(转)
    





            
         /// </summary>
153验证码类(转)
    





            
         Number = 1,
154                /// 字母
156验证码类(转)
    





            
         /// </summary>
157验证码类(转)
    





            
         Letter = 2,
158                /// 符号
160验证码类(转)
    





            
         /// </summary>
161验证码类(转)
    





            
         Symbol = 4,
162                /// 汉字
164验证码类(转)
    





            
         /// </summary>
165验证码类(转)
    





            
         Chinese = 8
166验证码类(转)
    





            
     }
167验证码类(转)
    





            
     #endregion
168验证码类(转)
    





            
 
169验证码类(转)
    





            
     public static partial class Extension
170                    public static double ToDouble(this IConvertible o)
173                    return Convert.ToDouble(o);
175验证码类(转)
    





            
         }
176验证码类(转)
    





            
 
177验证码类(转)
    





            
         public static int ToInt32(this IConvertible o)
178                    return Convert.ToInt32(o);
180验证码类(转)
    





            
         }
181验证码类(转)
    





            
 
182验证码类(转)
    





            
         public static float ToSingle(this IConvertible o)
183                    return Convert.ToSingle(o);
185验证码类(转)
    





            
         }
186验证码类(转)
    





            
         #endregion
187验证码类(转)
    





            
     }
188验证码类(转)
    





            
 }

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-02-24
  • 2021-08-04
  • 2021-07-08
  • 2021-10-05
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-12-19
  • 2022-12-23
  • 2022-02-03
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案