Java工具类——随机验证码RandNumberUtils
来源:互联网 发布:日常喝的红酒推荐 知乎 编辑:程序博客网 时间:2024/05/17 22:22
在平常的web开发当中我们经常用到验证码,但是关于如何产生指定位数的验证码一直没有深入的去了解,都是要用的时候就去写。在上一次开发当中我就将这个经验用到的产生随机数的方法进行了封装,提供一个公共的方法去调用。
package cc.ccoder.mail.utils;import java.util.HashSet;import java.util.Iterator;import java.util.Random;import java.util.Set;/** * @作者: chencong * @项目: mail--cc.ccoder.mail.utils * @时间: 2017年6月8日上午11:12:10 * @TODO:随机产生验证码 */public class RandonNumberUtils { /** * 随机生成字符 或 者数字 * @return */ private static String getRandom(){ String value = ""; Random random = new Random(); int gen = random.nextInt(2); String charOrNum = gen % 2 ==0 ? "char":"num"; if ("char".equals(charOrNum)) { //字符 int temp = random.nextInt(2)%2==0?65:97; int ascii = random.nextInt(26); value += (char)(ascii + temp); }else if ("num".equals(charOrNum)) { //是数字 value += String.valueOf(random.nextInt(10)); } return value; } /** * 随机生成字符串(包含字符和数字) * @param length 指定长度 * @return 返回set */ private static Set<String> getStrAndNum(int length) { Set<String> set = new HashSet<>(); for (int i = 0; i < length; i++) { String value = getRandom(); set.add(value); } //若生成的字符串没达到指定长度 继续生成 if (set.size() < length) { String value = getRandom(); set.add(value); } return set; } /** * 存放在set中的字符组拼接成字符串 * @param set * @return */ private static String printSet(Set set){ //打印set的方法 Iterator iterator = set.iterator(); String value = ""; while (iterator.hasNext()) { //String ele = (String) iterator.next(); value += (String)iterator.next(); } return value; } /** * 返回生成的随机字符串 * @param length 指定随机字符串长度 * @return 指定长度 大于零 返回指定长度随机字符,小于等于零 返回null */ public static String getRandonString(int length){ String value= ""; if (length > 0) { //如果返回的字符串小于指定长度 重新生成 if (value.length() < length) { Set<String> store = getStrAndNum(length); value = printSet(store); } return value; }else{ return value; } } public static void main(String[] args) { System.out.println("4位随机验证码: " + getRandonString(4)); System.out.println("5位随机验证码: " + getRandonString(5)); System.out.println("6位随机验证码: " + getRandonString(6)); }}
大概的思路就是首先在 getRandom()
中产生随机数去模2,来判断是当前是位置用字符还是数字去填充。如果是字符就利用ASCII码在65–97当中,如果是数字就利用0 – 9中的。
对于产生指定长度的字符,都存放在getStrAndNum(int length)
这个方法当中,如果产生的字符串长度小于指定长度,就再次调用产生字符的方法。
/** * 随机生成字符串(包含字符和数字) * @param length 指定长度 * @return 返回set */ private static Set<String> getStrAndNum(int length) { Set<String> set = new HashSet<>(); for (int i = 0; i < length; i++) { String value = getRandom(); set.add(value); } //若生成的字符串没达到指定长度 继续生成 if (set.size() < length) { String value = getRandom(); set.add(value); } return set; }
然后还有一个需要注意的地方是 getRandonString(int length)
给外部调用的这里面,对指定长度length
做了判断。
/** * 返回生成的随机字符串 * @param length 指定随机字符串长度 * @return 指定长度 大于零 返回指定长度随机字符,小于等于零 返回null */ public static String getRandonString(int length){ String value= ""; if (length > 0) { //如果返回的字符串小于指定长度 重新生成 if (value.length() < length) { Set<String> store = getStrAndNum(length); value = printSet(store); } return value; }else{ return value; } }
在这里首先对传入的length
参数做判断,输入的长度是否大于零,是,则返回指定长度length
的随机字符串,否则返回定义的value
的值,在这里value
初始化为空字符串。
上面贴的代码中有我用main方法测试的代码,下面就来输出一下测试的结果过。
public static void main(String[] args) { System.out.println("4位随机验证码: " + getRandonString(4)); System.out.println("5位随机验证码: " + getRandonString(5)); System.out.println("6位随机验证码: " + getRandonString(6)); }
结果
4位随机验证码: 4UZJ5位随机验证码: 2C6vx6位随机验证码: 3du8M
对了 ,调用的时候类名+方法名就行了,毕竟是静态方法对吧。
好了今天就先记录到这里,后面还有关于MD5明文加密等等一系列的工具类。
阅读全文
0 0
- Java工具类——随机验证码RandNumberUtils
- java生成随机短信验证码的工具类
- 随机验证码生成工具类
- java随机验证码
- java随机生成4位短信验证码工具类分享
- Java工具类_随机生成任意长度的字符串【密码、验证码】
- Java的随机验证码生成类
- Java的随机验证码生成类
- 随机生成验证码图片的工具类
- 工具类-随机产生指定位数的验证码
- Java 生成随机验证码
- java生成随机验证码
- Java随机生成验证码
- java生成随机验证码
- java随机生成验证码
- Java 实现随机验证码
- Java生成随机验证码
- Java生成随机验证码
- Android挂机小游戏1
- 什么是内网和外网
- java
- 深度学习工具1.1 安装依赖包
- Spring @Resource、@Autowired、@Qualifier的注解注入及区别
- Java工具类——随机验证码RandNumberUtils
- VCSEL的下一个风口
- python基础(八)——多线程
- STL使用总结
- 使用Python 2.7中pycurl模块编写探测多节点Web服务质量脚本
- 操作系统之死锁概述与银行家算法
- 二叉树的创建,遍历,查找,查找父节点,深度,大小等的递归实现
- JAVA循环结构
- Isolation Forest算法原理详解