1. 程式人生 > >Java工具類----驗證碼

Java工具類----驗證碼

傳智播客視訊圖形驗證碼工具類

package com.xxx.image;


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 = "23456789abcdefghjkmnpqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ";
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);
int size = r.nextInt(5) + 24;
return new Font(fontName,style,size);
}

private void drawLine(BufferedImage image) {
int num = 3;
Graphics2D g2 = (Graphics2D)image.getGraphics();
for(int i = 0; i < num; i++) {
int x1 = r.nextInt(w);
int y1 = r.nextInt(h);
int x2 = r.nextInt(w);
int y2 = r.nextInt(h);
g2.setStroke(new BasicStroke(1.5F));//設定線條的粗細
g2.setColor(Color.BLUE);
g2.drawLine(x1, y1, x2, y2);
}
}

private char randomChar() {
int index = r.nextInt(codes.length());
return codes.charAt(index);
}

private BufferedImage createImage() {
BufferedImage image = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = (Graphics2D)image.getGraphics();
g2.setColor(this.bgColor);
g2.fillRect(0, 0, w, h);
return image;
}

public BufferedImage getImage() {
BufferedImage image = createImage();
Graphics2D g2 = (Graphics2D)image.getGraphics();
StringBuilder sb = new StringBuilder();
for(int i = 0;i < 4; i++) {
String s = randomChar() + "";
sb.append(s);
float x = i * 1.0F * w / 4;
g2.setFont(randomFont());
g2.setColor(randomColor());
g2.drawString(s, x, h-5);
}
this.text = sb.toString();
drawLine(image);
return image;
}

public String getText() {
return text;
}

public static void output(BufferedImage image,OutputStream out) throws IOException {
ImageIO.write(image, "JPEG", out);
}

}

在其他類中呼叫

@Test
public void fun() throws FileNotFoundException, IOException {
VerifyCode vc = new VerifyCode();
BufferedImage bi = vc.getImage();
VerifyCode.output(bi, new FileOutputStream("F:/xxx.jpg"));

System.out.println(vc.getText());

}

結果截圖:



相關推薦

Java工具-驗證工具

  1.工具類,生成隨機驗證碼字串 import java.util.Arrays; /** * 工具類,生成隨機驗證碼字串 * * @version 1.0 * @author * */ public class SecurityCode {

Java工具----驗證

傳智播客視訊圖形驗證碼工具類package com.xxx.image;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;impo

java工具——驗證(VerifyCode)

import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage

JAVA短信驗證 工具

有效時間 clas axis ack remove except equal return med MsgCodeUtil.java package com.hg.util; import com.soyea.enums.ResultEnum; import com.

Java工具——隨機驗證RandNumberUtils

在平常的web開發當中我們經常用到驗證碼,但是關於如何產生指定位數的驗證碼一直沒有深入的去了解,都是要用的時候就去寫。在上一次開發當中我就將這個經驗用到的產生隨機數的方法進行了封裝,提供一個公共的方法去呼叫。 package cc.ccoder.mail.ut

java生成二維java工具可以直接呼叫)

生成二維碼的方法大體分為兩種:1. 展示時候引用Qrcode.js;2.後臺生成二維碼儲存成圖片,前端顯示 1.QRCode.js 是一個用於生成二維碼的 JavaScript 庫。主要是通過獲取 DOM 的標籤,再通過 HTML5 Canvas 繪製而成 <!DO

身份證驗證java工具(糾正網上流行程式碼錯誤)

參考網上程式碼,不過網上程式碼全部是拷貝的,糾正下,身份證前2位代表地區,64是青海,65是新疆。。。以下程式碼已糾正並測試 /** * 身份證驗證的工具(支援5位或18位省份證) 身份證號碼結構: 17位數字和1位校驗碼:6位地址碼數字,8位生日數字,

java工具,在Windows,Linux系統獲取電腦的MAC地址、本地IP、電腦名

copy iter 去掉m [] equals linu stat cli catch package com.cloudssaas.util; import java.io.BufferedReader; import java.io.IOException;

java生成簡單驗證圖片

沒有 setfont red width public bre 成功 edi args 概要   最近項目需要用java實現輸出隨機驗證碼圖片到前臺,正好有機會接觸下java的繪圖類,完成需求後也有時間做個總結,寫篇隨筆記錄下也希望能幫助到有同樣需求的人! 需求流程圖 1

java生成圖片驗證實現

isp tex version edi ade 頁面 類型 logs exp 兩種圖片樣式分別是用Graphics類和Graphics2D 類實現(Graphics2D擴展了Graphics類),可以參考資料,畫出自己想要的圖片 Graphics2D 參考api地址:ht

java集合分析之List(一)

col 實現類 並且 link arraylist oar print 適用於 for   首先分析一下集合與數組的區別:1.java中的數組一般用於存儲基本數據類型,而且是靜態的,即長度固定不變,這就不適用於元素個數未知的情況;2.集合只能用於存儲引用類型,並且長度可變,

java集合分析之List(二)

頻繁 null 並且 reel closed tco 默認 java集合 進行 這一節主要介紹List接口的幾個實現類的區別: 1.線程安全 Vector是線程安全的,而ArrayList和LinkedList是非線程安全的。從源碼中我們可知,Vector類中的方法大部分

java Zing生成驗證

內嵌 hash exc 圖片 || final print pat fin package yanzm;import java.awt.image.BufferedImage; import java.io.File; import java.io.IOExce

使用Java制作驗證

使用java制作驗證碼驗證碼介紹 驗證碼(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自動區分計算機和人類的圖靈測試)的縮寫,是一種區分用戶是計算機還是人的公共全自動程序。可以防

自定義的jdbc連接工具JDBCUtils【java 工具

tco 成功 val update red source dex imp 添加 JDBCUtils 類:   1. 創建私有的屬性*(連接數據庫必要的四個變量):dreiver url user password   2. 將構造函數私有化   3.將註冊驅動寫入靜態代碼塊

java工具

new style strings 數組 toarray div ngs tro ron 1.list轉化為數組 ArrayList<String> list=new ArrayList<String>(); String[] strings = n

排名前 16 的 Java 工具

md5 normal 註釋 github上 數組 使用 讀取 lena dma 在Java中,工具類定義了一組公共方法,這篇文章將介紹Java中使用最頻繁及最通用的Java工具類。以下工具類、方法按使用流行度排名,參考數據來源於Github上隨機選取的5萬個開源項目源碼。

Json序列化java工具

java對象 writev ctype imp date eval 取消 cti empty json序列化通用工具類(java)>為了支持此工具類的正常使用,先導入以下jar包 1.lombok包是一個簡化java冗余代碼的jar包,實際開發中很方便在maven的p

Java HashMap解析

trie prev 規則 foreach sting val fin 表示 == 作為重要的常用集合,HashMap主要是提供鍵值對的存取,通過key值可以快速找到對應的value值。Hash表是通過提前設定好的規則計算一個元素的hash值來找到他在數組中的存儲位置進行快速

排名前16的Java工具

-s lang 分隔符 獲得 輸出流 capital 分隔 部分 檢測字符串 原文:https://www.jianshu.com/p/9e937d178203 在Java中,工具類定義了一組公共方法,這篇文章將介紹Java中使用最頻繁及最通用的Java工具類。以下