使用java生成字母驗證碼
更新時間:2016年12月16日 10:09:04 作者:菜鳥之路666
這篇文章主要介紹了使用java生成字母驗證碼的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了java生成字母驗證碼的具體代碼,供大家參考,具體內(nèi)容如下
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
public class VerifyCode {
//圖片寬高
private int w=70;
private int h=35;
private Random r=new Random();
private String[] fontNames={"宋體","華文楷體","黑體","微軟雅黑","楷體_GB2312"};
private String codes="234567890qwertyuipasdfghjkzxcvbnmQWERTYUIPASDFGHJKZXCVBNM";
private Color bgColor=new Color(255,255,255);
private String text;
//生成隨機顏色
private Color randomColor(){
int red=r.nextInt(150);
int green=r.nextInt(150);
int blue=r.nextInt(150);
return new Color(red, green, blue);
}
//生成隨機字體
private Font randomFont(){
int index=r.nextInt(fontNames.length);
String fontName=fontNames[index];
int style=r.nextInt(4);//0 無 1 粗體 2 斜體 3 粗+斜
int size=r.nextInt(5)+24; //生成隨機字號 24~28
return new Font(fontName, style, size);
}
//干擾線
private void drowLine(BufferedImage image){
//生成4條干擾線
int num=4;
Graphics2D bi=(Graphics2D) image.getGraphics();
for (int i = 0; i < num; i++) {
int x1=r.nextInt(w);
int x2=r.nextInt(w);
int y1=r.nextInt(h);
int y2=r.nextInt(h);
bi.setStroke(new BasicStroke(1.5F));
bi.setColor(Color.BLUE);//干擾線色
bi.drawLine(x1,y1,x2,y2);
}
}
//隨機生成一個字符
private char randomChar(){
int index=r.nextInt(codes.length());
return codes.charAt(index);
}
//圖片緩沖區(qū)
private BufferedImage createImage(){
BufferedImage image=new BufferedImage(w, h, BufferedImage.TYPE_INT_BGR);
Graphics2D bi=(Graphics2D) image.getGraphics();
bi.setColor(this.bgColor);
bi.fillRect(0, 0, w, h);
return image;
}
//生成圖片
public BufferedImage getImage(){
BufferedImage image=createImage();
Graphics2D bi=(Graphics2D) image.getGraphics();
StringBuilder sb=new StringBuilder();
for (int i = 0; i <4; i++) {
String string=randomChar()+"";
sb.append(string);
//每個字符占圖片1/4寬
float x=i*1.0F*w/4;
//隨機字體格式
bi.setFont(randomFont());
bi.setColor(randomColor());
//把字寫在圖片適當處(h-6指圖片距底部6個高度)
bi.drawString(string, x, h-6);
}
this.text=sb.toString();
drowLine(image);
return image;
}
//返回得到的字體
public String getText(){
return text;
}
//把圖片寫入指定位置
public static void output(BufferedImage image,OutputStream out){
try {
ImageIO.write(image, "JPG", out);
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaWeb實現(xiàn)用戶登錄與注冊功能(服務(wù)器)
這篇文章主要介紹了JavaWeb實現(xiàn)用戶登錄與注冊功能,服務(wù)器部分的關(guān)鍵代碼實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08
SpringBoot整合Web之CORS支持與配置類和 XML配置及注冊攔截器
這篇文章主要介紹了SpringBoot整合Web開發(fā)中CORS支持與配置類和 XML配置及注冊攔截器的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-08-08
SpringBoot集成jersey打包jar找不到class的處理方法
這篇文章主要介紹了SpringBoot集成jersey打包jar找不到class的處理方法,文中通過代碼示例介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下2024-03-03
MyBatis創(chuàng)建存儲過程的實例代碼_動力節(jié)點Java學院整理
本節(jié)需要用到的有2部分,第一部分是如何在Derby中創(chuàng)建存儲過程,第二部分是如何在Mybatis中調(diào)用存儲過程,具體實例代碼大家參考下本文吧2017-09-09
springboot集成redis哨兵集群的實現(xiàn)示例
本文主要介紹了springboot集成redis哨兵集群的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-08-08

