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