File manager - Edit - /var/www/html/portalHomolog/app/Helpers/DataPrivacyHelper.php
Back
<?php namespace App\Helpers; /** * Helper de privacidade para mascaramento de dados pessoais de pessoas físicas. * * Centraliza a ofuscação de dados pessoais (nome, CPF, e-mail e telefone) em * documentos e telas que não exigem o dado completo, em conformidade com a * LGPD (Lei 13.709/2018). O objetivo é reduzir a exposição de dados pessoais * preservando apenas o mínimo necessário para conferência do documento. */ class DataPrivacyHelper { /** * Máscara de nome preservando o primeiro nome e abreviando os sobrenomes. * * Ex.: "João da Silva Souza" => "João d. S. S.". */ public static function maskName(?string $name): ?string { $name = trim((string) $name); if ($name === '') { return null; } $parts = preg_split('/\s+/', $name) ?: []; $first = array_shift($parts); $initials = array_map( static fn (string $part): string => mb_substr($part, 0, 1) . '.', $parts ); return trim($first . ' ' . implode(' ', $initials)); } /** * Máscara de CPF preservando apenas os dígitos centrais. * * Oculta os três primeiros e os dois últimos dígitos, padrão consolidado * para anonimização de CPF (ex.: "123.456.789-00" => "***.456.789-**"). */ public static function maskCpf(?string $cpf): ?string { $digits = preg_replace('/\D/', '', (string) $cpf); if ($digits === '' || $digits === null) { return null; } if (strlen($digits) !== 11) { return self::maskGenericDocument($digits); } return sprintf( '***.%s.%s-**', substr($digits, 3, 3), substr($digits, 6, 3) ); } /** * Máscara de e-mail preservando a primeira letra do usuário e o domínio. * * Ex.: "joao.silva@gmail.com" => "j*********@gmail.com". */ public static function maskEmail(?string $email): ?string { $email = trim((string) $email); if ($email === '' || ! str_contains($email, '@')) { return $email === '' ? null : self::maskString($email, 1, 0); } [$local, $domain] = explode('@', $email, 2); if ($local === '') { return '***@' . $domain; } return self::maskString($local, 1, 0) . '@' . $domain; } /** * Máscara de telefone preservando o DDD e os dois últimos dígitos. * * Ex.: "(24) 99999-1234" => "(24) *****-**34". */ public static function maskPhone(?string $phone): ?string { $original = trim((string) $phone); if ($original === '') { return null; } $digits = preg_replace('/\D/', '', $original) ?? ''; $length = strlen($digits); if ($length <= 4) { return self::maskString($original, 0, 0); } $visiblePrefix = $length >= 10 ? 2 : 0; $visibleSuffix = 2; $index = 0; return preg_replace_callback('/\d/', function (array $match) use ( &$index, $length, $visiblePrefix, $visibleSuffix ): string { $position = $index; $index++; if ($position < $visiblePrefix || $position >= $length - $visibleSuffix) { return $match[0]; } return '*'; }, $original) ?? self::maskString($original, 0, 0); } /** * Máscara genérica para um documento numérico de tamanho inesperado. */ protected static function maskGenericDocument(string $digits): string { return self::maskString($digits, 0, 2); } /** * Substitui o miolo de uma string por asteriscos, preservando bordas. */ protected static function maskString(string $value, int $visiblePrefix, int $visibleSuffix): string { $length = mb_strlen($value); if ($length === 0) { return $value; } if ($visiblePrefix + $visibleSuffix >= $length) { return str_repeat('*', $length); } $prefix = mb_substr($value, 0, $visiblePrefix); $suffix = $visibleSuffix > 0 ? mb_substr($value, -$visibleSuffix) : ''; $masked = str_repeat('*', $length - $visiblePrefix - $visibleSuffix); return $prefix . $masked . $suffix; } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.03 |
proxy
|
phpinfo
|
Settings