C#Web認証コードの生成

15413 ワード



  
    
#region
public static class CheckCodeGenerator
{
public static string CreateRandomCode( int codeCount)
{
string allChar = " 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z " ;
string [] allCharArray = allChar.Split( ' , ' );
string randomCode = "" ;
int temp = - 1 ;

Random rand
= new Random();
for ( int i = 0 ; i < codeCount; i ++ )
{
if (temp != - 1 )
{
rand
= new Random(i * temp * (( int )DateTime.Now.Ticks));
}
int t = rand.Next( 35 );
if (temp == t)
{
return CreateRandomCode(codeCount);
}
temp
= t;
randomCode
+= allCharArray[t];
}
return randomCode;
}

public static byte [] CreateImage( string checkCode)
{
byte [] buffer;
if (checkCode == null || checkCode.Trim() == String.Empty)
return null ;

System.Drawing.Bitmap image
= new System.Drawing.Bitmap(( int )Math.Ceiling((checkCode.Length * 12.5 )), 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 System.Drawing.Font( " Arial " , 12 , (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
System.Drawing.Drawing2D.LinearGradientBrush brush
= new System.Drawing.Drawing2D.LinearGradientBrush( new Rectangle( 0 , 0 , image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f , true );
g.DrawString(checkCode, font, brush,
2 , 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 );

System.IO.MemoryStream ms
= new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
buffer
= ms.ToArray();
}
finally
{
g.Dispose();
image.Dispose();
}
return buffer;
}

}
#endregion