锁定老帖子 主题:互不重复的16位随机数生成代码.
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (8)
|
|
---|---|
作者 | 正文 |
发表时间:2011-12-05
1.不重复,
2.无规律 3.字母和数字的组合 小弟先谢过了 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-12-05
你是想要串和串之间不重复,还是一个串里面的每位不重复?
|
|
返回顶楼 | |
发表时间: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; } 这也是一种实现方式,我只是没有实现到那么多位而已,你自己可以参考着写写 |
|
返回顶楼 | |
发表时间:2011-12-06
一个快速方法,取26个字母+10个数字的集合,然后shuffle,然后取前16位~~
|
|
返回顶楼 | |
发表时间:2011-12-06
看你具体的需求了
时间,UUID,MAC,IP,进程,很多种组合 |
|
返回顶楼 | |
发表时间: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的进制转换。 |
|
返回顶楼 | |
发表时间: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); } } } } |
|
返回顶楼 | |
发表时间:2011-12-06
这个方法很多,我说一种啊:
你可以得到当前时间,精确到微秒 + 得到当前系统某个对象的hashCode() 组合而成,或者 + 得到任意随机数组合而成。 |
|
返回顶楼 | |
发表时间: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); } } } } 你很活跃啊. 看来办公环境比天朝要好了. 我们得加班啊.. |
|
返回顶楼 | |
发表时间: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 = 重启一次服务器可以回一到两个贴…… |
|
返回顶楼 | |