论坛首页 Java企业应用论坛

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

浏览 26869 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (8)
作者 正文
   发表时间:2011-12-05  
1.不重复,
2.无规律
3.字母和数字的组合

小弟先谢过了
   发表时间:2011-12-05  
你是想要串和串之间不重复,还是一个串里面的每位不重复?
0 请登录后投票
   发表时间:2011-12-05   最后修改:2011-12-05
java的工具类里面有的,实现起来也很简单自己去找吧
比如:
        /**
* 随机产生一个四位的随机数据
* @return
*/
public static String getRandomInteger()
{
int temp=(int) (Math.random()*9999);
return String.valueOf(temp);
}

/**
* 拿当前的时间为一个序列号
* @return
*/
public static String getCurrentDateNum()
{
Date dttime= new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String currentTime = sdf.format(dttime);
String str=currentTime+getRandomInteger();
return str;
}
这也是一种实现方式,我只是没有实现到那么多位而已,你自己可以参考着写写
0 请登录后投票
   发表时间:2011-12-06  
一个快速方法,取26个字母+10个数字的集合,然后shuffle,然后取前16位~~
0 请登录后投票
   发表时间:2011-12-06  
看你具体的需求了
时间,UUID,MAC,IP,进程,很多种组合
0 请登录后投票
   发表时间:2011-12-06  

Random ran = new Random();
		StringBuffer sb = new StringBuffer();
		while(sb.length()<16) {
			int rand = ran.nextInt()&0x7FFFFFFF;
			sb.append(Integer.toString(rand, 36));
		}
		String result = sb.substring(0, 16);
		System.out.println(result);

如果没有大写字母的话,可以投机取巧。使用integer的进制转换。
0 请登录后投票
   发表时间:2011-12-06  
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);
			}
		}
	}
}
0 请登录后投票
   发表时间:2011-12-06  
这个方法很多,我说一种啊:
你可以得到当前时间,精确到微秒 + 得到当前系统某个对象的hashCode() 组合而成,或者 + 得到任意随机数组合而成。
0 请登录后投票
   发表时间:2011-12-06  
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);
			}
		}
	}
}

你很活跃啊. 看来办公环境比天朝要好了. 我们得加班啊..
0 请登录后投票
   发表时间:2011-12-06  
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 = 重启一次服务器可以回一到两个贴……
0 请登录后投票
论坛首页 Java企业应用版

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