java中获取字母和数字的组合
package com.ccytsoft.wkc.util; import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern; /**
* 生成随机码
* <P>
* 获取大写字母,小写字母和数字的任意组合的随机码
*
* @author kuangxiang(kuangxiang666@yeah.net)
* @Date 15:20 2017/12/13
*/
public class AlgorithmUtil { /**
*获取随机编码
* <P>
* 获取大写字母,小写字母和数字的任意组合的随机码
*
* @param length 要生成字符串的长度
* @param isPureDigits 生成的随机码是否是纯数字 true:表示存数字,false:表示纯字母,null:表示字母和数字均可
* @param isUpperCase 生成的随机码是否大写 如果isPureDigits的值不为true时,此值有效 true:表示大写,false:表示小写,null:表示大小写都可以
* @param isTogether 字母和数字是否必须同时存在 isPureDigits的值为null时,此值有效 true:是,false:否
*
* @return 生成的字符窜
*/
public static String getCode(int length,Boolean isPureDigits,Boolean isUpperCase,boolean isTogether) {
String val = "";
Random random = new Random();
for(int i = 0; i < length; i++){
//是否需要纯数字或者纯字母
String charOrNum = "";
if(isPureDigits!=null){
charOrNum= isPureDigits ? "num":"char";
}else{
charOrNum=random.nextInt(2) % 2 == 0 ? "char" : "num"; // 输出字母还是数字
}
//获取字符或者数字
if("char".equalsIgnoreCase(charOrNum)) {
val += (char) (getChoice(isUpperCase, random) + random.nextInt(26));
}else if("num".equalsIgnoreCase(charOrNum)) {
// 数字
val += String.valueOf(random.nextInt(10));
}
//字符和数字是否需要同时存在
if(isPureDigits==null&isTogether){
if(val.length()==length-1){
if(isPureAlphabet(val)){
val+=String.valueOf(random.nextInt(10));
break;
}
if(isPureDigits(val)){
val += (char) (getChoice(isUpperCase, random) + random.nextInt(26));
break;
}
}
}
}
return val;
} /**
* 获取随机编码的集合
*
* @param length 随机编码的长度
* @param num 想要获取书籍编码的个数
* @param isPureDigits 是否是纯数字 true:表示存数字,false:表示纯字母,null:表示字母和数字均可
* @param isUpperCase 是否大写 ,如果生成的字符串中有字母,可以设置值,true:表示大写,false:表示小写,null:表示大小写都可以
* @param isTogether 字母和数字是否必须同时存在 true:是,false:否
* @return
*/
public static List<String> genCodes(int length, long num,Boolean isPureDigits,Boolean isUpperCase,boolean isTogether){
List<String> results=new ArrayList<String>();
for(int j=0;j<num;j++){
String val = getCode( length,isPureDigits,isUpperCase,isTogether);
//val=val.toLowerCase();
if(results.contains(val)){
continue;
}else{
results.add(val);
}
}
return results;
} /**
* 生成验证码
*
* @param codeLength 编码长度
*
* @return 验证码字符窜
*/
public static String getVerifyCode(int codeLength) {
int i;
int count = 0;
char[] str = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
StringBuffer pwd = new StringBuffer("");
Random r = new Random();
while (count < codeLength) {
i = Math.abs(r.nextInt(str.length));
if (i >= 0 && i < str.length) {
pwd.append(str[i]);
count++;
}
}
return pwd.toString();
} /**
* 获取字母对应的数值
*
* @param isUpperCase 是否大写 ,如果生成的字符串中有字母,可以设置值,true:表示大写,false:表示小写,null:表示大小写都可以
* @param random 随机数
*
* @return 数值
*/
private static int getChoice(Boolean isUpperCase, Random random) {
int choice=0;
// 字符串
if(isUpperCase!=null){
choice = isUpperCase ? 65 : 97;
}else {
choice= random.nextInt(2) % 2 == 0 ? 65 : 97; //取得大写字母还是小写字母
}
return choice;
} /**
* 是否是纯数字
*
* @param str 需要检查的字符窜 * @return true:是 false:否
*/
private static boolean isPureDigits(String str) {
// String regExp =
// "^[A-Za-z]+(([0-9]+[A-Za-z0-9]+)|([A-Za-z0-9]+[0-9]+))|[0-9]+(([A-Za-z]+[A-Za-z0-9]+)|([A-Za-z0-9]+[A-Za-z]+))$";
String regExp = "^([0-9]+)$";
Pattern pat = Pattern.compile(regExp);
Matcher mat = pat.matcher(str);
return mat.matches();
} /**
* 是否是纯字母
*
* @param str 需要检查的字符窜
*
* @return true :是 false:否
*/
private static boolean isPureAlphabet(String str) {
// String regExp =
// "^[A-Za-z]+(([0-9]+[A-Za-z0-9]+)|([A-Za-z0-9]+[0-9]+))|[0-9]+(([A-Za-z]+[A-Za-z0-9]+)|([A-Za-z0-9]+[A-Za-z]+))$";
String regExp = "^([A-Za-z]+)$";
Pattern pat = Pattern.compile(regExp);
Matcher mat = pat.matcher(str);
return mat.matches();
} /**
* 测试类
*
* @param args 参数
*
*/
public static void main(String[] args) {
boolean pureDigits1 = isPureDigits("6003l8");
System.out.println("pureDigits的值"+pureDigits1);
// TODO Auto-generated method stub
List<String> results=genCodes(6,100,null,false,true);
System.out.println("results的值"+results);
}
}
java中获取字母和数字的组合的更多相关文章
- Java中获取键盘输入值的三种方法
Java中获取键盘输入值的三种方法 Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值 ...
- JAVA中获取当前系统时间及格式转换
JAVA中获取当前系统时间 一. 获取当前系统时间和日期并格式化输出: import java.util.Date;import java.text.SimpleDateFormat; publi ...
- JAVA中获取路径
内容来自于snannan_268 关键字: java中获取路径 JAVA中获取路径: 1.jsp中取得路径: 以工程名为TEST为例: (1)得到包含工程名的当前页面全路径:request.get ...
- java中获取日期和时间的方法总结
1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值. 方法如下: 要使用 java.util.Date .获取当前时间的代码如下 Date date = new Date(); da ...
- JAVA中获取当前系统时间
一. 获取当前系统时间和日期并格式化输出: import java.util.Date;import java.text.SimpleDateFormat; public class NowStrin ...
- java中获取路径中的空格处理(%20)问题
在java中获取文件路径的时候,有时候会获取到空格,但是在中文编码环境下,空格会变成“%20”从而使得路径错误. 解决办法: String path = Parameter.class.getReso ...
- java中获取系统属性以及环境变量
java中获取系统属性以及环境变量 System.getEnv()和System.getProperties()的差别 从概念上讲,系统属性 和环境变量 都是名称与值之间的映射.两种机制都能用来将用户 ...
- JAVA中获取当前运行的类名,方法名,行数
JAVA中获取当前运行的类名,方法名,行数 public static String getTraceInfo(){ StringBuffer sb = new StringBuffer(); Sta ...
- JAVA中获取文件MD5值的四种方法
JAVA中获取文件MD5值的四种方法其实都很类似,因为核心都是通过JAVA自带的MessageDigest类来实现.获取文件MD5值主要分为三个步骤,第一步获取文件的byte信息,第二步通过Messa ...
随机推荐
- 【iCore4 双核心板】DEMO V1.0 测试程序发布
iCore4 Demo V1.0程序说明 一.概要 本资料包含5个文件夹: 1.“arm”里是iCore4上arm的程序包,开发环境为KEIL5.17: 2.“fpga”里是iCore4上FPGA的程 ...
- vue处理用户输入
为了让用户和你的应用进行互动,可以用 v-on 指令绑定一个监听事件用于调用我们 Vue 实例中定义的方法: <div id="app-5"> <p>{{ ...
- js中关于Blob对象的介绍与使用
js中关于Blob对象的介绍与使用 blob对象介绍 一个 Blob对象表示一个不可变的, 原始数据的类似文件对象.Blob表示的数据不一定是一个JavaScript原生格式 blob对象本质上是 ...
- 【转】JS获取浏览器可视区域的尺寸
from: http://www.xiaoboy.com/detail/1341545044.html 所谓可视区域是指能看得见的区域,即在浏览器中能看到页面的区域(高度与宽度).刚刚使用 docum ...
- Netbeans 8.1 检测不到Tomcat8.5.3以上版本已经启动的Bug
Tomcat实际上已经启动,但是netbeans就是检测不到,只要在server.xml中,找到http/1.1的connector 添加 属性 server="Apache-Coyote/ ...
- 网络编程 -- RPC实现原理 -- RPC -- 迭代版本V2 -- 本地方法调用 整合 Spring
网络编程 -- RPC实现原理 -- 目录 啦啦啦 V2——RPC -- 本地方法调用 + Spring 1. 配置applicationContext.xml文件 注入 bean 及 管理 bean ...
- 【Java并发编程六】线程池
一.概述 在执行并发任务时,我们可以把任务传递给一个线程池,来替代为每个并发执行的任务都启动一个新的线程,只要池里有空闲的线程,任务就会分配一个线程执行.在线程池的内部,任务被插入一个阻塞队列(Blo ...
- java.lang.Exception: No runnable methods 解决方案
Running org.jeecgframework.AbstractUnitTest Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time e ...
- 错误票据|2013年蓝桥杯B组题解析第七题-fishers
错误票据 某涉密单位下发了某种票据,并要在年终全部收回. 因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号. 你的任务是通过编程,找出断号的ID和重号的ID. ...
- Java 文件读写操作
1[1]按字节读写,一次只读取一个字节,效率比较低 package bk1; import java.io.File; import java.io.FileInputStream; import j ...