08-16-2011، 02:03 PM
سلام
کلاس زیر یک نمونه ساده و خوب برای ساخت تصاویر captcha هستش.
کلاس زیر یک نمونه ساده و خوب برای ساخت تصاویر captcha هستش.
کد:
public class WebCaptcha
{
public string Value { get; set; }
public Image CaptchaImg { get; set; }
public bool CaseSensitive { get; set; }
private Random rndm;
public bool IsValid(string input)
{
return CaseSensitive?this.Value.Equals(input):this.Value.Equals(input, System.StringComparison.OrdinalIgnoreCase);
}
public WebCaptcha()
{
this.rndm = new Random();
char[] rmcarr = this.GetRandomCArr(6);
this.Value = new string(rmcarr);
this.CreateImage(rmcarr);
}
private void CreateImage(char[] rmcarr)
{
int FontSize = 20;
Bitmap bmp = new Bitmap(140, 55);
Graphics gImage = Graphics.FromImage(bmp);
gImage.FillRectangle(Brushes.WhiteSmoke, 0, 0, bmp.Width, bmp.Height);
//Draw lines
for (int i = 0; i < 200; i = i + 5)
{
gImage.DrawLine(Pens.LightGray, new Point(0, i + 5), new Point(i + 5, 0));
gImage.DrawLine(Pens.LightGray, new Point(0, 60 - (i + 5)), new Point(i + 5, 60));
}
//Draw random text
for (int i = 0; i < rmcarr.Length; i++)
{
gImage.DrawString(rmcarr[i].ToString(), new Font(FontFamily.GenericSansSerif, FontSize,FontStyle.Bold), GetRandomBrushes(), new PointF(5 + i * FontSize, 5 + (rndm.Next() % 2 == 0 ? 0 : 15)));
}
this.CaptchaImg = bmp;
}
//Get random char array
private char[] GetRandomCArr(int length)
{
var mch = Enumerable.Range(35, 2).Select(c => (char)c).Union(
Enumerable.Range(49, 9).Select(c => (char)c)).Union(
Enumerable.Range(64, 27).Select(c => (char)c)).Union(
Enumerable.Range(97, 26).Select(c => (char)c)).ToArray();
var mcstr = Enumerable.Range(1, length).Select(a => mch[rndm.Next() % mch.Length]).ToArray();
return mcstr;
}
//Get a random brush
private Brush GetRandomBrushes()
{
var mbrsharr = new Brush[] { Brushes.Blue,Brushes.BlueViolet, Brushes.Green, Brushes.Red,Brushes.Purple, Brushes.DarkGreen, Brushes.Brown, Brushes.Black };
return mbrsharr[rndm.Next() % mbrsharr.Length];
}
}
معبودا مرا ببخش، بخاطر درهایی که کوبیدم ولی هیچکدام خانه تو نبود ...