في الوقت الحاضر، أضافت وحدات التسجيل أو تسجيل الدخول أو نشر المعلومات في العديد من الأنظمة وظائف تعليمات برمجية عشوائية لتجنب استخدام برامج التسجيل التلقائي أو برامج النشر التلقائي.
في الواقع، يقوم رمز التحقق باختيار بعض الأحرف بشكل عشوائي ويعرضها على الصفحة في شكل صور. إذا قمت بتنزيل وإرسال حديقة الطماطم، فإن المعلومات المقدمة تعتبر غير صالحة. من أجل منع البرامج التلقائية من تحليل الصور وتحليلها، عادةً ما يتم إنشاء بعض خطوط التداخل بشكل عشوائي على الصورة أو يتم تشويه الأحرف، مما يجعل التعرف التلقائي أكثر صعوبة.
انسخ رمز الكود كما يلي:
الحزمة com.servlet؛
import java.awt.Color;
import java.awt.Font;
استيراد java.awt.Graphics2D؛
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* توليد رمز التحقق العشوائي
* @المؤلف بيتيليو
*
*/
تمتد الفئة العامة ValidateCodeServlet إلى HttpServlet
{
serialVersionUID النهائي الطويل الخاص الثابت = 1L؛
// عرض صورة رمز التحقق.
عرض int الخاص = 60 ؛
// ارتفاع صورة رمز التحقق.
ارتفاع كثافة العمليات الخاصة = 20؛
// عدد الأحرف في رمز التحقق
كود كثافة العمليات الخاص = 4؛
كثافة العمليات الخاصة x=0;
//ارتفاع الخط
ارتفاع الخط الخاص int؛
رمز كثافة العمليات الخاص Y؛
char[] codeSequence = { 'A'، 'B'، 'C'، 'D'، 'E'، 'F'، 'G'، 'H'، 'I'، 'J'،
'K'، 'L'، 'M'، 'N'، 'O'، 'P'، 'Q'، 'R'، 'S'، 'T'، 'U'، 'V'، 'W "،
'X'، 'Y'، 'Z'، '0'، '1'، '2'، '3'، '4'، '5'، '6'، '7'، '8'، '9 ' };
/**
* تهيئة والتحقق من سمات الصورة
*/
يلقي الفراغ العام init () ServletException
{
// احصل على المعلومات الأولية من web.xml
//عرض
String strWidth=this.getInitParameter("width");
//عالي
StrHeight=this.getInitParameter("height");
// عدد الأحرف
String strCodeCount=this.getInitParameter("codeCount");
// تحويل المعلومات المكونة إلى قيم رقمية
يحاول
{
إذا (strWidth!=null && strWidth.length()!=0)
{
width=Integer.parseInt(strWidth);
}
إذا (strHeight!=null && strHeight.length()!=0)
{
height=Integer.parseInt(strHeight);
}
إذا (strCodeCount!=null && strCodeCount.length()!=0)
{
codeCount=Integer.parseInt(strCodeCount);
}
}
قبض على (NumberFormatException ه)
{}
x=width/(codeCount+1);
FontHeight=height-2;
codeY=height-4;
}
خدمة باطلة محمية (HttpServletRequest req، HttpServletResponse resp)
يرمي ServletException، java.io.IOException {
// تحديد المخزن المؤقت للصورة
BufferedImage buffImg = new BufferedImage(
العرض، الارتفاع، BufferedImage.TYPE_INT_RGB)؛
Graphics2D g = buffImg.createGraphics();
// أنشئ فئة مولد أرقام عشوائية
عشوائي عشوائي = عشوائي جديد ()؛
// املأ الصورة باللون الأبيض
g.setColor(Color.WHITE);
g.fillRect(0, 0, width, height);
// إنشاء خط يجب تحديد حجم الخط وفقًا لارتفاع الصورة.
الخط الخط = الخط الجديد ("Fixedsys"، Font.PLAIN، FontHeight)؛
//تعيين الخط.
g.setFont(font);
// ارسم الحدود.
g.setColor(Color.BLACK);
g.drawRect(0, 0, width - 1, height - 1);
// قم بإنشاء 160 خط تداخل بشكل عشوائي، مما يجعل من الصعب اكتشاف رمز المصادقة الموجود في الصورة بواسطة برامج أخرى.