在网站的开发过程中,许多注册登入都会使用到验证码。所以......
一、Java实现后台验证码-完整代码
package test;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
/**
* 使用java生成验证码图像
* @author Drew
*
*/
public final class ImageUtil {
public static final char[] chars = {
'0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F','G','H','I','K',
'J','L','M','N','O','P','Q','R','S','T',
'U','V','W','X','Y','Z'
};
private static final int SIZE = 6; /*字母数量*/
private static final int LINES = 22; /*线条数量*/
private static final int WIDTH = 160; /*图片宽度*/
private static final int HEIGHT = 40; /*图片高度*/
private static final int FONT_SIZE = 30; /*字体大小*/
/**
* 生成随机验证码以及图片
* Object[0]:验证码字符串string
* Object[1]:验证码图片
*
* 1.创建空白图片
* 2.获取图片画笔
* 3.设置画笔颜色
* 4.绘制矩形背景
* 5.绘制随机字符
* 6.绘制干扰线
* 7.返回验证码和图片
*/
public static Object[] createImage(){
StringBuffer sb= new StringBuffer();
BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics graphics = image.getGraphics();
graphics.setColor(Color.LIGHT_GRAY);
graphics.fillRect(0, 0, WIDTH, HEIGHT);
Random random = new Random();
for (int i = 0; i < SIZE; i++) {
int n = random.nextInt(chars.length);//取随机字符索引
graphics.setColor(getRandomColor());//设置随机颜色
//设置字体大小(Font.SERIF字体设置,可以对其每个字符进行字体随机)
graphics.setFont(new Font(getRandomFont(), Font.BOLD+Font.ITALIC, FONT_SIZE));
//绘制字符
graphics.drawString(chars[n]+"", i*WIDTH/SIZE, HEIGHT/2);
sb.append(chars[n]);//记录字符
}
for (int i = 0; i < LINES; i++) {
graphics.setColor(getRandomColor());//设置随机颜色
//随机绘制线条
graphics.drawLine(random.nextInt(WIDTH), random.nextInt(HEIGHT),random.nextInt(WIDTH), random.nextInt(HEIGHT));
}
System.out.println(sb.toString());//打印在后台,用于验证输入是否匹配。
return new Object[]{sb.toString(),image};//返回验证码和图片
}
/**
* 随机选取颜色
* @return
*/
private static Color getRandomColor() {
Random random = new Random();
Color color = new Color(random.nextInt(256),random.nextInt(256),random.nextInt(256));
return color;
}
/**
* 随机选择字体
* @return
*/
private static String getRandomFont(){
String[] font = {"SansSerif","Serif","微软雅黑","楷体","宋体","黑体","隶书"};
Random random = new Random();
return font[random.nextInt(font.length)];
}
/**
* main测试方法
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
Object[] objs = createImage();
BufferedImage image = (BufferedImage) objs[1];
OutputStream os = new FileOutputStream("C:/Users/Drew/Desktop/x.png");
ImageIO.write(image, "png", os);
os.close();
}
}
二、结果展示
三、问题:如何使用JavaScript前台来设计验证码呢?
这个问题就留给
全栈的小伙伴啦~ 🤭
🙏至此,感谢阅读🙏