springmvc java的验证码的小程序
记录下自己的验证码小工具,留待以后复用。
字符库代码
public class SecurityCode {public enum SecurityCodeLevel {Simple, Medium, Hard};public static String getSecurityCode() {return getSecurityCode(4, SecurityCodeLevel.Medium, false);}public static String getSecurityCode(int length, SecurityCodeLevel level,boolean isCanRepeat) {// 随机抽取len个字符int len = length;// 字符集合(除去易混淆的数字0、数字1、字母l、字母o、字母O)char[] codes = { '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b','c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'm', 'n', 'p','q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B','C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N','P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };// 根据不同的难度截取字符数组if (level == SecurityCodeLevel.Simple) {codes = Arrays.copyOfRange(codes, 0, 9);} else if (level == SecurityCodeLevel.Medium) {codes = Arrays.copyOfRange(codes, 0, 33);}// 字符集合长度int n = codes.length;// 抛出运行时异常if (len > n && isCanRepeat == false) {throw new RuntimeException(String.format("验证码长度大于字符库长度,请改小验证码位数参数 length",len, level, isCanRepeat, n));}// 存放抽取出来的字符char[] result = new char[len];// 判断能否出现重复的字符if (isCanRepeat) {for (int i = 0; i < result.length; i++) {// 索引 0 and n-1int r = (int) (Math.random() * n);// 将result中的第i个元素设置为codes[r]存放的数值result[i] = codes[r];}} else {for (int i = 0; i < result.length; i++) {// 索引 0 and n-1int r = (int) (Math.random() * n);// 将result中的第i个元素设置为codes[r]存放的数值result[i] = codes[r];// 必须确保不会再次抽取到那个字符,因为所有抽取的字符必须不相同。// 因此,这里用数组中的最后一个字符改写codes[r],并将n减1codes[r] = codes[n - 1];n--;}}return String.valueOf(result);} }
画图片代码
import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.Random; import com.sun.image.codec.jpeg.ImageFormatException; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder;public class SecurityImage {public static BufferedImage createImage(String securityCode) {// 验证码长度int codeLength = securityCode.length();// 字体大小int fSize = 15;int fWidth = fSize + 1;// 图片宽度int width = codeLength * fWidth + 6;// 图片高度int height = fSize * 2 + 1;// 图片BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);Graphics g = image.createGraphics();// 设置背景色 g.setColor(Color.WHITE);// 填充背景g.fillRect(0, 0, width, height);// 设置边框颜色 g.setColor(Color.LIGHT_GRAY);// 边框字体样式g.setFont(new Font("Arial", Font.BOLD, height - 2));// 绘制边框g.drawRect(0, 0, width - 1, height - 1);// 绘制噪点Random rand = new Random();for (int i = 0; i < codeLength * 6; i++) {int xs = rand.nextInt(width);int ys = rand.nextInt(height);// 绘制1*1大小的矩形 randColor(g, rand);g.drawRect(xs, ys, 1, 1);}// 干扰线for (int i = 0; i < 10; i++) {int xs = rand.nextInt(width);int ys = rand.nextInt(height);int xe = xs + 10;int ye = ys + 10;randColor(g, rand);g.drawLine(xs, ys, xe, ye);}// 绘制验证码int codeY = height - 10;// 设置字体颜色和样式g.setFont(new Font("Georgia", Font.BOLD, fSize));for (int i = 0; i < codeLength; i++) {randColor(g, rand);g.drawString(String.valueOf(securityCode.charAt(i)), i * 16 + 5,codeY);}// 关闭资源 g.dispose();return image;}/*** 随机色* * @param g* @param rand*/private static void randColor(Graphics g, Random rand) {int red = 0, green = 0, blue = 0;red = rand.nextInt(255);green = rand.nextInt(255);blue = rand.nextInt(255);g.setColor(new Color(red, green, blue));}public static ByteArrayInputStream getImageAsInputStream(String securityCode) {BufferedImage image = createImage(securityCode);return convertImageToStream(image);}private static ByteArrayInputStream convertImageToStream(BufferedImage image) {ByteArrayInputStream inputStream = null;ByteArrayOutputStream bos = new ByteArrayOutputStream();JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(bos);try {jpeg.encode(image);byte[] bts = bos.toByteArray();inputStream = new ByteArrayInputStream(bts);} catch (ImageFormatException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return inputStream;} }
转载于:https://www.cnblogs.com/Think-007/p/7510025.html
springmvc java的验证码的小程序相关推荐
- java springboot 体育场馆预约小程序源码
博主介绍:✌在职Java研发工程师.专注于程序设计.源码分享.技术交流.专注于Java技术领域和毕业设计✌ 项目名称 java springboot 体育场馆预约小程序源码 演示视频 ...
- 计算机毕业设计Java学习自律养成小程序后台(源码+系统+mysql数据库+lw文档)
计算机毕业设计Java学习自律养成小程序后台(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java学习自律养成小程序后台(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目架构 ...
- 计算器小程序java课程设计,java课程设计----计算器小程序报告.doc
java课程设计----计算器小程序报告.doc #####学院JAVA语言课程设计报告小程序计算器系统管理班级:#######姓名:#####指导老师:###时间:2012年6月25日至6月29日2 ...
- 3种设计模式的java小程序,java实现的设计模式小程序 模拟Web系统
[实例简介] java实现的设计模式小程序,应用了策略模式,单例模式,工厂模式,抽象工厂模式,责任链模式.模拟的是Web系统针对不同用户提供不同的功能,可以在此基础上添加自己的代码. [实例截图] [ ...
- java语言开发微信小程序(一)
出于兴趣,自己用java搞了一次小程序,现在记录下来,就权当笔记吧.当然也希望能给看到这篇文章的同志一些帮助.这篇文章分两部分,这部分先介绍小程序开发的一些基础知识,包括需要做的准备.按照习惯,先贴一 ...
- 用JAVA写一个画图小程序(JAVA 大作业)
第一次写博客 且是稍微大点的程序 看看就行 重新写的在这,更加清晰明了:点击进入:用JAVA写一个画图小程序(JAVA 大作业)重排版本 设计思路 首先我直接去了Windows自带画图程序去实践模拟, ...
- Java多功能计算器小程序
Java多功能计算器小程序(附界面) 早期写的计算器,现在看来还是挺粗糙的,各个控件应该用数组来初始化和排版,懒得改凑合看吧.功能挺全的,求根加减乘除百分制删除清空,和实体简易计算器几乎一致 pack ...
- Java社交商城APP+小程序多功能B2B2C商城源码
Java社交商城APP+小程序多功能B2B2C商城源码 功能介绍 1)用户可通过邀请好友.签到赚取糖果: 2)用户可以通过平台获取想要的商品,领券购买并获取分佣提成: 3) 用户可以通过淘宝链接搜索商 ...
- java springboot分销商城小程序源码
java分销商城微信小程序 后台采用springboot + mybatis 前后分离 resetful接口 前台bootstrap + vue.js 适合二次开发 主要功能 首先,登陆小程序后台,在 ...
最新文章
- Java字符串的子串
- python获取当前年份_Python根据当前日期取去年同星期日期
- 理解Event的冒泡模型
- keras时间序列数据预测_使用Keras的时间序列数据中的异常检测
- 转-Kafka【第一篇】Kafka集群搭建
- happens-before规则和as-if-serial语义
- zygoteinit.java_源码跟踪之启动流程:从ZygoteInit到onCreate
- 在Android Studio中使用Method trace,查看某进程的所有线程trace的方法
- 3.SRE:Google运维解密 --- 拥抱风险
- chrome 开发工具插件总结
- 大学计算机应用与基础第二版答案,大学计算机应用基础(第2版)上机指导与习题集...
- 独奏骑士服务器维护,独奏骑士新手天赋怎么选?新手天赋选择攻略
- 国产操作系统环境搭建(内含镜像资源)
- con和com开头单词
- Visual Studio 2015/2017/2019 设置透明主题、个性背景(含异常解决方法)
- 记录自己学习尚硅谷javaweb2022版中遇到的一些问题
- 大数据下的密码学技术挑战
- lai kan kan
- MVC 音乐商店 第 4 部分: 模型和数据访问
- MAC地址存在的意义
热门文章
- 利用IKVM在C#中调Java程序
- Logistic regression Newton’s method
- C#面向对象名词比较
- Trying to embed a platform view but the PrerollContext does not support embedding
- Hiernate概述
- Consider defining a bean named 'entityManagerFactory' in your configuration解决办法
- [Coding Style] CSS coding style
- 面向对象的三个基本特征(讲解)-转载
- [HTTP] Cookie
- 前端基础牢记的一些操作-Github仓库管理