首先给大家推荐一个可以在线运行JAVA程序的网站:https://tool.lu/coderunner/

然后可以运行下我的程序代码,我的代码运行效果如下图:

接下来定义字符串

 String a = "0123456789";                    // 数字
String b = "abcdefghijklmnopqrstuvwxyz"; // 小写字母
String c = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // 大写字母
String d = "~!@#$%^&*()_+=<>/,./;'[]{}|\\"; // 特殊字符
String result = "";

产生随机字符串

 result = result + getRandomString(a, 2); // 数字
result = result + getRandomString(b, 5); // 小写字母
result = result + getRandomString(c, 5); // 大写字母
result = result + getRandomString(d, 1); // 特殊字符 /**
*
* @输入参数:传递一个字符串 传出字符串的长度
* @输出参数:随机传出一个指定长度的子字符串
*
*/
public static String getRandomString(String str, int length) {
Random random = new Random();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
int number = random.nextInt(str.length());
sb.append(str.charAt(number));
}
return sb.toString();
}

产生的字符串位置顺序随机打乱

 result = UnSort(result);  // 将字母顺序打乱
/**
*
* @输入参数:传递一个字符串
* @输出参数:随机将传入的子字符串乱序后输出
*
*/
public static String UnSort(String str) {
List<String> lists = new ArrayList<>();
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
lists.add(str.substring(i, i + 1));
}
while (!lists.isEmpty()) {
int number = random.nextInt(lists.size());
sb.append(lists.get(number));
lists.remove(number);
}
return sb.toString();
}

对生成的字符串生成ASCII校验尾数,这个需与与接收方进行提前约定

 result = ProCheck(result);
/**
*
* @输入参数:传递一个字符串
* @输出参数:在该字符串最后加上字符的ASCII累加和校验
*
*/
private String ProCheck(String str) {
int sum = 0;
for (int i = 0; i < str.length(); i++) {
sum = sum + (int) str.charAt(i);
}
return str + sum;
}

以线程方式刷新,没隔一秒产生一个字符串可以发送出去

 public class MyRandom extends Thread {

     @Override
public void run() {
while (true) {
Calendar calendar = Calendar.getInstance(); // 当前时间
System.err.println(calendar.getTime() + ":" + result);
try {
sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(MyRandom.class.getName()).log(Level.SEVERE, null, ex);
}
}
}

全部代码如下:

 import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger; /**
*
* @author dpchenh
*/
public class MyRandom extends Thread { @Override
public void run() {
// 没隔一秒生成一个随机字符串:该字符串包含2个数字 5个小写字母 5个大写字母 1个特殊字符 前13位为字符位,后面位数为校验位
while (true) {
String a = "0123456789"; // 数字
String b = "abcdefghijklmnopqrstuvwxyz"; // 小写字母
String c = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // 大写字母
String d = "~!@#$%^&*()_+=<>/,./;'[]{}|\\"; // 特殊字符
String result = "";
// 加密算法 获取随机数
result = result + getRandomString(a, 2); // 数字
result = result + getRandomString(b, 5); // 小写字母
result = result + getRandomString(c, 5); // 大写字母
result = result + getRandomString(d, 1); // 特殊字符
System.out.println("变序后sb:" + result);
result = UnSort(result); // 将字母顺序打乱
result = ProCheck(result);
System.out.println("变序后sb:" + result); Calendar calendar = Calendar.getInstance(); // 当前时间
System.err.println(calendar.getTime() + ":" + result);
try {
sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(MyRandom.class.getName()).log(Level.SEVERE, null, ex);
}
}
} /**
*
* @输入参数:传递一个字符串 传出字符串的长度
* @输出参数:随机传出一个指定长度的子字符串
*
*/
public static String getRandomString(String str, int length) {
Random random = new Random();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
int number = random.nextInt(str.length());
sb.append(str.charAt(number));
}
return sb.toString();
} /**
*
* @输入参数:传递一个字符串
* @输出参数:随机将传入的子字符串乱序后输出
*
*/
public static String UnSort(String str) {
List<String> lists = new ArrayList<>();
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
lists.add(str.substring(i, i + 1));
}
while (!lists.isEmpty()) {
int number = random.nextInt(lists.size());
sb.append(lists.get(number));
lists.remove(number);
}
return sb.toString();
} /**
*
* @输入参数:传递一个字符串
* @输出参数:在该字符串最后加上字符的ASCII累加和校验
*
*/
private String ProCheck(String str) {
int sum = 0;
for (int i = 0; i < str.length(); i++) {
sum = sum + (int) str.charAt(i);
}
return str + sum;
} public static void main(String[] args) {
MyRandom random = new MyRandom();
random.start();
}
}

java随机生成字符串和校验的更多相关文章

  1. RandomStringUtils工具类(java随机生成字符串)

    使用RandomStringUtils可以选择生成随机字符串,可以是全字母,全数字,自定义生成字符等等... 其最基础的方法: 参数解读: count:需要生成的随机串位数 letters:只要字母 ...

  2. java随机生成字符串(字符随机生成类 生成随机字符组合)

    原文:http://www.jb51.net/article/45006.htm package p2p_web; import java.util.ArrayList; import java.ut ...

  3. java随机生成字符串工具类

    package aA; import java.util.ArrayList; import java.util.Arrays; import java.util.Random; /** * 字符随机 ...

  4. java随机生成字符串并排序

    package com.Imooc; import java.util.ArrayList; import java.util.Collections; import java.util.List; ...

  5. java 随机生成4位随机数

    java 随机生成4位的随机数测试类 @org.junit.Testpublic void testRandom(){ String msg="您的注册码为%s,谢谢注册!"; S ...

  6. Java随机生成定长纯数字或数字字母混合数

    (转)Java随机生成定长纯数字或数字字母混合数 运行效果图: 具体实现代码

  7. c# .Net随机生成字符串代码

    /// <summary> /// 随机生成字符串 /// </summary> /// <param name="OperationType"> ...

  8. java中随机生成字符串的方法(三种)

    org.apache.commons.lang(2.6): 链接:https://pan.baidu.com/s/1k_oeA5AjSt6evoR7zT8gpQ 提取码:yhl5 1.生成的字符串每个 ...

  9. Java随机生成18位身份证号

    package com.ihome.data; import java.text.SimpleDateFormat; import java.util.Calendar; import java.ut ...

随机推荐

  1. python之路--day13---函数--三元表达式,递归,匿名函数,内置函数-----练习

    1.文件内容如下,标题为:姓名,性别,年纪,薪资 egon male 18 3000 alex male 38 30000 wupeiqi female 28 20000 yuanhao female ...

  2. JAVA_SE基础——58.如何用jar命令对java工程进行打包

    有时候为了更方便快捷的部署和执行Java程序,要把java应用程序打包成一个jar包.而这个基础的操作有时候也很麻烦,为了方便java程序员们能够方便的打包java应用程序,下面对jar命令进行介绍, ...

  3. awk sed tr替换换行符为逗号,并合并为一行

    在群里看到的.记录以备用.  sed 帮助命令:http://man.linuxde.net/sed 文件里有如下行,我想将每行的回车符替换为逗号,并将所有行合并到一行,用awk或sed怎么写啊TOP ...

  4. ssh整合之二hibernate单独搭建

    1.首先我们需要去拷贝我们的hibernate所需的jar包  这里还需要加入我们C3P0的jar包,因为我们hibernate中使用的C3P0连接池 2. 编写我们的关系映射文件Customer.c ...

  5. 翻译:JVM虚拟机规范1.7中的运行时常量池部分(二)

    本篇为JVM虚拟机规范1.7中的运行时常量池部分系列的第二篇. 4.4.4. The CONSTANT_Integer_info and CONSTANT_Float_info Structures ...

  6. SQL 中的日期和时间类型

    在我们SQL中一般支持三种数据类型. date:日历日期,包括年(四位),月和日. time: 一天中的时间,包括小时,分和秒.可以用变量time(p)来表示秒的小数点后的数字位数(默认是0). 通过 ...

  7. Apache设置用户权限(2个域名。一个能访问全部文件,一个只能访问指定文件)

    可以利用apache的虚拟主机的配置设置: 2个域名一个是xxxxx.com ,一个是aaaaa.com xxxxx.com配置只访问jpg文件,aaaaa.com可以访问所有文件 <Virtu ...

  8. 在删除一个指针之后,一定将该指针设置成空指针(即在delete *p之后一定要加上: p=NULL)

    在删除一个指针之后,一定将该指针设置成空指针(即在delete *p之后一定要加上: p=NULL)

  9. 对scrapy经典框架爬虫原理的理解

    1,spider打开某网页,获取到一个或者多个request,经由scrapy engine传送给调度器schedulerrequest特别多并且速度特别快会在scheduler形成请求队列queue ...

  10. super函数的作用

    super函数的作用super().__init__()当子类重写父类的方法时,会覆盖父类方法,super此举是保留父类 如果属性名跟方法名相同,属性会覆盖方法 方法必须要有实例才能被调用,这叫做绑定