java驗證碼工具_java 驗證碼工具

importjavax.imageio.ImageIO;import java.awt.*;importjava.awt.image.BufferedImage;importjava.io.IOException;importjava.io.OutputStream;importjava.util.Random;public classCaptchaUtils {private final static Object lock = newObject();/*** 圖片的寬度。*/

private int width = 132;/*** 圖片的高度。*/

private int height = 40;/*** 驗證碼字符個數*/

private int codeCount = 4;/*** 驗證碼干擾線數*/

private int lineCount = 10;private staticCaptchaUtils instance;static{synchronized(lock) {if (instance == null) {

instance= newCaptchaUtils();

}

}

}public staticCaptchaUtils getInstance() {returninstance;

}private static final char[] codeSequence ={'A', 'B', 'C', 'D', 'E', 'F', 'G','H', 'J', 'K', 'M', 'N', 'P', 'Q', 'R', 'S', 'T','U', 'V', 'W', 'X', 'Y', 'Z','1', '2', '3', '4', '5', '6', '7', '8', '9'};publicString createCode() {

Random random= newRandom(System.currentTimeMillis());

StringBuffer buffer= newStringBuffer();for (int i = 0; i < codeCount; i++) {

String strRand=String.valueOf(codeSequence[random.nextInt(codeSequence.length)]);

buffer.append(strRand);

}returnbuffer.toString().toLowerCase();

}public voiddraw(String code, OutputStream sos) {

BufferedImage bufferedImage= this.drawCode(code);try{

ImageIO.write(bufferedImage,"png", sos);

sos.close();

}catch(IOException e) {

e.printStackTrace();

}

}privateBufferedImage drawCode(String code) {int x = 0, fontHeight = 0, codeY = 0;int red = 0, green = 0, blue = 0;//生成隨機數

Random random = newRandom(System.currentTimeMillis());//每個字符的寬度

x = width /codeCount;//字體的高度

fontHeight = height - 8;

codeY=height;//圖像buffer

BufferedImage buffImg = newBufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

Graphics2D g=buffImg.createGraphics();//將圖像填充為白色

g.setColor(Color.WHITE);

g.fillRect(0, 0, width, height);

Font font= new Font("Arial", Font.PLAIN, fontHeight);

g.setFont(font);for (int i = 0; i < lineCount; i++) {

red= random.nextInt(255);

green= random.nextInt(128) + 127;

blue= random.nextInt(128) + 127;

g.setColor(newColor(red, green, blue));//初始角度必須大于0

int angRange = random.nextInt(270) + 30;int arcX = random.nextInt(width) - (width >> 4);int arcY =random.nextInt(height);int arcWidth =random.nextInt(width);int arcHeight =random.nextInt(height);int arcStartAng = random.nextInt(angRange) + 1;int arcAng = random.nextInt(angRange) + 1;

g.drawArc(arcX, arcY, arcWidth, arcHeight, arcStartAng, arcAng);

}int offsetX = random.nextInt(5) + 5;int offsetY = random.nextInt(5) + 10;for (int i = 0; i < code.length(); i++) {

String strRand= code.substring(i, i + 1);//產生隨機的顏色值,讓輸出的每個字符的顏色值都將不同。

red = random.nextInt(255);

green= random.nextInt(127);

blue= random.nextInt(255);

g.setColor(newColor(red, green, blue));//正負波動微調

double degree = (random.nextInt(20) - 10) * Math.PI / 180;int fx = (i * x) +offsetX;int fy = codeY -offsetY;

g.rotate(degree, fx, fy);

g.drawString(strRand, fx, fy);//輸出完成旋轉回來

g.rotate(-degree, fx, fy);

}returnbuffImg;

}

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/531739.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531739.shtml
英文地址,請注明出處:http://en.pswp.cn/news/531739.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Floyd算法的理解

轉載于:https://www.cnblogs.com/hujunzheng/p/3919226.html

http get post java_java發送http的get、post請求實現代碼

Http請求類package wzh.Http;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.URL;import java.net.URLConnection;import java.util.List;import java.util.Map;public class HttpRe…

java string的作用_淺談java String不可變的好處

一、java內部String類的實現&#xff1a;java 8&#xff1a;public final class Stringimplements java.io.Serializable, Comparable, CharSequence {/** The value is used for character storage. */private final char value[];}java 9 及之后&#xff1a;(使用coder標識了…

34988 Happy Reversal(二進制去取反)

1 /*2 題意&#xff1a;給多個二進制數&#xff0c;對某些數進行按位取反操作&#xff01;3 然后從中找到最大數和最小數&#xff0c;并輸出他們的差值&#xff01; 4 注意&#xff1a;所有的數都是整數&#xff0c;包括取反之后5 6 思路&#xff1a;一個n為二進…

java vim ide_Vim配置Java IDE

首先安裝vim (當然做java 開發要裝jdk 這個就不說了)emerge -av vim (gentoo 系統上安裝vim 的命令,你可以用rpm ,apt-get )給vim 安裝 javacomplete 插件http://www.vim.org/scripts/script.php?script_id1785 這個插件的作用是實現一部分代碼提示功能 比如你輸入 System…

java中線程存活和線程執行的問題!

1 /*2 下面的程序會出現下面的情況&#xff0c;當Thread-0&#xff0c; Thread-1&#xff0c; Thread-2都被wait的時候&#xff0c;可能會同時蘇醒3 Thread-0 put4 Thread-1 put5 Thread-2 put6 Thread-3 get//在此處&#xff0c;Thread-3拿到鎖之后&#xff0…

java中多線程模擬(多生產,多消費,Lock實現同步鎖,替代synchronized同步代碼塊)...

import java.util.concurrent.locks.*; class DuckMsg{int size;//烤鴨的大小String id;//烤鴨的廠家和標號DuckMsg(){}DuckMsg(int size, String id){this.sizesize;this.idid;}public String toString(){return id " 大小為:" size;} } class Duck{private int …

java encode 空格_javaWeb中URLEncoder.encode空格問題

近期開發一個在線坐席的功能。發現推送的消息中空格變成了 。查詢發現URLEncoder.encode的問題。曾經用的時候也沒注意過&#xff0c;解決的方法網上是對URLEncoder.encode的之后的字符串進行替換號&#xff0c;這樣的方式假設真的有號那也被替換了。所以應該在URLEncoder.enco…

poj 1386 Play on Words(有向圖歐拉回路)

1 /*2 題意&#xff1a;單詞拼接&#xff0c;前一個單詞的末尾字母和后一個單詞的開頭字母相同3 思路&#xff1a;將一個單詞的開頭和末尾單詞分別做兩個點并建一條有向邊&#xff01;然后判斷是否存在歐拉回路或者歐拉路 4 5 再次強調有向圖歐拉路或歐拉回路的判定方法&…

java web tomcat 實例_Java Web應用開發實例

[1&#xff0e;GIS的概念 1&#xff0e;1什么是gis 地理信息系統 (GIS, Geographic Information System) 是一種基于計算機的工具&#xff0c;它可以對在地球上存在的東西和發生的事件進行成圖和分析。 GI上次提到了EclipseTomcatLomboz Java Web開發環境的配置&#xff0c;可環…

poj2513Colored Sticks(無向圖的歐拉回路)

1 /*2 題意&#xff1a;將兩端涂有顏色的木棒連在一起&#xff0c;并且連接處的顏色相同&#xff01;3 思路&#xff1a;將每一個單詞看成一個節點&#xff0c;建立節點之間的無向圖&#xff01;判斷是否是歐拉回路或者是歐拉路4 5 并查集判通 奇度節點個數等于2或…

java java.lang.enum_源碼閱讀-java基礎-java.lang.Enum

1、引言枚舉類型是 JDK 5 之后引進的一種非常重要的引用類型&#xff0c;可以用來定義一系列枚舉常量。相比與常量(public static final定義)&#xff0c;在安全性、指意性、可讀性方面更勝一籌。另外它可以和switch case搭配使用。2、類定義實際上在使用關鍵字enum創建枚舉類型…

java中有關線程的題目

1&#xff0c;看一下下面程序錯誤發生在哪一行&#xff01; class Test implements Runnable{public void run(Thread t){} }2&#xff0c;輸出結果是什么&#xff1f; class Test{public static void main(String[] args){new Thread(new Runnable(){public void run(){System…

java 可逆的加密算法_java實現AES可逆加密算法

package com.hdu.encode;import javax.crypto.Cipher;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;/*** AES 是一種可逆加密算法&#xff0c;對用戶的敏感信息加密處理 對…

森林轉換成二叉樹以及二叉樹還原為森林代碼

1 /*2 森林轉換成二叉樹3 思路&#xff1a;u的孩子節點為v1, v2, v3....&#xff08;v1,v2,....互為兄弟節點&#xff09; 4 那么將u的一個孩子節點&#xff08;v1&#xff09;連在u的左子樹上&#xff0c;那么其他的孩子節點都連在v1的右子樹上&#xff01; 5 …

poj1062昂貴的聘禮(Dijkstra**)

1 /*2 題意&#xff1a; 物主有一個物品&#xff0c;價值為P&#xff0c;地位為L&#xff0c; 以及一系列的替代品Ti和該替代品所對應的"優惠"Vi3 g[u][i] 表示的是u物品被i物品替換后的優惠價格&#xff01;(u>0, i>0)4 g[u][0]表示不用替換該物品的…

java openmp庫_OpenMP的環境變量及庫函數

OpenMP的環境變量&#xff1a;環境變量 描述 示例OMP_SCHEDULE 控制for循環任務分配結構的調度 OMP_SCHEDULE"guided,2"OMP_NUM_THREADS 設置默認線程的個數 OMP_SCHEDULE4OpenMP的庫函數函數名稱 描述int omp_get_num_threads(void) 返回當前使用的線程個數&#xf…

hdu1269迷宮城堡(判斷有向圖是否是一個強連通圖)

1 /* 題意&#xff1a; 給你一個圖&#xff0c;求這個有向圖示否是一個強連通圖&#xff08;每兩個節點都是可以相互到達的&#xff09;&#xff01; 思路1&#xff1a;按正向邊dfs一遍&#xff0c;將經過的節點計數&#xff0c;如果記錄的節點的個數小于…

mgg mysql_mgg文件怎么轉換mp3格式?

步驟/方法方法/步驟1:下載載視頻轉換器&#xff0c;我們說到在官網下載比較好吧。下載完成之后&#xff0c;我們就直接點擊進行安裝&#xff0c;一般 在安裝的過程也是非常快速的&#xff0c;主要是按照安裝向導上的步驟進行就可以了。方法/步驟2:安裝好之后&#xff0c;我們就…

poj 2385Apple Catching(簡單dp)

1 /*2 題意&#xff1a; 有兩棵蘋果樹&#xff0c;每一棵蘋果樹每一秒間隔的掉落下來一個蘋果&#xff0c;一個人在樹下接住蘋果&#xff0c;不讓蘋果掉落&#xff01;3 人在兩棵樹之間的移動是很快的&#xff01;但是這個人移動的次數是有限制的&#xff0c;問最多可以…