2014-11-07 3 views
0

Я хочу сгенерировать случайное число из определенного числа. Например:Создать случайное число из определенного числа?

Если у меня есть этот номер 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 - это случайное число).

, а затем в файле появляется тот же самый номер, я хочу, чтобы изменения были одинаковыми.

+12

Я не понимаю ... – Lucas

+3

Похоже, вы ищете шифрование или хэширование, а не случайные числа. –

+2

Ваш вопрос не имеет смысла. Как случайное число принадлежит к старому номеру? Это превосходит цель случайности. – m0skit0

ответ

0

это, как я решить мою проблему: первым я создал статический 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; 
} 

затем используя метод перетасовать из коллекций, я бы рандомизации ArrayList, основанный на затравку (от имени файла)

ArrayList<String> listOfAnonValues = getListOfValues(); 
Collections.shuffle(listOfAnonValues,new Random(filename.hashCode())); 

, а затем, когда я хотел бы анонимную ряд, я хотел бы использовать это число как индекс ArrayList, чтобы получить номер для замены. и так, каждое число из 4-х цифр, будет иметь уникальное случайное число, чтобы заменить его, основываясь на имени файла

Извините за всю путаницу и спасибо за всю помощь, вы, ребята дали, что помогло много;)

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(); 
} 

` Вы, вероятно, лучше использовать струны, а затем Интс, как вы можете превысить MAX_INT easilly. Вы также должны держать семя, используемое для каждого номера телефона

Смежные вопросы