我想从特定数字生成一个随机数。 例如:
如果我有这个号码1234,我想从它(或为它)生成一个随机数来替换旧号码。但是这个新号码仅适用于旧号码。
目的是,接收一个号码,将其改为随机数,但知道该随机数属于旧号码。
这是我到目前为止所做的:
long seed ="seed".hashCode();
Random rnd = new Random(seed);
int a = fourDigitIntRandom(rnd);
int b = fourDigitIntRandom(rnd);
public static int fourDigitIntRandom(Random rnd){
int a1 = rnd.nextInt(10);
int a2 = rnd.nextInt(10);
int a3 = rnd.nextInt(10);
int a4 = rnd.nextInt(10);
int a = Integer.parseInt(a1+""+a2+""+a3+""+a4);
return a;
}
但是,这只是生成一个4位数的随机数。
更好的例子
我有几个文件。在每个文件中有几个与电话号码对应的号码。
我希望通过将该数字的最后4位数字更改为每个数字来匿名化,并将其作为种子文件的名称随机生成一个新的数字。
但我希望每个号码的更改对于该号码始终相同。
所以,如果我有号码12345678并将其更改为12349876(9876是随机数)。
然后在文件中,出现相同的数字,我希望更改相同。
答案 0 :(得分:1)
这样的事情: `
public static String nDigitIntRandom(Random rnd, int numOfdigits) {
final StringBuilder sb = new StringBuilder();
for(int i = 0; i < numOfdigits; i++) {
sb.append(rnd.nextInt(10));
}
return sb.toString();
}
` 你可能最好使用Strings而不是int,因为你可以超过MAX_INT easilly。您还需要保留用于每个电话号码的种子
答案 1 :(得分:0)
这就是我解决问题的方法: 首先,我创建了一个String的静态ArrayList,其中包含4位数的所有数字:
private static ArrayList<String> getListOfValues(){
ArrayList<String> listInt = new ArrayList<String>(10000);
for(int i = 0; i < 10000; i++){
if(i < 10) listInt.add("000"+i);
else if(i < 100) listInt.add("00"+i);
else if(i < 1000) listInt.add("0"+i);
else listInt.add(Integer.toString(i));
}
return listInt;
}
然后使用Collections中的方法shuffle,我会根据种子(来自文件的名称)随机化ArrayList
ArrayList<String> listOfAnonValues = getListOfValues();
Collections.shuffle(listOfAnonValues,new Random(filename.hashCode()));
然后,每当我想要匿名化一个数字时,我会使用该数字作为ArrayList的索引来获取要替换的数字。 所以,根据文件名
,每个4位数字都有一个唯一的随机数来代替它很抱歉所有的困惑和感谢你们给予的所有帮助,这有很大的帮助;)