Lorsque nous concevons le module de connexion utilisateur, nous utilisons souvent des codes de vérification, qui peuvent empêcher efficacement le piratage malveillant par un logiciel pirate. Je vais maintenant divulguer le code source de mes codes de vérification couramment utilisés.
Comment utiliser :
1. Ajoutez une classe au projet Web, telle que « CreateImage.cs », puis copiez-y le code source que j'ai publié ;
2. Créez un nouveau formulaire Web, tel que « Image.aspx », et ajoutez le code « CreateImage.DrawImage (); » à Page_Load. Bien sûr, n'oubliez pas d'ajouter une référence à la classe ! !
3. Ajoutez le code javascript suivant à la position appropriée sur la page (là où vous souhaitez mettre le code de vérification) et c'est OK.
Le code source est le suivant :
///
///Module de code de vérification///
classe publique CreateImage
{
vide statique public DrawImage()
{
CreateImage img=nouveau CreateImage();
HttpContext.Current.Session["CheckCode"]=img.RndNum(4);
img.CreateImages(HttpContext.Current.Session["CheckCode"].ToString());
}
///
/// Générer une image de vérification ///
/// Vérifier les caractères privés void CreateImages (string checkCode)
{
int iwidth = (int)(checkCode.Length * 13);
Image System.Drawing.Bitmap = new System.Drawing.Bitmap (iwidth, 23);
Graphiques g = Graphics.FromImage(image);
g.Clair (Couleur.Blanc);
//Définir la couleur Color[] c = {Color.Black,Color.Red,Color.DarkBlue,Color.Green,Color.Orange,Color.Brown,Color.DarkCyan,Color.Purple};
//Définir la chaîne de police[] font = {"Verdana","Microsoft Sans Serif","Comic Sans MS","Arial","宋体"};
Rand aléatoire = new Random();
//Sortez aléatoirement des points de bruit pour (int i=0;i<50;i++)
{
int x = rand.Next(image.Width);
int y = rand.Next(image.Hauteur);
g.DrawRectangle(new Pen(Color.LightGray, 0),x,y,1,1);
}
//Sortie des caractères du code de vérification dans différentes polices et couleurs pour (int i=0;i
{
int cindex = rand.Next(7);
int findex = rand.Next(5);
Police f = new System.Drawing.Font(font[findex], 10, System.Drawing.FontStyle.Bold);
Brosse b = new System.Drawing.SolidBrush(c[cindex]);
int ii=4 ;
si((i+1)%2==0)
{
ii = 2 ;
}
g.DrawString(checkCode.Substring(i,1), f, b, 3+(i*12), ii);
}
//Dessine une bordure g.DrawRectangle(new Pen(Color.Black,0),0,0,image.Width-1,image.Height-1);
//Sortie vers le navigateur System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
HttpContext.Current.Response.ClearContent();
//Réponse.ClearContent();
HttpContext.Current.Response.ContentType = "image/Jpeg" ;
HttpContext.Current.Response.BinaryWrite(ms.ToArray());
g.Dispose();
image.Dispose();
}
///
/// Générer des lettres aléatoires ///
/// Nombre de lettres générées /// chaîne
chaîne privée RndNum (int VcodeNum)
{
chaîne Vchar = "0,1,2,3,4,5,6,7,8,9" ;
string[] VcArray = Vchar.Split(',') ;
string VNum = "" ; // Puisque la chaîne est très courte, StringBuilder n'est pas nécessaire int temp = -1 ; // Enregistrez la dernière valeur aléatoire et essayez d'éviter de produire plusieurs nombres aléatoires identiques // Utilisez un algorithme simple pour garantir Générer différents nombres aléatoires Random rand =new Random();
pour ( int i = 1 ; i < VcodeNum+1 ; i++ )
{
si (temp != -1)
{
rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));
}
int t = rand.Next(VcArray.Length );
si (temp != -1 && temp == t)
{
retourner RndNum (VcodeNum);
}
température = t ;
VNum += VcArray[t];
}
renvoyer NuméroV ;
}