您的位置:首页 > 编程语言 > Java开发

java生成唯一随即数

2012-07-20 10:10 176 查看
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);

}

}

//*********************************

import java.util.Random;

public class Suiji {

private Random random;

private String table;

public Suiji(){

random = new Random();

table="0123456789";

}

public String randomId(int id){

String ret=null;

String num=String.format("%03d", id);

int key = random.nextInt(10);

int 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) {

Suiji suiji=new Suiji();

//for(int i=0;i<30;i++){

System.out.println(suiji.randomId(0));

//}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: