首先给大家推荐一个可以在线运行JAVA程序的网站:
然后可以运行下我的程序代码,我的代码运行效果如下图:
接下来定义字符串
1 String a = "0123456789"; // 数字2 String b = "abcdefghijklmnopqrstuvwxyz"; // 小写字母3 String c = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // 大写字母4 String d = "~!@#$%^&*()_+=<>/,./;'[]{}|\\"; // 特殊字符5 String result = "";
产生随机字符串
1 result = result + getRandomString(a, 2); // 数字 2 result = result + getRandomString(b, 5); // 小写字母 3 result = result + getRandomString(c, 5); // 大写字母 4 result = result + getRandomString(d, 1); // 特殊字符 5 6 /** 7 * 8 * @输入参数:传递一个字符串 传出字符串的长度 9 * @输出参数:随机传出一个指定长度的子字符串10 *11 */12 public static String getRandomString(String str, int length) {13 Random random = new Random();14 StringBuilder sb = new StringBuilder();15 for (int i = 0; i < length; i++) {16 int number = random.nextInt(str.length());17 sb.append(str.charAt(number));18 }19 return sb.toString();20 }
产生的字符串位置顺序随机打乱
1 result = UnSort(result); // 将字母顺序打乱 2 /** 3 * 4 * @输入参数:传递一个字符串 5 * @输出参数:随机将传入的子字符串乱序后输出 6 * 7 */ 8 public static String UnSort(String str) { 9 Listlists = new ArrayList<>();10 Random random = new Random();11 StringBuffer sb = new StringBuffer();12 for (int i = 0; i < str.length(); i++) {13 lists.add(str.substring(i, i + 1));14 }15 while (!lists.isEmpty()) {16 int number = random.nextInt(lists.size());17 sb.append(lists.get(number));18 lists.remove(number);19 }20 return sb.toString();21 }
对生成的字符串生成ASCII校验尾数,这个需与与接收方进行提前约定
1 result = ProCheck(result); 2 /** 3 * 4 * @输入参数:传递一个字符串 5 * @输出参数:在该字符串最后加上字符的ASCII累加和校验 6 * 7 */ 8 private String ProCheck(String str) { 9 int sum = 0;10 for (int i = 0; i < str.length(); i++) {11 sum = sum + (int) str.charAt(i);12 }13 return str + sum;14 }
以线程方式刷新,没隔一秒产生一个字符串可以发送出去
1 public class MyRandom extends Thread { 2 3 @Override 4 public void run() { 5 while (true) { 6 Calendar calendar = Calendar.getInstance(); // 当前时间 7 System.err.println(calendar.getTime() + ":" + result); 8 try { 9 sleep(1000);10 } catch (InterruptedException ex) {11 Logger.getLogger(MyRandom.class.getName()).log(Level.SEVERE, null, ex);12 }13 }14 }
全部代码如下:
1 import java.util.ArrayList; 2 import java.util.Calendar; 3 import java.util.List; 4 import java.util.Random; 5 import java.util.logging.Level; 6 import java.util.logging.Logger; 7 8 /** 9 *10 * @author dpchenh11 */12 public class MyRandom extends Thread {13 14 @Override15 public void run() {16 // 没隔一秒生成一个随机字符串:该字符串包含2个数字 5个小写字母 5个大写字母 1个特殊字符 前13位为字符位,后面位数为校验位17 while (true) {18 String a = "0123456789"; // 数字19 String b = "abcdefghijklmnopqrstuvwxyz"; // 小写字母20 String c = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // 大写字母21 String d = "~!@#$%^&*()_+=<>/,./;'[]{}|\\"; // 特殊字符22 String result = "";23 // 加密算法 获取随机数24 result = result + getRandomString(a, 2); // 数字25 result = result + getRandomString(b, 5); // 小写字母26 result = result + getRandomString(c, 5); // 大写字母27 result = result + getRandomString(d, 1); // 特殊字符28 System.out.println("变序后sb:" + result);29 result = UnSort(result); // 将字母顺序打乱30 result = ProCheck(result);31 System.out.println("变序后sb:" + result);32 33 Calendar calendar = Calendar.getInstance(); // 当前时间34 System.err.println(calendar.getTime() + ":" + result);35 try {36 sleep(1000);37 } catch (InterruptedException ex) {38 Logger.getLogger(MyRandom.class.getName()).log(Level.SEVERE, null, ex);39 }40 }41 }42 43 /**44 *45 * @输入参数:传递一个字符串 传出字符串的长度46 * @输出参数:随机传出一个指定长度的子字符串47 *48 */49 public static String getRandomString(String str, int length) {50 Random random = new Random();51 StringBuilder sb = new StringBuilder();52 for (int i = 0; i < length; i++) {53 int number = random.nextInt(str.length());54 sb.append(str.charAt(number));55 }56 return sb.toString();57 }58 59 /**60 *61 * @输入参数:传递一个字符串62 * @输出参数:随机将传入的子字符串乱序后输出63 *64 */65 public static String UnSort(String str) {66 Listlists = new ArrayList<>();67 Random random = new Random();68 StringBuffer sb = new StringBuffer();69 for (int i = 0; i < str.length(); i++) {70 lists.add(str.substring(i, i + 1));71 }72 while (!lists.isEmpty()) {73 int number = random.nextInt(lists.size());74 sb.append(lists.get(number));75 lists.remove(number);76 }77 return sb.toString();78 }79 80 /**81 *82 * @输入参数:传递一个字符串83 * @输出参数:在该字符串最后加上字符的ASCII累加和校验84 *85 */86 private String ProCheck(String str) {87 int sum = 0;88 for (int i = 0; i < str.length(); i++) {89 sum = sum + (int) str.charAt(i);90 }91 return str + sum;92 }93 94 public static void main(String[] args) {95 MyRandom random = new MyRandom();96 random.start();97 }98 }