日期:2014-05-20  浏览次数:20796 次

如何生产22位不重复随机数
大家好:

  如何生产22位不重复随机数,可以数字字母组合,不能够重复,谢谢!

------解决方案--------------------
是否允许发生极其少量重复?比如十万个里面可能重复1个,还是绝对禁止发生重复?
------解决方案--------------------
Java code


        char[] letters = {'A', 'C', '1', '2', '3','4', 'a', 'e', 'f', 'z'};
        
        String tStr = String.valueOf(System.currentTimeMillis());
        System.out.println(tStr);
        StringBuilder sb = new StringBuilder();
        /*从当前时间的毫秒获取12位数*/
        for(int i=1;i<tStr.length();i++)    
            sb.append(letters[tStr.charAt(i)-'0']);
        
        /*随机生成另外十位,由于前面的12位数不可能重复,所以生成的串是不重复的*/
        for(int i=0;i<10;i++)
            sb.append(letters[(int) (Math.random()*10)]);
        System.out.println(sb.toString());

------解决方案--------------------
3楼的算比较不错了,虽然从逻辑上来说存在重复可能,但应该非常非常非常低了。

另外刚才还少问了一个问题,你是集群环境还是非集群环境?
------解决方案--------------------
额,大牛请问为什么会有重复的情况?
探讨

3楼的算比较不错了,虽然从逻辑上来说存在重复可能,但应该非常非常非常低了。

另外刚才还少问了一个问题,你是集群环境还是非集群环境?

------解决方案--------------------
那把毫秒数全用上吧。
Java code

        char[] letters = {'A', 'C', '1', '2', '3','4', 'a', 'e', 'f', 'z'};
        
        String tStr = String.valueOf(System.currentTimeMillis());
        StringBuilder sb = new StringBuilder();
        /*从当前时间的毫秒获取12位数*/
        for(int i=0;i<tStr.length();i++)    
            sb.append(letters[tStr.charAt(i)-'0']);
        
        /*随机生成另外十位,由于前面的12位数不可能重复,所以生成的串是不重复的*/
        for(int i=0;i<9;i++)
            sb.append(letters[(int) (Math.random()*10)]);
        System.out.println(sb.toString());

------解决方案--------------------
注释忘了修改。抱歉
Java code

        char[] letters = {'A', 'C', '1', '2', '3','4', 'a', 'e', 'f', 'z'};
        
        String tStr = String.valueOf(System.currentTimeMillis());
        StringBuilder sb = new StringBuilder();
        /*从当前时间的毫秒获取13位数*/
        for(int i=0;i<tStr.length();i++)    
            sb.append(letters[tStr.charAt(i)-'0']);
        
        /*随机生成另外九位,由于前面的13位数不可能重复,所以生成的串是不重复的*/
        for(int i=0;i<9;i++)
            sb.append(letters[(int) (Math.random()*10)]);
        System.out.println(sb.toString());

------解决方案--------------------
Java code

boolean flag=false;
 StringBuilder sb = new StringBuilder();
char[] letters = {'A', 'C', '1', '2', '3','4', 'a', 'e', 'f', 'z'};
for(int i=0;i<22;i++){
        do{
               int temp=(int)(Math.random()*letters.length());
               sb.append(letters[temp]);
            for(int i=0;i<sb.length();i++){
                if(letters[temp]==(sb.charAt(i))){
                    flag=true;
                    break;
                }
                flag=false;
            }
        }while(flag);
}

------解决方案--------------------
Java code

boolean flag=false;
 StringBuilder sb = new StringBuilder();
char[] letters = {'A', 'C', '1', '2', '3','4', 'a', 'e', 'f', 'z'};
for(int i=0;i<22;i++){
        do{
               int temp=(int)(Math.random()*letters.length());
               sb.append(letters[temp]);
            for(int i=0;i<sb.length();i++){
                if(letters[temp]==(sb.charAt(i))){
                    flag=true;
                    sb.deletecharAt(i);//如果加进去的是重复的,就删除它
                    break;
                }
                flag=false;
            }
        }while(flag);
}

------解决方案--------------------