论坛首页 Java企业应用论坛

互不重复的16位随机数生成代码.

浏览 26875 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (8)
作者 正文
   发表时间:2011-12-06  
抽牌...
0 请登录后投票
   发表时间:2011-12-06  
可以研究下TEA算法
0 请登录后投票
   发表时间:2011-12-06  
.......我估计还是会重复,日期+随机数+流水号,可能就不会重复了
0 请登录后投票
   发表时间:2011-12-06  
貌似这是13位不重复的代码System.nanoTime();
0 请登录后投票
   发表时间:2011-12-07  
以前弄过类似的处理,是这样做的:
把26个字母和10个数字组成一个码表字符串,码表长度n
然后执行m次循环(要合成的字符串长度,如16,当然这里m <= n){
    然后按n(36位码表长度)取随机数,并从码表抽出随机数位置的一个字符,同时将这一字符跟码表最末字符置换,然后n-1,
}
基本是这个过程
0 请登录后投票
   发表时间:2011-12-07  
时间戳 + MD5加密..
满足你上述条件
0 请登录后投票
   发表时间:2011-12-07  
kidneyball 写道
b_lee 写道
kidneyball 写道
public class RandomString {

	/**
	 * 每位允许的字符
	 */
	private static final String POSSIBLE_CHARS="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	
	/**
	 * 生产一个指定长度的随机字符串
	 * @param length 字符串长度
	 * @return
	 */
	private String generateRandomString(int length) {
		StringBuilder sb = new StringBuilder(length);
		SecureRandom random = new SecureRandom();
		for (int i = 0; i < length; i++) {
			sb.append(POSSIBLE_CHARS.charAt(random.nextInt(POSSIBLE_CHARS.length())));
		}
		return sb.toString();
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Set<String> check = new HashSet<String>();
		RandomString obj = new RandomString();
		
		//生成2000000个随机字符串,检查是否出现重复
		for (int i = 0; i < 2000000; i++) {
			String s = obj.generateRandomString(16);
			if (check.contains(s)) {
				throw new IllegalStateException("Repeated string found : " + s);
			} else {
				if (i % 1000 == 0) System.out.println("generated " + i / 1000 + "000 strings.");
				check.add(s);
			}
		}
	}
}

你很活跃啊. 看来办公环境比天朝要好了. 我们得加班啊..


JBoss + Seam + RichFaces + 上百个ejb = 重启一次服务器可以回一到两个贴……


天啊。。。和我一样。 万恶的EJB!!!
0 请登录后投票
   发表时间:2011-12-07  
试试UUID
1、jdk带的
2、http://johannburkard.de/software/uuid/
0 请登录后投票
   发表时间:2011-12-07  
毫秒数+随机数
然后根据 0-9 a-z A-z 生成62进制的字符串
也就是你要的随机数了
0 请登录后投票
   发表时间:2011-12-07  
kimmking 写道
试试UUID
1、jdk带的
2、http://johannburkard.de/software/uuid/

我都是用uuid作为数据库的主键的
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics