随机生成1000个不重复的28位字符串

在实际开发中,我们经常会批量生成二维码,而二维码实际就是一个链接,链接中就包含了随机的字符串。

方法一:MD5(时间戳的毫秒值+时间戳的纳秒值),然后截取需要的位数

public class QrCode {
	public static String randomStr() {
        //二维码前缀,即访问地址
		String baseStr = "http://xxx.xxx.xxx/xxx";
		//毫秒级
		long str1 = System.currentTimeMillis();
		//纳秒级
		long str2 = System.nanoTime();
	    String  str = Long.toString(str1 + str2);
		// MD5加密
		String re = MD5Util.encrypt(str);
		// 所有字符串转成大写
		return baseStr + re.toUpperCase().substring(4);
	}

	@Test
	public void main() {
		for (int i = 0; i < 1000; i++) {
			 System.out.println(randomStr());
		}
	}

}
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
 
public class MD5Util {
 
	public final static String encrypt(String s) {
		char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
		
		byte [] byteInput = s.getBytes();
		//获取MD5摘要算法的MessageDigest对象
		try {
			MessageDigest mdInst = MessageDigest.getInstance("MD5");
			//使用指定的字节更新摘要
			mdInst.update(byteInput);
			//获得密文
			byte[] md = mdInst.digest();
			// 把密文转换成十六进制的字符串形式
			int j = md.length;
			char str[] = new char[j *2];  //char占两个字节
			 int k = 0;
	            for (int i = 0; i < j; i++) {
	                byte byte0 = md[i];
	                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
	                str[k++] = hexDigits[byte0 & 0xf];  //右移四位,高四位清空 取低四位的值
	            }
	            return new String(str);
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		
		
		return null;
	}
}

方法二:参考:https://blog.csdn.net/li_magic/article/details/53215234

public class InvitationCode {
	
	public static String generateRandomStr(int len) {
		//字符源,可以根据需要增减
		String generateSource = "0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ";
		String rtnStr = "";
		for (int i = 0; i < len; i++) {
		//循环随机获得当次字符,并移走选出的字符
		String nowStr = String.valueOf(generateSource.charAt((int) Math.floor(Math.random() * generateSource.length())));
		rtnStr += nowStr;
		generateSource = generateSource.replaceAll(nowStr, "");
		}
		rtnStr = "http://xxx.xxx.xxx/xxx;
		return rtnStr;
		}

	@Test
	public void main() {
		for (int i = 0; i < 1000; i++) {
		System.out.println(generateRandomStr(28));
		}
		}
}

三:总结

通过以上的方法获取随机字符串,在需求量不那么大的时候一般是不会重复的。

猜你喜欢

转载自blog.csdn.net/weixin_39737132/article/details/89311588