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.mzph.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;问最多可以…