عندما نقوم بتصميم وحدة تسجيل دخول المستخدم، غالبًا ما نستخدم رموز التحقق، والتي يمكن أن تمنع بشكل فعال الاختراق الضار بواسطة برامج القرصنة. والآن سأكشف عن الكود المصدري لرموز التحقق شائعة الاستخدام.
كيفية الاستخدام:
1. أضف فئة إلى مشروع الويب، مثل "CreateImage.cs"، ثم انسخ كود المصدر الذي نشرته فيه؛
2. قم بإنشاء نموذج ويب جديد، مثل "Image.aspx"، وأضف الكود "CreateImage.DrawImage ();" إلى Page_Load بالطبع، لا تنس إضافة مرجع إلى الفصل الدراسي! !
3. أضف كود جافا سكريبت التالي إلى الموضع المناسب في الصفحة (حيث تريد وضع رمز التحقق) ولا بأس.
كود المصدر هو كما يلي:
///
///وحدة رمز التحقق///
فئة عامة CreateImage
{
DrawImage () الفراغ العام الثابت
{
CreateImage img=new CreateImage();
HttpContext.Current.Session["CheckCode"]=img.RndNum(4);
img.CreateImages(HttpContext.Current.Session["CheckCode"].ToString());
}
///
/// إنشاء صورة التحقق ///
/// التحقق من الأحرف إنشاء صور باطلة خاصة (رمز التحقق من السلسلة)
{
int iwidth = (int)(checkCode.Length * 13);
System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 23);
الرسومات ز = Graphics.FromImage(image);
g.Clear(Color.White);
// تحديد اللون Color[] c = {Color.Black,Color.Red,Color.DarkBlue,Color.Green,Color.Orange,Color.Brown,Color.DarkCyan,Color.Purple};
// تحديد الخط string[] الخط = {"Verdana"، "Microsoft Sans Serif"، "Comic Sans MS"، "Arial"، "宋体"}؛
راند عشوائي = جديد عشوائي ()؛
// نقاط ضوضاء الإخراج بشكل عشوائي for(int i=0;i<50;i++)
{
int x = rand.Next(image.Width);
int y = rand.Next(image.Height);
g.DrawRectangle(new Pen(Color.LightGray, 0),x,y,1,1);
}
// إخراج أحرف رمز التحقق بخطوط وألوان مختلفة for(int i=0;i
{
int cindex = rand.Next(7);
int findex = rand.Next(5);
Font f = new System.Drawing.Font(font[findex], 10, System.Drawing.FontStyle.Bold);
Brush b = new System.Drawing.SolidBrush(c[cindex]);
كثافة العمليات الثانية=4;
إذا((i+1)%2==0)
{
الثاني=2;
}
g.DrawString(checkCode.Substring(i,1), f, b, 3+(i*12), ii);
}
// ارسم حدودًا g.DrawRectangle(new Pen(Color.Black,0),0,0,image.Width-1,image.Height-1);
// الإخراج إلى المتصفح System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
HttpContext.Current.Response.ClearContent();
//Response.ClearContent();
HttpContext.Current.Response.ContentType = "image/Jpeg";
HttpContext.Current.Response.BinaryWrite(ms.ToArray());
g.Dispose();
image.Dispose();
}
///
/// توليد رسائل عشوائية ///
/// عدد الحروف المولدة /// string
سلسلة خاصة RndNum(int VcodeNum)
{
سلسلة Vchar = "0,1,2,3,4,5,6,7,8,9";
string[] VcArray = Vchar.Split(',') ;
string VNum = "" ; // نظرًا لأن السلسلة قصيرة جدًا، فليس هناك حاجة إلى StringBuilder int temp = -1 ; // سجل القيمة العشوائية الأخيرة وحاول تجنب إنتاج عدة أرقام عشوائية متطابقة // استخدم خوارزمية بسيطة لضمان الإنشاء أرقام عشوائية مختلفة Random rand =new Random();
من أجل ( int i = 1 ; i < VcodeNum+1 ; i++ )
{
إذا (درجة الحرارة ! = -1)
{
rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));
}
int t = rand.Next(VcArray.Length );
إذا (درجة الحرارة != -1 && درجة الحرارة == ر)
{
إرجاع RndNum(VcodeNum);
}
درجة الحرارة = ر؛
VNum += VcArray[t];
}
إرجاع رقم VNum؛
}