ทุกคนรู้รหัสการยืนยันและฉันไม่จำเป็นต้องพูดเพิ่มเติมเกี่ยวกับฟังก์ชั่นของมัน หากคุณยังไม่ชัดเจนโปรดดูคำอธิบายในสารานุกรม Baidu โดยทั่วไปการสร้างรหัสการตรวจสอบคือการสร้างอักขระแบบสุ่ม (ตัวเลขตัวอักษรหรืออักขระจีน ฯลฯ ) จากนั้นวาดอักขระที่สร้างขึ้นเหล่านี้ลงในรูปภาพจากนั้นเพิ่มองค์ประกอบที่รบกวนรูปภาพเช่นบรรทัดต่าง ๆ ฯลฯ โอเค
หน้าเข้าสู่ระบบอย่างง่าย (รหัสไม่สมบูรณ์เฉพาะส่วนรหัสยืนยัน)
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <! doctype html public "-// w3c // dtd html 4.01 transitional // en"> <html> data-filtered = "กรอง"> </span> <span style = "สเปซสีขาว: pre"> </span> // js ฟังก์ชั่นเพื่อรีเฟรชรหัสการตรวจสอบ <span style = "space สีขาว: pre"> </span> function changecode () {<span style = "space สีขาว: pre" <span style = "space สีขาว: pre"> </span> // โหลดรหัสการตรวจสอบใหม่เพื่อให้ได้จุดประสงค์ในการรีเฟรช <span style = "พื้นที่สีขาว: pre"> </span> imgnode.src = "servlet/authimageservlet? t =" + math.random (); // ป้องกันปัญหาแคชเบราว์เซอร์ <span style = "White-space: pre"> </span>} </script> </head> <body> <form action = "checkservlet" method = "post"> <label> รหัสการตรวจสอบอินพุต </label> <br/> src = "servlet/authimageservlet"> <br/> <อินพุต type = "ส่ง" value = "ส่ง"> </form> </body> </html>ผ่าน session.getAttribute ("RAND") รหัสการตรวจสอบที่สร้างขึ้นจะได้รับและจากนั้นเปรียบเทียบกับอินพุตของผู้ใช้จากนั้นการประมวลผลที่สอดคล้องกันจะดำเนินการตามผลการเปรียบเทียบ
สร้างรหัสการตรวจสอบผ่าน servlet:
แพ็คเกจ com.util.servlet; นำเข้า Java.awt.Color; นำเข้า Java.awt.Font; นำเข้า java.awt.graphics; นำเข้า java.awt.image.bufferedimage; นำเข้า java.io.ioException; นำเข้า java.util.random; นำเข้า Javax.imageio.imageio; นำเข้า javax.servlet.servletexception; นำเข้า Javax.servlet.http.httpservlet; นำเข้า javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; นำเข้า Javax.servlet.http.httpsession; คลาสสาธารณะ AuthimageServlet ขยาย httpservlet {สตริงสุดท้ายคงที่ private string content_type = "text/html; charset = gb2312"; // ตั้งค่าขนาดตัวอักษรตัวอักษรส่วนตัว mfont = ตัวอักษรใหม่ ("Times New Roman", Font.plain, 17); public void init () พ่น servletexception {super.init (); } 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); int b = fc+random.nextint (bc-fc); คืนสีใหม่ (R, G, B); } บริการโมฆะสาธารณะ (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {response.setheader ("pragma", "no-cache"); Response.Setheader ("แคชควบคุม", "ไม่มีแคช"); Response.setDateHeader ("หมดอายุ", 0); // ระบุว่าการตอบสนองที่สร้างขึ้นคือการตอบสนองของรูปภาพ SetContentType ("image/jpeg"); ความกว้าง int = 100, ความสูง = 18; BufferedImage Image = New BufferedImage (ความกว้าง, ความสูง, bufferedImage.type_int_rgb); กราฟิก g = image.getGraphics (); สุ่มสุ่ม = ใหม่สุ่ม (); G.SetColor (GetRandColor (200,250)); G.FillRect (1, 1, WIDTH-1, ความสูง -1); G.SetColor (สีใหม่ (102,102,102)); G.DrawRect (0, 0, WIDTH-1, ความสูง -1); G.SetFont (MFONT); G.SetColor (GetRandColor (160,200)); // วาดเส้นสุ่มสำหรับ (int i = 0; i <155; i ++) {int x = random.nextint (ความกว้าง - 1); int y = random.nextint (ความสูง - 1); int xl = random.nextint (6) + 1; int yl = random.nextint (12) + 1; G.Drawline (x, y, x + xl, y + yl); } // วาดเส้นสุ่มจากทิศทางอื่นสำหรับ (int i = 0; i <70; i ++) {int x = random.nextint (ความกว้าง - 1); int y = random.nextint (ความสูง - 1); int xl = random.nextint (12) + 1; int yl = random.nextint (6) + 1; G.Drawline (x, y, x - xl, y - yl); } // สร้างตัวเลขสุ่มและแปลงหมายเลขสุ่มเป็นตัวอักษรสตริง srand = ""; สำหรับ (int i = 0; i <6; i ++) {int itmp = random.nextint (26)+65; ถ่าน CTMP = (ถ่าน) ITMP; srand += string.valueof (ctmp); G.SetColor (สีใหม่ (20+random.nextint (110), 20+random.nextint (110), 20+random.nextint (110))); G.DrawString (String.ValueOf (CTMP), 15*i+10,16); } httpsession session = request.getSession (จริง); Session.setAttribute ("Rand", Srand); G.Dispose (); Imageio.write (รูปภาพ, "jpeg", response.getOutputStream ()); -ข้อมูลการกำหนดค่า servlet ใน web.xml:
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <web-app version = "2.5" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http://ww.w3.org/200 XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" <servlet-class> com.util.servlet.authimageservlet </servlet-class> </servlet> <servlet-mapping> <servlet-name> authimageservlet </servlet-name> <url-pattern>/weliding-list> welidle-filel </eb-app>
ด้วยวิธีนี้ฟังก์ชั่นรหัสการตรวจสอบจะถูกนำไปใช้ซึ่งง่ายมากและใช้งานได้จริง แน่นอนว่ามีวิธีที่สวยงามและเข้มงวดกว่า เพื่อนที่สนใจสามารถศึกษาในเชิงลึก ที่นี่ฉันจะแบ่งปันวิธีที่ค่อนข้างง่ายกับคุณ ยินดีต้อนรับทุกคนที่จะวิพากษ์วิจารณ์และแก้ไขฉัน
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น