Wenn wir das Benutzeranmeldemodul entwerfen, verwenden wir häufig Bestätigungscodes, die böswilliges Knacken durch Hackersoftware wirksam verhindern können. Jetzt werde ich den Quellcode meiner häufig verwendeten Bestätigungscodes offenlegen.
Anwendung:
1. Fügen Sie dem Webprojekt eine Klasse hinzu, z. B. „CreateImage.cs“, und kopieren Sie dann den von mir veröffentlichten Quellcode hinein.
2. Erstellen Sie ein neues Webformular, z. B. „Image.aspx“, und fügen Sie den Code „CreateImage.DrawImage ();“ hinzu. Vergessen Sie natürlich nicht, einen Verweis auf die Klasse hinzuzufügen! !
3. Fügen Sie den folgenden Javascript-Code an der entsprechenden Position auf der Seite hinzu (wo Sie den Bestätigungscode einfügen möchten) und alles ist in Ordnung.
Der Quellcode lautet wie folgt:
///
///Bestätigungscode-Modul///
öffentliche Klasse CreateImage
{
öffentliches statisches void DrawImage()
{
CreateImage img=new CreateImage();
HttpContext.Current.Session["CheckCode"]=img.RndNum(4);
img.CreateImages(HttpContext.Current.Session["CheckCode"].ToString());
}
///
/// Verifizierungsbild generieren ///
/// Zeichen überprüfen private void CreateImages(string checkCode)
{
int iwidth = (int)(checkCode.Length * 13);
System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 23);
Grafiken g = Graphics.FromImage(image);
g.Klar (Farbe.Weiß);
//Farbe definieren Color[] c = {Color.Black,Color.Red,Color.DarkBlue,Color.Green,Color.Orange,Color.Brown,Color.DarkCyan,Color.Purple};
//Schriftart definieren string[] Schriftart = {"Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体"};
Zufälliger Rand = new Random();
// Rauschpunkte nach dem Zufallsprinzip ausgeben 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);
}
//Verifizierungscode-Zeichen in verschiedenen Schriftarten und Farben ausgeben for(int i=0;i
{
int cindex = rand.Next(7);
int findex = rand.Next(5);
Schriftart f = new System.Drawing.Font(font[findex], 10, System.Drawing.FontStyle.Bold);
Pinsel b = new System.Drawing.SolidBrush(c[cindex]);
int ii=4;
if((i+1)%2==0)
{
ii=2;
}
g.DrawString(checkCode.Substring(i,1), f, b, 3+(i*12), ii);
}
//Zeichne einen Rand g.DrawRectangle(new Pen(Color.Black,0),0,0,image.Width-1,image.Height-1);
//Ausgabe an den Browser 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();
}
///
/// Zufällige Buchstaben generieren ///
/// Anzahl der generierten Buchstaben /// String
privater String RndNum(int VcodeNum)
{
string Vchar = "0,1,2,3,4,5,6,7,8,9";
string[] VcArray = Vchar.Split(',') ;
string VNum = "" ; // Da der String sehr kurz ist, wird StringBuilder nicht benötigt int temp = -1 ; // Den letzten Zufallswert aufzeichnen und versuchen, die Erzeugung mehrerer identischer Zufallszahlen zu vermeiden // Verwenden Sie einen einfachen Algorithmus, um die Generierung sicherzustellen verschiedene Zufallszahlen Random rand =new Random();
for ( int i = 1 ; i < VcodeNum+1 ; i++ )
{
if (temp != -1)
{
rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));
}
int t = rand.Next(VcArray.Length );
if (temp != -1 && temp == t)
{
return RndNum(VcodeNum);
}
temp = t;
VNum += VcArray[t];
}
return VNum;
}