ตัวอย่างนี้แบ่งปันรหัสเฉพาะของรหัสการตรวจสอบ Java ที่สร้างขึ้นแบบสุ่มสำหรับการอ้างอิงของคุณ เนื้อหาเฉพาะมีดังนี้
นำเข้า java.awt.Color; นำเข้า java.awt.font; นำเข้า java.awt.graphics2d; นำเข้า java.awt.image.bufferedimage; นำเข้า java.io.ioexception; นำเข้า Java.util.random; javax.servlet.servletoutputStream; นำเข้า Javax.servlet.http.httpservlet; นำเข้า Javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletresponse; {/ *** ตัวสร้างของวัตถุ*/ สาธารณะ randimage () {super (); } INT IMGWIDTH ส่วนตัว = 0; // ความกว้างของภาพ Imgheight ส่วนตัว = 0; // ความสูงของภาพ codecount int ส่วนตัว = 0; // จำนวนอักขระในรูปภาพส่วนตัว int x = 0; private int fontheight; // ความสูงของ Codey int ส่วนตัวแบบอักษร; Fontstyle สตริงส่วนตัว; // font style // id id serialization หลีกเลี่ยงการซ้ำซ้อนส่วนตัวคงที่สุดท้าย long serialversionuid = 128554012633034503l; /*** พารามิเตอร์การกำหนดค่าเริ่มต้น*/โมฆะสาธารณะ init () พ่น servletexception {// ความกว้างสตริง strwidth = "200"; // string string strheight = "80"; // จำนวนอักขระสตริง strCodecount = "5"; // Font FontStyle = "Times New Roman"; // แปลงข้อมูลที่กำหนดค่าเป็นลองตัวเลข {ถ้า (strwidth! = null && strwidth.length ()! = 0) {imgwidth = integer.parseint (strwidth); } if (striight! = null && striight.length ()! = 0) {imgheight = integer.parseint (strieight); } if (strCodeCount! = null && strCodeCount.length ()! = 0) {codecount = integer.parseint (strCodeCount); }} catch (numberFormatexception e) {e.printStackTrace (); } x = imgwidth / (codecount + 1); // ระยะห่างของตัวละคร fontheight = imgheight - 2; // ตัวอักษรความสูง codey = imgheight - 12; // ความสูงของรหัส} void processRequest ที่ได้รับการป้องกัน (คำขอ httpservletRequest, การตอบสนอง httpservletResponse) โยน servletexception, ioexception {// output set reponse.setContentType ("image/jpeg"); // การตอบสนองรูปแบบเอาท์พุท Setheader ("Pragma", "No-cache"); // ไม่มีการตอบสนองต่อการสร้างแคช Setheader ("แคชควบคุม", "ไม่มีแคช"); // ไม่มีแคช rement.setDateHeader ("หมดอายุ", 0); // ไม่มีการทำให้แคชไม่ได้ถูกแคชเซสชัน httpsession = request.getSession (); // รับเซสชันเซสชัน // สร้างภาพในหน่วยความจำ bufferedImage image = ใหม่ bufferedImage (imgwidth, imgheight, bufferedImage.type_int_rgb); // รับบริบทกราฟิกกราฟิก 2d g = image.createGraphics (); // สร้างการสุ่มแบบสุ่มสุ่ม = ใหม่สุ่ม (); // คลาสสุ่ม // ตั้งค่าสีพื้นหลังของสี่เหลี่ยม G.SetColor (color.white); // เติมสี่เหลี่ยมผืนผ้า rect เป็นสีขาว g.fillrect (0, 0, imgwidth, imgheight); // ตั้งค่าตัวอักษรชายแดน G.SetFont (ฟอนต์ใหม่ (FontStyle, Font.plain + Font.italic, Fontheight)); // ตั้งค่าสีขอบ G.SetColor (สีใหม่ (55, 55, 12)); // วาดเส้นขอบ G.DrawRect (0, 0, imgwidth - 1, imgheight - 1); // แบบสุ่มสร้างบรรทัดการรบกวน 160 ครั้งทำให้รหัสการตรวจสอบสิทธิ์ในภาพไม่ง่ายที่จะตรวจพบโดยโปรแกรมอื่น ๆ G.SetColor (GetRandColor (160, 200)); สำหรับ (int i = 0; i <160; i ++) {int x = random.nextint (imgwidth); int y = random.nextint (imgheight); int xl = random.nextint (12); int yl = random.nextint (12); G.Drawline (x, y, x + xl, y + yl); } // ใช้รหัสการรับรองความถูกต้องที่สร้างขึ้นแบบสุ่ม (หมายเลข 4 หลัก) สตริง srand = ""; int red = 0, green = 0, blue = 0; สำหรับ (int i = 0; i <codecount; i ++) {// เปลี่ยนเพื่อสร้างตัวอักษรสุ่มตัวอักษร // เรื่องราวสีใหม่ผ่าน RGB สามสีแดง = random.nextint (255); Green = Random.nextint (255); สีน้ำเงิน = random.nextint (255); // เรื่องราวที่จะได้รับจำนวน 0 1 2 int wordType = random.nextint (3); // เรื่องราวเพื่อรับ 3 ตัวเลขระหว่าง 0-2 char retword = 0; // 0 หมายเลข 1 ตัวพิมพ์เล็กตัวอักษร 2 สลับตัวอักษรตัวพิมพ์ใหญ่ (WordType) {กรณี 0: retword = this.getSingLenumberChar (); // รับช่วงพักประเภทถ่าน 0-9; กรณีที่ 1: retword = this.getLowerupperchar (0); // รับการแบ่งประเภทตัวพิมพ์เล็ก กรณีที่ 2: retword = this.getLowerupperchar (1); // รับตัวพิมพ์ใหญ่ประเภทตัวพิมพ์ใหญ่; } srand += string.valueof (retword); // รับอักขระสุ่มที่ได้รับ g.setColor (สีใหม่ (สีแดง, เขียว, สีน้ำเงิน)); // ตั้งค่าสี g.drawstring (string.valueof (retword), 2+ (i) * x, codey); // เขียนอักขระไปยังตำแหน่งที่สอดคล้องกันในรูปภาพ} // บันทึกรหัสการรับรองความถูกต้องในเซสชันเซสชัน SetAttribute ("RAND", SRAND); // บันทึกอักขระสุ่มที่ได้รับลงในการตอบกลับเซสชันและคุณสามารถโทร // ภาพมีผล g.dispose (); // ปล่อยวัตถุ g servletutputstream responseOutputStream = response.getOutputStream (); // output stream // imput image ไปยังหน้า imageio.write (ภาพ, "jpeg", responseOutputStream); // เอาต์พุตในรูปแบบ JPEG // ปิดสตรีมอินพุตด้านล่าง! ResponseOutputStream.flush (); // สดและปิดสตรีม ResponceOutputStream.close (); } color getRandColor (int fc, int bc) {// ให้สีสุ่มสุ่ม = new Random (); ถ้า (FC> 255) FC = 255; ถ้า (BC> 255) BC = 255; int r = fc + random.nextint (bc - fc); int g = fc + random.nextint (bc - fc); int b = fc + random.nextint (bc - fc); คืนสีใหม่ (R, G, B); } void doget ที่ได้รับการป้องกัน (คำขอ httpservletRequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {processRequest (คำขอ, การตอบสนอง); } การป้องกันโมฆะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {processRequest (คำขอ, การตอบสนอง); } // แปลงหมายเลขสุ่มจำนวนเต็มเป็นถ่านเพื่อส่งคืนถ่านส่วนตัว GetSingLenumberchar () {สุ่มสุ่ม = ใหม่สุ่ม (); int numberResult = random.nextint (10); int ret = numberResult + 48; // เมื่อแปลงอักขระ '0' เป็นรหัส Ascall จะเป็น 48 return (char) ret; } // รับ 26 อักขระตัวอักษรถ่านส่วนตัว getLoweropperchar (int updual) {random random = new Random (); int numberResult = random.nextint (26); int ret = 0; ถ้า (บน == 0) {// ตัวพิมพ์เล็ก ret = numberResult + 97; } อื่นถ้า (บน == 1) {// Capital ret = numberResult + 65; } return (char) ret; - ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น