<!DOCTYPE html> <html> <!-- head --> <head> <meta charset="utf-8"> <title>Image login verification</title> <meta name="renderer" content="webkit"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <style> body{margin: 10px;} .demo-carousel{height: 200px; line-height: 200px; text-align: center;} .code { width: 400px; margin: 0 auto; } .input-val { width: 295px; background: #ffffff; height: 2.8rem; padding: 0 2%; border-radius: 5px; border: none; border: 1px solid rgba(0,0,0,.2); font-size: 1.0625rem; } #canvas { float: right; display: inline-block; border: 1px solid #ccc; border-radius: 5px; cursor: pointer; } .btn { width: 100px; height: 40px; background: #f1f1f1; border: 1px solid #ccc; border-radius: 5px; margin: 20px auto 0; display: block; font-size: 1.2rem; color: #e22e1c; cursor: pointer; } * { margin: 0; padding: 0; box-sizing: border-box; } </style> </head> <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script> <body cz-shortcut-listen="true" class="layui-layout-body"> <div class="layui-layer-move"> <div class="code"> <input type="text" value="" placeholder="Please enter the verification code (case insensitive)" class ="input-val"> <canvas id="canvas" width="100" height="43"></canvas> <button class="btn">提交</button> </div> </div> </body> <script> $(function(){ var show_num = []; draw(show_num); $("#canvas").on('click',function(){ draw(show_num); }) $(".btn").on('click',function(){ var val = $(".input-val").val().toLowerCase(); var num = show_num.join(""); if(val==''){ alert( 'Please enter the verification code!' ); }else if(val == num){ alert( 'Submission successful!' ); $(".input-val").val(''); draw(show_num); }else{ alert( 'Verification code error! Please re-enter!' ); $(".input-val").val(''); draw(show_num); } }) }) function draw(show_num) { var canvas_width=$('#canvas').width(); var canvas_height=$('#canvas').height(); var canvas = document.getElementById("canvas"); // Get the canvas object, the actor var context = canvas.getContext("2d"); // Get the canvas drawing environment, the stage where the actor performs canvas.width = canvas_width; canvas.height = canvas_height; var sCode = "A,B,C,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,W,X,Y,Z,1,2,3,4,5,6,7,8,9,0"; var aCode = sCode.split(","); var aLength = aCode.length; // Get the length of the array for (var i = 0; i <= 3; i++) { var j = Math.floor(Math.random() * aLength); // Get a random index value var deg = Math.random() * 30 * Math.PI / 180; // Generate between 0~30 Random radian var txt = aCode[j]; // Get a random content show_num[i] = txt.toLowerCase(); var x = 10 + i * 20; // the x coordinate of the text on the canvas var y = 20 + Math.random() * 8; // the y coordinate of the text on the canvas context.font = "bold 23px Microsoft Yahei " ; context.translate(x, y); context.rotate(deg); context.fillStyle = randomColor(); context.fillText(txt, 0, 0); context.rotate(-deg); context.translate(-x, -y); } for (var i = 0; i <= 5; i++) { // Display lines on the verification code context.strokeStyle = randomColor(); context.beginPath(); context.moveTo(Math.random() * canvas_width, Math.random() * canvas_height); context.lineTo(Math.random() * canvas_width, Math.random() * canvas_height); context.stroke(); } for (var i = 0; i <= 30; i++) { // A small dot is displayed on the verification code context.strokeStyle = randomColor(); context.beginPath(); var x = Math.random() * canvas_width; var y = Math.random() * canvas_height; context.moveTo(x, y); context.lineTo(x + 1, y + 1 ); context.stroke(); } } function randomColor() { // Get a random color value var r = Math.floor(Math.random() * 256 ); var g = Math.floor(Math.random() * 256); var b = Math.floor(Math.random() * 256); return "rgb(" + r + "," + g + "," + b + ")"; } </script> </html>
You can also use the back-end verification method
https://blog.csdn.net/datuo/article/details/1393227
https://blog.csdn.net/rchm8519/article/details/45081225
package com.hikvision.cms.module.cpi.servlet; import java.awt.Color; import java.awt.Container; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.util.Random; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; public class ImageTool { public String sRand = ""; public Color getRandColor(int fc, int bc) { // Get a random color for a given range Random random = new Random(); if (fc > 255 ) fc = 255; if (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); return new Color(r, g, b); } public BufferedImage creatImage() { // Create image in memory int width = 60 ; int height = 20 ; BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); // Get graphics context Graphics g = image.getGraphics(); // Generate random class Random random = new Random(); // Set the background color g.setColor(getRandColor(200,250 )); g.fillRect(0, 0, width, height); // Set the font g.setFont( new Font("Times New Roman",Font.PLAIN,18 )); // Draw a border // g.setColor(new Color()); // g.drawRect(0, 0, width-1, height-1); // Randomly generate 155 interference lines to make the authentication code in the image Not easily detectable by other programs for ( int i=0; i<155; i++ ) { g.setColor(getRandColor(160,200)); int x = random.nextInt(width); int y = random.nextInt(height); int x1 = random.nextInt(12); int y1 = random.nextInt(12); g.drawLine(x, y, x+x1, y+y1); } // Take the randomly generated authentication code (4 digits) sRand = "" ; for ( int i=0; i<4; i++ ) { String rand = String .valueOf(random.nextInt(10)); sRand += rand; // Display the authentication code in the image g.setColor ( new Color(20+random.nextInt(110), 20 + random.nextInt(110), 20+random.nextInt(110 ))); // The color from calling the function is the same, maybe because the seeds are too close, so we can only directly generate g.drawString(rand, 13*i+6, 16 ); } // The image takes effect g.dispose(); return image; } public String getRand() { return sRand; } public static void main(String[] args) { ImageTool it = new ImageTool(); JFrame jf = new JFrame(); jf.setSize ( 200,300 ); jf.setTitle( "Generate verification code" ); Container ct = jf.getContentPane(); ImageIcon ii = new ImageIcon(it.creatImage()); JLabel jl = new JLabel(ii); ct.add(jl); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); System.out.println(it.getRand()); } }