normalizeKey($key)); } /** * Маскирование значения для отображения (например в журналах/UI оператора). * * Пример: "Иванов" -> "И****", "ivan@mail.ru" -> "iv***@mail.ru". */ public function mask(string $value, int $visible = 2): string { if (str_contains($value, '@')) { [$local, $domain] = explode('@', $value, 2); return $this->mask($local, $visible).'@'.$domain; } $length = mb_strlen($value); if ($length <= $visible) { return str_repeat('*', max($length, 1)); } return mb_substr($value, 0, $visible).str_repeat('*', $length - $visible); } private function normalizeKey(string $key): string { if (str_starts_with($key, 'base64:')) { return (string) base64_decode(substr($key, 7), true); } return $key; } }