Осторожно: если вы заменяете конфиденциальную часть данных значением, которое можно многократно определять, вы на самом деле не удалили свои данные. Если ваша цель - защитить конфиденциальные данные, такие как HIPAA , я советую вам проконсультироваться с ответственным лицом. Они должны быть обучены тому, как правильно очищать данные.
Еще один момент, который необходимо уточнить: ваш заголовок является сокращением. Случайное значение не может быть предсказуемо повторено по определению.
java.time
Ваш пример кода использует ужасные классы даты и времени, которые были вытеснены годами назад современными java.time классы, определенные в JSR 310. Для значения только на дату используйте LocalDate
class.
Просто назначьте произвольное количество дней
Если вы хотите произвольную, но повторяемую корректировку, просто добавьте или вычтите определенное количество дней. Вы можете произвольно назначить отрицательное число (вычитание) для даты, чей номер дня является нечетным, и назначить положительное число (сложение) для даты, чей номер дня является четным.
Чтобы определить четное или нечетное число, см. этот вопрос .
int daysToAddToOddDayNumber = -2_555 ;
int daysToAddToEvenDayNumber = 2_101 ;
LocalDate localDate = LocalDate.of( 1970 , Month.JANUARY , 1 );
boolean isEven = ( ( localDate.getDayOfMonth() & 1) == 0 ) ;
LocalDate adjusted = isEven ? localDate.plusDays( daysToAddToEvenDayNumber ) : localDate.plusDays( daysToAddToOddDayNumber ) ;
Дамп на консоль.
System.out.println( "localDate.toString(): " + localDate ) ;
System.out.println( "adjusted.toString(): " + adjusted ) ;
См. код запускается в режиме реального времени на IdeOne.com.
localDate.toString (): 1970-01-01
Adjust.toString (): 1963-01-03
Неизвестно, сколько дней будет добавлено
Вы можете немного поумнеть, взяв хэш значения даты, а затем используйте этот результат, чтобы определить количество дней длябыть добавленнымОпять же, как я уже говорил, это не может считаться достаточной очисткой в зависимости от потребностей (и законов!) Вашего проекта.
LocalDate localDate = LocalDate.of( 1970 , Month.JANUARY , 1 );
String input = localDate.toString();
MessageDigest md = null;
try
{
md = MessageDigest.getInstance( "MD5" );
md.update( input.getBytes() );
byte[] digest = md.digest();
int days = new BigInteger( 1 , digest ).mod( new BigInteger( "10000" ) ).intValue();
LocalDate adjusted = localDate.minusDays( days );
System.out.println( "localDate = " + localDate );
System.out.println( "input = " + input );
System.out.println( "days = " + days );
System.out.println( "adjusted = " + adjusted );
} catch ( NoSuchAlgorithmException e )
{
e.printStackTrace();
}
См. Этот код, запущенный на IdeOne.com.
localDate = 1970-01-01
input = 1970-01-01
days = 8491
отрегулировано2 = 1946-10-03