# Реализация метода masked() для маскирования данных карты в Java DTO

> Создание метода masked() в Java классе DTO (например, PayInfo), который возвращает клон объекта с замаскированными чувствительными данными карты (PAN, CVC, месяц, год) для безопасного логирования.

- Skill: `ecnu-icalk/masked-java-dto` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ecnu-icalk/masked-java-dto`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ecnu-icalk/masked-java-dto/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ECNU-ICALK (https://skillmd.com/u/ecnu-icalk)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/ecnu-icalk/masked-java-dto

---


# Реализация метода 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
- логика маскирования данных карты для логов

