Maison > développement back-end > Tutoriel C#.Net > Comment générer et utiliser le code de vérification .net

Comment générer et utiliser le code de vérification .net

高洛峰
Libérer: 2017-01-13 15:02:59
original
1494 Les gens l'ont consulté

Petite classe : le rôle du code de vérification :

Il y a quelques années, la plupart des sites Web, forums et autres n'avaient pas de codes de vérification, car pour les utilisateurs ordinaires, les codes de vérification ne faisaient qu'augmenter les opérations des utilisateurs. expérience. Mais plus tard, divers robots spammeurs, robots de vote et robots d'enregistrement malveillants sont apparus les uns après les autres, ce qui a considérablement augmenté la charge sur le site Web et a également apporté une grande quantité de données indésirables à la base de données du site Web. Afin d'éviter la destruction de divers programmes de robots, les programmeurs ont mis au point des codes de vérification qui ne peuvent être reconnus que par l'œil humain et ne sont pas facilement reconnus par les programmes !

Le code de vérification est une image, avec des lettres, des chiffres et même des caractères chinois comme contenu de l'image. Le contenu d'une telle image est facile à identifier à l'œil humain, mais le programme ne le pourra pas. pour l'identifier. Avant d'effectuer des opérations de base de données (telles que la vérification de la connexion, le vote, la publication, la réponse, l'inscription, etc.), le programme vérifie d'abord si le code de vérification soumis par le client est le même que le contenu de l'image. il effectuera des opérations de base de données. Si c'est différent, cela provoquera une erreur de code de vérification, aucune opération de base de données n'est effectuée. De cette façon, toutes sortes de programmes robotiques seront bloqués !

Mais avec le développement de l'informatique, les technologies telles que la reconnaissance de formes deviennent de plus en plus matures, de sorte que la personne qui écrit le programme du robot peut reconnaître le contenu écrit directement dans l'image via le programme, puis le soumettre. au serveur pour vérification. Le code sera inutile. Afin d'empêcher la reconnaissance des programmes robotiques, la génération d'images de codes de vérification se développe également constamment, ajoutant des points d'interférence, des lignes d'interférence, des déformations de texte, des changements de position d'angle, des couleurs différentes... Diverses technologies pour empêcher la reconnaissance informatique sont également appliquées à codes de vérification. Dans la compétition entre ces deux technologies, le code de vérification que nous voyons actuellement est formé. De nombreuses personnes se plaignent déjà : « De quel type de code de vérification s'agit-il ? L'œil humain ne peut pas dire de quoi il s'agit.

Comprenant le rôle du code de vérification, écrivons un exemple simple de génération et d'utilisation du code de vérification

Comment générer et utiliser le code de vérification .net

Créez d'abord une page pour afficher le code de vérification et Déterminer si le code de vérification est saisi correctement

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
 <title></title>
 <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
 <script type="text/javascript">
 //点击切换验证码
 function f_refreshtype() {
 var Image1 = document.getElementById("img");
 if (Image1 != null) {
 Image1.src = Image1.src + "?";
 }
 } 
 </script>
</head>
<body>
 <form id="form1" runat="server">
 <div>
 <table>
 <tr>
 <td>
  <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
 </td>
 <td>
  <img  src="png.aspx" id="img" onclick="f_refreshtype()" / alt="Comment générer et utiliser le code de vérification .net" >
 </td>
 <td>
  <asp:Button ID="Button1" runat="server" Text="确定" />
 </td>
 </tr>
 </table>
 </div>
 </form>
</body>
</html>
Copier après la connexion

Le code de vérification est vérifié en arrière-plan de cette page

protected void Page_Load(object sender, EventArgs e)
{
//生成的验证码被保存到session中
if (Session["CheckCode"] != null)
{
string checkcode = Session["CheckCode"].ToString();
if (this.TextBox1.Text == checkcode)
{
 ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert(&#39;验证码输入正确!&#39;)", true);
}
else
{
 ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert(&#39;验证码输入错误!&#39;)", true);
}
}
 
}
Copier après la connexion

Générer la page de code de vérification png.aspx

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
CreateCheckCodeImage(GenerateCheckCodes(4));
}
}
public void ShowAuthCode(Stream stream, out string code)
{
Random random = new Random();
code = random.Next(1000, 9999).ToString();
 
Bitmap bitmap = CreateAuthCode(code);
bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Gif);
}
 
private string GenerateCheckCodes(int iCount)
{
int number;
string checkCode = String.Empty;
int iSeed = DateTime.Now.Millisecond;
System.Random random = new Random(iSeed);
for (int i = 0; i < iCount; i++)
{
number = random.Next(10);
checkCode += number.ToString();
}
Session["CheckCode"] = checkCode;
return checkCode;
}
 
private Bitmap CreateAuthCode(string str)
{
Font fn = new Font("宋体", 12);
Brush forecolor = Brushes.Black;
Brush bgcolor = Brushes.White;
PointF pf = new PointF(5, 5);
Bitmap bitmap = new Bitmap(100, 25);
Rectangle rec = new Rectangle(0, 0, 100, 25);
Graphics gh = Graphics.FromImage(bitmap);
gh.FillRectangle(bgcolor, rec);
gh.DrawString(str, fn, forecolor, pf);
return bitmap;
}
 
private void CreateCheckCodeImage(string checkCode)
{
if (checkCode == null || checkCode.Trim() == String.Empty)
return;
int iWordWidth = 15;
int iImageWidth = checkCode.Length * iWordWidth;
Bitmap image = new Bitmap(iImageWidth, 20);
Graphics g = Graphics.FromImage(image);
try
{
//生成随机生成器 
Random random = new Random();
//清空图片背景色 
g.Clear(Color.White);
 
//画图片的背景噪音点
for (int i = 0; i < 20; 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);
}
 
//画图片的背景噪音线 
for (int i = 0; i < 2; i++)
{
 int x1 = 0;
 int x2 = image.Width;
 int y1 = random.Next(image.Height);
 int y2 = random.Next(image.Height);
 if (i == 0)
 {
 g.DrawLine(new Pen(Color.Gray, 2), x1, y1, x2, y2);
 }
 
}
 
 
for (int i = 0; i < checkCode.Length; i++)
{
 
 string Code = checkCode[i].ToString();
 int xLeft = iWordWidth * (i);
 random = new Random(xLeft);
 int iSeed = DateTime.Now.Millisecond;
 int iValue = random.Next(iSeed) % 4;
 if (iValue == 0)
 {
 Font font = new Font("Arial", 13, (FontStyle.Bold | System.Drawing.FontStyle.Italic));
 Rectangle rc = new Rectangle(xLeft, 0, iWordWidth, image.Height);
 LinearGradientBrush brush = new LinearGradientBrush(rc, Color.Blue, Color.Red, 1.5f, true);
 g.DrawString(Code, font, brush, xLeft, 2);
 }
 else if (iValue == 1)
 {
 Font font = new System.Drawing.Font("楷体", 13, (FontStyle.Bold));
 Rectangle rc = new Rectangle(xLeft, 0, iWordWidth, image.Height);
 LinearGradientBrush brush = new LinearGradientBrush(rc, Color.Blue, Color.DarkRed, 1.3f, true);
 g.DrawString(Code, font, brush, xLeft, 2);
 }
 else if (iValue == 2)
 {
 Font font = new System.Drawing.Font("宋体", 13, (System.Drawing.FontStyle.Bold));
 Rectangle rc = new Rectangle(xLeft, 0, iWordWidth, image.Height);
 LinearGradientBrush brush = new LinearGradientBrush(rc, Color.Green, Color.Blue, 1.2f, true);
 g.DrawString(Code, font, brush, xLeft, 2);
 }
 else if (iValue == 3)
 {
 Font font = new System.Drawing.Font("黑体", 13, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Bold));
 Rectangle rc = new Rectangle(xLeft, 0, iWordWidth, image.Height);
 LinearGradientBrush brush = new LinearGradientBrush(rc, Color.Blue, Color.Green, 1.8f, true);
 g.DrawString(Code, font, brush, xLeft, 2);
 }
}
//////画图片的前景噪音点 
//for (int i = 0; i < 8; 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.Gif);
Response.ClearContent();
Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}
Copier après la connexion

Plus Pour les articles liés à la génération et à l'utilisation du code de vérification .net, veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal