Как изменить число на другое число такой же длины

Рейтинг: -1Ответов: 2Опубликовано: 02.02.2023

Суть такая: мне приходит json, в нем приходит полностью числовой номер договора Нужно его так замаскировать, чтобы при прогоне одинаковой строки через метод получалась одинаковая итоговая строка той же длины что было число изначально

Я пыталась получить хэш, а потом его помножить на что-нибудь, но так может получится, что итоговое число может быть короче чем была стринга изначально и возникнет ошибка

Какие варианты есть чтобы так замаскировать число?

Ответы

▲ 0Принят

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

public class Main {
    static int change_num(int n) {
        String s = Integer.toString(n);
        String from = "0123456789";
        String to = "0954782136";
        String out = "";
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            int idx = from.indexOf(c);
            out += to.charAt(idx);
        }
        return Integer.parseInt(out);
    }

    public static void main(String[] args) {
        for (int n : (new int[]{123456, 45789320, 544514254})) {
            System.out.println(n + " -> " + change_num(n));
        }
    }
}
123456 -> 954782
45789320 -> 78136450
544514254 -> 877897587
▲ 0

ничего не понятно. Вы не можете сгенерировать случайное число определенной длины?

Вариант 1: прибавьте/отнимите от исходного числа 1 или любое другое число.

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

Вариант 3: просто сгенерируйте нужно число из диапазона чисел нужной длины (rand.randint(start, end))

Вариант 4: запишите исходное число наоборот.

Еще примерно десять других вариантов....