ในปัจจุบัน โมดูลการลงทะเบียน การเข้าสู่ระบบ หรือการเผยแพร่ข้อมูลของหลายระบบได้เพิ่มฟังก์ชันโค้ดแบบสุ่มเพื่อหลีกเลี่ยงการใช้โปรแกรมการลงทะเบียนอัตโนมัติหรือโปรแกรมการเผยแพร่อัตโนมัติ
รหัสยืนยันจะสุ่มเลือกอักขระบางตัวและแสดงบนหน้าในรูปแบบของรูปภาพ หากคุณดาวน์โหลดและส่ง Tomato Garden ข้อมูลที่ส่งถือว่าไม่ถูกต้อง เพื่อป้องกันไม่ให้โปรแกรมอัตโนมัติวิเคราะห์และแยกวิเคราะห์รูปภาพ เส้นสัญญาณรบกวนบางเส้นมักจะถูกสร้างขึ้นแบบสุ่มบนรูปภาพหรือตัวอักษรจะบิดเบี้ยว ทำให้การจดจำอัตโนมัติทำได้ยากขึ้น
คัดลอกรหัสรหัส ดังต่อไปนี้:
แพ็คเกจ com.servlet;
นำเข้า java.awt.Color;
นำเข้า java.awt.Font;
นำเข้า java.awt.Graphics2D;
นำเข้า java.awt.image.BufferedImage;
นำเข้า java.util.สุ่ม;
นำเข้า javax.imageio.ImageIO;
นำเข้า javax.servlet.ServletException;
นำเข้า javax.servlet.ServletOutputStream;
นำเข้า javax.servlet.http.HttpServlet;
นำเข้า javax.servlet.http.HttpServletRequest;
นำเข้า javax.servlet.http.HttpServletResponse;
นำเข้า javax.servlet.http.HttpSession;
-
* สร้างรหัสยืนยันแบบสุ่ม
* @ผู้เขียน bitiliu
-
-
ValidateCodeServlet ระดับสาธารณะขยาย HttpServlet
-
serialVersionUID ยาวสุดท้ายแบบคงที่ส่วนตัว = 1L;
//ความกว้างของรูปภาพรหัสยืนยัน
ความกว้าง int ส่วนตัว = 60;
//ความสูงของภาพรหัสยืนยัน
ความสูง int ส่วนตัว = 20;
//จำนวนตัวอักษรในรหัสยืนยัน
รหัส int ส่วนตัว = 4;
ส่วนตัว int x=0;
//ความสูงของตัวอักษร
แบบอักษร int ส่วนตัวความสูง;
รหัส int ส่วนตัว Y;
ถ่าน [] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'ฉัน', '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
//ความกว้าง
สตริง strWidth=this.getInitParameter("ความกว้าง");
//สูง
สตริง strHeight=this.getInitParameter("height");
//จำนวนตัวอักษร
สตริง 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=จำนวนเต็ม.parseInt(strCodeCount);
-
-
จับ (NumberFormatException e)
-
x=ความกว้าง/(รหัสนับ+1);
แบบอักษรความสูง=ความสูง-2;
รหัสY=ความสูง-4;
-
บริการโมฆะที่ได้รับการป้องกัน (คำขอ HttpServletRequest, HttpServletResponse resp)
พ่น ServletException, java.io.IOException {
//กำหนดบัฟเฟอร์รูปภาพ
BufferedImage buffImg = BufferedImage ใหม่ (
ความกว้าง ความสูง BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
//สร้างคลาสตัวสร้างตัวเลขสุ่ม
สุ่ม สุ่ม = สุ่มใหม่();
//เติมภาพด้วยสีขาว
g.setColor(สี.WHITE);
g.fillRect(0, 0, ความกว้าง, ความสูง);
//สร้างฟอนต์ ขนาดของฟอนต์ควรถูกกำหนดตามความสูงของรูปภาพ
แบบอักษร แบบอักษร = แบบอักษรใหม่ ("Fixedsys", Font.PLAIN, fontHeight);
//ตั้งค่าฟอนต์
g.setFont(แบบอักษร);
//วาดเส้นขอบ.
g.setColor(สี.สีดำ);
g.drawRect(0, 0, ความกว้าง - 1, ความสูง - 1);
// สุ่มสร้างเส้นรบกวน 160 เส้นเพื่อทำให้รหัสการตรวจสอบสิทธิ์ในภาพตรวจพบได้ยากโดยโปรแกรมอื่น