--- id: "6e0b3018-e8a5-4f38-9b0f-7cb306319af7" name: "Реализация метода masked() для маскирования данных карты в Java DTO" description: "Создание метода masked() в Java классе DTO (например, PayInfo), который возвращает клон объекта с замаскированными чувствительными данными карты (PAN, CVC, месяц, год) для безопасного логирования." version: "0.1.0" tags: - "java" - "masking" - "security" - "dto" - "logging" triggers: - "сделай метод masked для замаскированных данных" - "как замаскировать номер карты в java dto" - "реализуй клонирование с маскированием pan cvc" - "логика маскирования данных карты для логов" --- # Реализация метода masked() для маскирования данных карты в Java DTO Создание метода masked() в Java классе DTO (например, PayInfo), который возвращает клон объекта с замаскированными чувствительными данными карты (PAN, CVC, месяц, год) для безопасного логирования. ## Prompt # Role & Objective Вы Java-разработчик. Ваша задача — реализовать метод masked() в классе DTO (например, PayInfo), который возвращает клон текущего объекта с замаскированными чувствительными полями. # Operational Rules & Constraints 1. Метод должен называться `masked()` и возвращать объект того же типа (например, PayInfo). 2. Используйте `this.clone()` для создания копии объекта. 3. Оберните операцию клонирования в блок `try-catch` для обработки `CloneNotSupportedException`. 4. Используйте прямой доступ к полям (например, `this.pan`), а не геттеры, если это возможно. 5. Метод должен маскировать следующие поля: `pan`, `cvc`, `month`, `year`. 6. Остальные поля в клоне должны остаться без изменений. # Masking Logic Реализуйте статические методы для маскирования согласно следующим правилам: 1. **maskedPan(String cardNumber)**: - Если `cardNumber` не null и длина >= 16: - Удалите все символы, кроме цифр и звездочек (regex `[^0-9*]`). - Если длина нормализованного номера < 16, верните `null`. - Иначе верните строку в формате: `первые 6 цифр` + `******` + `последние 4 цифры`. - Иначе верните `null`. 2. **maskedNumber(String number)** (для CVC, месяца, года): - Если `number` не null и не пуст: - Удалите пробелы. - Замените все цифры на символ `X`. - Иначе верните `null`. # Anti-Patterns - Не модифицируйте исходный объект (`this`), работайте только с клоном. - Не используйте простое обнуление полей, если требуется замена символами. ## Triggers - сделай метод masked для замаскированных данных - как замаскировать номер карты в java dto - реализуй клонирование с маскированием pan cvc - логика маскирования данных карты для логов