java生成随机不重复id

来源:互联网 发布:谷歌全球域名 编辑:程序博客网 时间:2024/06/06 01:44
package com.ek.util;
import java.util.Random;


public class GetRandomID{
private Random random;    
   private String table;    
   public GetRandomID() {    
       random = new Random();    
       table = "0123456789";    
   }    
   public String randomId() {  
   int id=random.nextInt(10);  
       String ret = null,    
           num = String.format("%05d", id);    
       int key = random.nextInt(10),     
           seed = random.nextInt(100);    
       Caesar caesar = new Caesar(table, seed);  
       num = caesar.encode(key, num);    
       ret = num     
           + String.format("%01d", key)     
           + String.format("%02d", seed);    
           
       return ret;    
   }    
/*    public static void main(String[] args) {    
    GetRandomID r = new GetRandomID();       
       System.out.println("---------------------"+r.randomId()+"-------------------------------------");      
   }   */ 
     
   public class Caesar {    
       private String table;    
       private int seedA = 1103515245;    
       private int seedB = 12345;    
           
       public Caesar(String table, int seed) {    
           this.table = chaos(table, seed, table.length());    
       }    
       public Caesar(String table) {    
           this(table, 11);    
       }    
       public Caesar() {    
           this(11);    
       }    
       public Caesar(int seed) {    
           this("ABCDEFGHIJKLMNOPQRSTUVWXYZ", seed);    
       }    
       public char dict(int i, boolean reverse) {    
           int s = table.length(), index = reverse ? s - i : i;    
           return table.charAt(index);    
       }    
       public int dict(char c,  boolean reverse) {    
           int s = table.length(), index = table.indexOf(c);    
           return reverse ? s - index : index;    
       }    
       public int seed(int seed) {    
           long temp = seed;    
           return (int)((temp * seedA + seedB) & 0x7fffffffL);    
       }    
       
       public String chaos(String data, int seed, int cnt) {    
           StringBuffer buf = new StringBuffer(data);    
           char tmp; int a, b, r = data.length();    
           for (int i = 0; i < cnt; i += 1) {    
               seed = seed(seed); a = seed % r;    
               seed = seed(seed); b = seed % r;    
               tmp = buf.charAt(a);    
               buf.setCharAt(a, buf.charAt(b));    
               buf.setCharAt(b, tmp);    
           }    
           return buf.toString();    
       }    
       
       public String crypto(boolean reverse,    
                            int key, String text) {    
           String ret = null;    
           StringBuilder buf = new StringBuilder();    
           int m, s = table.length(), e = text.length();    
       
           for(int i = 0; i < e; i += 1) {    
               m = dict(text.charAt(i), reverse);    
               if (m < 0) break;    
               m = m + key + i;    
               buf.append(dict(m % s, reverse));    
           }    
           if (buf.length() == e)    
               ret = buf.toString();    
           return ret;    
       }    
       public String encode(int key, String text) {    
           return crypto(false, key, text);    
               
       }    
       public String decode(int key, String text) {    
           return crypto(true , key, text);    
       }    
//       public static void main(String[] args) {    
//            Caesar caesar = new Caesar();    
//            String data = caesar.encode(32, "APPLE");    
//            caesar.decode(32, data);    
//        }    
   }  
}
0 0