ASP.Net MVC 生成安全驗證碼


---------html      

<td>驗證碼:</td>

            < td >
                < img  src="/Login/CheckCode?ID=1" id="imgCode" alt="單擊可刷新" onclick="ClickRemoveChangeCode()"  />
                < div  style="float:right; margin-top: 5px;">
                    < a  href="javascript:void(0)" onclick="ClickRemoveChangeCode();return false;">看不清,換一張</ a >
                </ div >
            </ td >

-----------jquery

1
2
3
4
5
//單擊重新改變驗證碼
function  ClickRemoveChangeCode() {
     var  code = $( "#imgCode" ).attr( "src" );
     $( "#imgCode" ).attr( "src" , code +  "1" );
}   

 

 

 

------------asp.net mvc 返回文件地址    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/// <summary>
/// 驗證碼的校驗
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public  ActionResult CheckCode()
{
     //生成驗證碼
     ValidateCode validateCode =  new  ValidateCode();
     string  code = validateCode.CreateValidateCode(4);
     Session[ "ValidateCode" ] = code;
     byte [] bytes = validateCode.CreateValidateGraphic(code);
     return  File(bytes,  @"image/jpeg" );
}
 

/// <summary>
/// 驗證驗證碼是否正確
/// </summary>
/// <param name="num"></param>
/// <returns></returns>
public bool CheckValidateCode(string num) {

string cnum = Session["ValidateCode"] == null ? "": Session["ValidateCode"].ToString();

if (num== cnum && !string.IsNullOrEmpty(num))
{
     return true;
}
 else
{
    return false;
}
}

 

----生成驗證碼和繪制背景的類

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
public  class  ValidateCode
     {
         public  ValidateCode()
         {
         }
         /// <summary>
         /// 驗證碼的最大長度
         /// </summary>
         public  int  MaxLength
         {
             get  return  10; }
         }
         /// <summary>
         /// 驗證碼的最小長度
         /// </summary>
         public  int  MinLength
         {
             get  return  1; }
         }
         /// <summary>
         /// 生成驗證碼
         /// </summary>
         /// <param name="length">指定驗證碼的長度</param>
         /// <returns></returns>
         public  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;
         }
 
         //C# MVC 升級版
         /// <summary>
         /// 創建驗證碼的圖片
         /// </summary>
         /// <param name="containsPage">要輸出到的page對象</param>
         /// <param name="validateNum">驗證碼</param>
         public  byte [] CreateValidateGraphic( string  validateCode)
         {
             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);
                 //輸出圖片流
                 return  stream.ToArray();
             }
             finally
             {
                 g.Dispose();
                 image.Dispose();
             }
         }
 
         /// <summary>
         /// 得到驗證碼圖片的長度
         /// </summary>
         /// <param name="validateNumLength">驗證碼的長度</param>
         /// <returns></returns>
         public  static  int  GetImageWidth( int  validateNumLength)
         {
             return  ( int )(validateNumLength * 12.0);
         }
         /// <summary>
         /// 得到驗證碼的高度
         /// </summary>
         /// <returns></returns>
         public  static  double  GetImageHeight()
         {
             return  22.5;
         }
 
     }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM