java随机生成字符串和校验
首先给大家推荐一个可以在线运行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随机生成字符串和校验的更多相关文章
- RandomStringUtils工具类(java随机生成字符串)
使用RandomStringUtils可以选择生成随机字符串,可以是全字母,全数字,自定义生成字符等等... 其最基础的方法: 参数解读: count:需要生成的随机串位数 letters:只要字母 ...
- java随机生成字符串(字符随机生成类 生成随机字符组合)
原文:http://www.jb51.net/article/45006.htm package p2p_web; import java.util.ArrayList; import java.ut ...
- java随机生成字符串工具类
package aA; import java.util.ArrayList; import java.util.Arrays; import java.util.Random; /** * 字符随机 ...
- java随机生成字符串并排序
package com.Imooc; import java.util.ArrayList; import java.util.Collections; import java.util.List; ...
- java 随机生成4位随机数
java 随机生成4位的随机数测试类 @org.junit.Testpublic void testRandom(){ String msg="您的注册码为%s,谢谢注册!"; S ...
- Java随机生成定长纯数字或数字字母混合数
(转)Java随机生成定长纯数字或数字字母混合数 运行效果图: 具体实现代码
- c# .Net随机生成字符串代码
/// <summary> /// 随机生成字符串 /// </summary> /// <param name="OperationType"> ...
- java中随机生成字符串的方法(三种)
org.apache.commons.lang(2.6): 链接:https://pan.baidu.com/s/1k_oeA5AjSt6evoR7zT8gpQ 提取码:yhl5 1.生成的字符串每个 ...
- Java随机生成18位身份证号
package com.ihome.data; import java.text.SimpleDateFormat; import java.util.Calendar; import java.ut ...
随机推荐
- python全栈开发-logging模块(日记专用)
一.概述 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,l ...
- linux下的Shell编程(4)特殊的变量和占位符
$#表示包括$0在内的命令行参数的个数.在Shell中,脚本名称本身是$0,剩下的依次是$0.$1.$2-.${9},等等. $*表示整个参数列表,不包括$0,也就是说不包括文件名的参数列表. $?表 ...
- Django实现 省 市 县 自关联的下拉级联
前端部分: 三个下拉拉菜单进行级联 <body> <select id="province" > <option value="" ...
- [CodeForces10D]LCIS(最长公共上升子序列) - DP
Description 给定两个数列,求最长公共上升子序列,并输出其中一种方案. Input&Output Input 第一行一个整数n(0<n<=500),数列a的长度. 第二行 ...
- SpringBoot(五):@ConfigurationProperties配置参数绑定
在springmvc或其他ssh框架中如果我们要实现一个配置参数的加载,需要使用代码实现读取properties文件等操作,或者需要使用其他属性@value(name="username&q ...
- wmv12下安装centos7
第一步:安装软件: vmw版本是12,并在vmw下安装centos为CentOS-7-x86_64-DVD-1708.iso: 第二步:修改vmw虚拟网络配置 1)配置VMnet8 修改ip等信息 点 ...
- Struts(二十五):自定义验证器
编程验证 Struts2提供了一个Validateable接口,可以使用Action类实现这个接口以提供编程验证: ActionSupport类已经实现了Validateable接口. public ...
- POJ-2570 Fiber Network---Floyd+二进制表示集合
题目链接: https://vjudge.net/problem/POJ-2570 题目大意: 一些公司决定搭建一个更快的网络,称为"光纤网".他们已经在全世界建立了许多站点,这 ...
- [翻译] TensorFlow Programmer's Guide之Frequently Asked Questions(问得频率最多的几个问题)
目录: 特点和兼容性(Features and Compatibility) 建立一个TensorFlow图(Building a TensorFlow graph) 运行一个TensorFlow计算 ...
- WPF中自定义GridLengthAnimation
需求 我们想在编辑一个列表中某一个条目时,将编辑的详情内容也放置当前面,比如右侧. 可以通过将一个Grid,分成两个Cloumn,动态调整两个Cloumn的Width,就可以实现这个需求. 我们知道, ...