C #을 일반적인 방법 - 생성 된 코드

다른 일반적인 방법은 다음을 참조하십시오 https://www.cnblogs.com/zhuanjiao/p/12060937.html

원본 링크 : https://www.cnblogs.com/morang/p/4051935.html

에있어서, 상기 사용이; 
하여 System.Drawing을 사용하여, 
가에서는 System.Security.Cryptography를 사용하여, 
System.Web를 사용하여, 

네임 스페이스 Common.RandomService을 
{ 
	/// <요약> 
	/// 클래스 코드 
	/// </ 요약> 
	공용 클래스 RandHelper 
    { 
        # 지역 난수 생성 
        /// <요약> 
        /// 난수를 생성 
        /// </ 요약> 
        /// <PARAM NAME = "길이"> 생성 길이 </ PARAM> 
        공공 정적 문자열 수치가 (INT 길이) 
        { 
            복귀 숫자가 (false로 길이) 
        } 

        /// <요약> 
        /// 난수를 생성 
        /// </ 요약> 
        /// <매개 변수 이름 = "길이"> 생성 길이 </ PARAM>
        /// <PARAM NAME = "슬립" > 여부 반복 </ PARAM> 피하기 위해 스톱을 생성하기 전에 현재 스레드 
        공용 static (길이 INT, BOOL 슬립) 문자열 번호 
        { 
            IF (절전)을 System.Threading.Thread.Sleep (. 3); 
            문자열 결과 = ""; 
            System.Random 무작위 임의의 새로운 새로운 = (); 
            (; 나는 <길이; INT I = 0 I ++)에 대한 
            { 
                결과 + = Random.Next (10)로 .toString (); 
            } 
            반환 결과; 
        } 

        #endregion의 

        # 지역 랜덤 숫자 생성 
        /// <요약> 
        /// 랜덤 숫자 생성 
        /// </ 요약> 
        /// <PARAM NAME = "IntStr"> 길이를 생성 </ PARAM>
        STR 정적 스트링 공개 (길이의 INT) 
        { 
            (거짓으로의 길이)을 반환 STR; 
        } 

        /// <요약> 
        /// 생성 랜덤 숫자 
        /// </ 요약> 
        /// <PARAM NAME = "길이"> 길이 </ PARAM> 생성 
        /// <PARAM NAME = "절전"> 여부 반복 </ PARAM> 피하기 위해 스톱을 생성하기 전에 현재 스레드 
        공용 static 문자열 str을 (길이 INT, BOOL 슬립) 
        { 
            만약에 휴면 시스템 .Threading.Thread.Sleep (3.) 
            . '1'. '3'. '4'. '5'. '6'. CHAR [] = 패턴 새로운 새 문자 [{ '0', '2',,,,, '7 '.'8 '.'9 ', 
            'A ','B ','C ','D ','E ''F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 
            'N', 'O', 'P', 'Q', ' R ','S ','T ','U ','V ','W ','X '를,'Y ','Z '};
            결과 = 문자열 "";
            N = INT Pattern.Length;
            랜덤 랜덤 새로운 새 = System.Random (~ 검사되지 않은 ((int)를 DateTime.Now.Ticks)); 
            (; 나는 <길이 I ++ INT I = 0)에 대한 
            { 
                INT Random.Next RND = (0, N-) 
                결과 + 패턴 = RND] 
            } 
            복귀 결과; 
        } 
        #endregion의 

        # 지역 난수는 랜덤 순수한 문자 생성은 
        /// <요약> 
        /// 난수는 랜덤 순수한 문자 생성 
        /// </ 요약> 
        = /// <PARAM 이름 "IntStr"> 길이를 생성 </ PARAM> 
        공공 정적 (길이 INT) 문자열 Str_char 
        { 
            (거짓, 길이)를 반환 Str_char; 
        } 

        /// <요약>
        /// 임의의 숫자는 임의의 순수한 문자를 생성
            I ++) { 
                INT RND random.Next = (0, N); 
                + = 패턴 [RND]을 발생; 
            } 
            결과를 반환; 
        }
            문자열 결과 = ""; 
            N = INT Pattern.Length; 
            System.Random 무작위 새로운 랜덤 (~ 체크되지 않은 ((int)를 DateTime.Now.Ticks를)) =;
        #endregion 
    } 

    /// <요약> 
    /// 이미지 검증 클래스 
    /// </ 요약> 
    공용 클래스 YZMHelper 
    { 
        # 지역 민간 분야 
        개인 문자열 텍스트, 
        개인 비트 맵 이미지, 
        개인 letterCount = INT 4;. // 자리 코드 
        개인 INT letterWidth = 16; 폭 // 단일 폰트 
        전용 INT letterHeight = 20;의 // 단일 폰트 높이 범위 
        개인 정적 바이트 [] = randb 새로운 바이트 [4];
        개인 정적 RNGCryptoServiceProvider 랜드 = 새로운 RNGCryptoServiceProvider (); 
        개인 글꼴 [] 글꼴 = 
    { 
       새 글꼴 (새 FontFamily를 ( "굴림"), 10 + 다음 (1), System.Drawing.FontStyle.Regular),
       새로운 폰트 (새 FontFamily를 ( "조지아"), 다음으로 + 10 (1), System.Drawing.FontStyle.Regular), 
       새로운 폰트 (새 FontFamily를 ( "굴림"), 다음으로 + 10 (1), System.Drawing.FontStyle .Regular), 
       새로운 폰트 (새 FontFamily를 ( "만화 산세 MS"), 다음으로 + 10 (1), System.Drawing.FontStyle.Regular) 
    }; 
        #endregion 

        # 지역公有属性
        /// <요약> 
        ///验证码
        /// </ 요약> 
        공공 문자열 텍스트 
        공공 비트 맵 이미지 
        { 
            GET {this.image를 반환;
            얻을 {this.text를 반환; } 
        } 

        /// <요약> 
        ///验证码图片
        /// </ 요약> 
        #endregion 

        # 지역构造函数
        공개 YZMHelper () 
        { 
            HttpContext.Current.Response.Expires = 0; 
            HttpContext.Current.Response.Buffer = TRUE; 
            HttpContext.Current.Response.ExpiresAbsolute DateTime.Now.AddSeconds = (-1); 
            HttpContext.Current.Response.AddHeader ( "에서 Pragma", "노 캐시"); 없다 
            HttpContext.Current.Response.CacheControl = "노 캐시"; 없다 
            this.text = RandHelper.Number (4); 
            createImage의 (); 
        }
        #endregion 

        # 지역私有方法
        /// <요약> 
        ///获得下一个随机数
        /// </ 요약> 
        /// < 
        개인 다음의 정적 INT (INT 최대) 
        { 
            rand.GetBytes (RandB) 
            INT 값 = BitConverter.ToInt32 (RandB 0) 
            . 값 = % 값 (최대 + 1) 
            IF (값 <0) - 값 = 값; 
            리턴 값; 
        } 

        /// <요약> 
        다음 난수 /// 수득 
        /// </ 요약> 
        /// <PARAM NAME = "분"> 최소 </ PARAM> 
        /// <PARAM NAME = "MAX"> 최대 </ PARAM>
        다음 (INT 최소, 최대 INT) INT 개인 정적 
        { 
            INT 다음 값 = (최대 - 최소) + 분; 
            값을 반환; 
        } 
        #endregion 

        # 지역公共方法
        /// <요약> 
        ///绘制验证码 
        /// </ 요약> 
        공개 무효 경우는 createImage ()
        { 
            INT int_ImageWidth = this.text.Length * letterWidth; 
            비트 맵 이미지 = 새로운 맵 (int_ImageWidth, letterHeight); 
            g = Graphics.FromImage 그래픽 (이미지); 
            g.Clear (Color.White); 
            위한 (INT 난 = 0; I <2; I ++) 
            { 
                INT X1은 다음 (image.Width - 1); 
                INT X2는 다음 (image.Width - 1);
                Y1 = INT 다음 (image.Height - 1); 
                Y2 = INT 다음 (image.Height - 1); 
                g.DrawLine (새로운 펜 (Color.Silver), X1, Y1, X2, Y2); 
            } 
            INT _x = -12, _y = 0;
            대 (INT int_index = 0; int_index <this.text.Length; int_index ++) 
            { 
                _x + = 다음 (12, 16); 
                다음 _y = (-2, 2); 
                문자열 str_char = this.text.Substring (int_index, 1); 
                str_char = 다음 (1) == 1? str_char.ToLower () str_char.ToUpper (); 
                브러시 newBrush 새로운 SolidBrush을 = (GetRandomColor ()); 
                포인트 thePos 새로운 포인트 (_x, _y를) =; 
                g.DrawString (str_char 폰트 [다음 (fonts.Length - 1)] newBrush, thePos);
            } 
            에 대해 INT (I = 0; I <10; I ++) 
            { 
                INT (X) = 다음 (image.Width - 1); 
                INT Y가 다음 (image.Height - 1);
                image.SetPixel (X, Y, Color.FromArgb (다음의 (0, 255), 다음의 (0, 255), 다음의 (0, 255))); 
            } 
            이미지 TwistImage (화상 사실, 다음 (1, 3),이어서 (4, 6)) =; 
            g.DrawRectangle (새로운 펜 (Color.LightGray, 1) 0, 0, int_ImageWidth - 1 (letterHeight - 1)); 
            this.image는 이미지 =; 
        } 

        /// <요약> 
        ///字体随机颜色
        /// </ 요약> 
        공공 컬러 GetRandomColor () 
        { 
            랜덤 RandomNum_First = 새로운 무작위 ((int)를 DateTime.Now.Ticks); 
            System.Threading.Thread.Sleep (RandomNum_First.Next (50));
            임의 RandomNum_Sencond 새로운 랜덤 ((int)를 DateTime.Now.Ticks를) =; 
            INT int_Red = RandomNum_First.Next (180); 
            INT = int_Green RandomNum_Sencond.Next (180) 
            INT int_Blue = (+ int_Green int_Red> 300) :? 0 - 400 int_Red - int_Green; 
            int_Blue = (int_Blue> ? 255) 255 : int_Blue; 
            창 Color.FromArgb (int_Red, int_Green, int_Blue) 
        } 

        /// <요약> 
        /// 사인 웨이브 찌그러 
        /// </ 요약> 
        /// <PARAM NAME = "srcBmp "> 이미지 경로 </ PARAM> 
        /// <PARAM NAME ="bXDir는 "> 왜곡되도록 선택되어 있으면 true </ PARAM> 
        /// <PARAM NAME ="nMultValue "> 복수 웨이브 진폭수록 왜곡의 정도 더 일반적. 3 </ PARAM> 
        /// <PARAM NAME = "dPhase "> 파형의 시작 위상 값 간격 [0-2 * PI) </ PARAM>
        공개 System.Drawing.Bitmap TwistImage (비트 맵 srcBmp, BOOL bXDir 이중 dMultValue 이중 dPhase) 
                    이중 DX = 0; 더블 dMultValue,이중 dPhase) 
        {
            이중 PI = 6.283185307179586476925286766559; 
            비트 맵 destBmp 새로운 맵 (srcBmp.Width, srcBmp.Height을) =; 
            그래픽 그래프 = Graphics.FromImage (destBmp); 
            graph.FillRectangle (새 SolidBrush (Color.White), 0, 0, destBmp.Width, destBmp.Height); 
            graph.Dispose (); 
            이중 dBaseAxisLen는 bXDir을 =? (더블) destBmp.Height : (더블) destBmp.Width; 
            경우 (나는 <destBmp.Width; INT 난 = 0 난 ++) 
            { 
                대 (INT J = 0; J <destBmp.Height, J ++) 
                {
                    DX = bXDir? (PI의 * (더블) J) / dBaseAxisLen : (ⅰ)의 PI * (더블) / dBaseAxisLen; 
                    DX = + dPhase; 
                    이 때문에, Math.sin 이중 DY (DX를) =; 
                    INT nOldX = 0 nOldY = 0; 
                    nOldX = bXDir를? I + (INT) (DY dMultValue *) 나; 
                    nOldY = bXDir? J : J + (INT) (DY dMultValue *); 

                    컬러 색 srcBmp.GetPixel = (I, J); 
                    경우 (nOldX> = 0 && nOldX <destBmp.Width 
                     && nOldY> = 0 && nOldY <destBmp.Height) 
                    { 
                        destBmp.SetPixel (nOldX, nOldY 색); 
                    } 
                }
            } 
            srcBmp.Dispose (); 
            destBmp를 반환; 
        } 
        #endregion 
    } 
}

  

추천

출처www.cnblogs.com/zhuanjiao/p/12084110.html