锁定老帖子 主题:互不重复的16位随机数生成代码.
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (8)
|
|
---|---|
作者 | 正文 |
发表时间:2011-12-06
抽牌...
|
|
返回顶楼 | |
发表时间:2011-12-06
可以研究下TEA算法
|
|
返回顶楼 | |
发表时间:2011-12-06
.......我估计还是会重复,日期+随机数+流水号,可能就不会重复了
|
|
返回顶楼 | |
发表时间:2011-12-06
貌似这是13位不重复的代码System.nanoTime();
|
|
返回顶楼 | |
发表时间:2011-12-07
以前弄过类似的处理,是这样做的:
把26个字母和10个数字组成一个码表字符串,码表长度n 然后执行m次循环(要合成的字符串长度,如16,当然这里m <= n){ 然后按n(36位码表长度)取随机数,并从码表抽出随机数位置的一个字符,同时将这一字符跟码表最末字符置换,然后n-1, } 基本是这个过程 |
|
返回顶楼 | |
发表时间:2011-12-07
时间戳 + MD5加密..
满足你上述条件 |
|
返回顶楼 | |
发表时间: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!!! |
|
返回顶楼 | |
发表时间:2011-12-07
试试UUID
1、jdk带的 2、http://johannburkard.de/software/uuid/ |
|
返回顶楼 | |
发表时间:2011-12-07
毫秒数+随机数
然后根据 0-9 a-z A-z 生成62进制的字符串 也就是你要的随机数了 |
|
返回顶楼 | |
发表时间:2011-12-07
kimmking 写道 试试UUID
1、jdk带的 2、http://johannburkard.de/software/uuid/ 我都是用uuid作为数据库的主键的 |
|
返回顶楼 | |