PHPackages                             richardmsbr/privacy-shield-br - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Security](/categories/security)
4. /
5. richardmsbr/privacy-shield-br

ActiveLibrary[Security](/categories/security)

richardmsbr/privacy-shield-br
=============================

Biblioteca PHP para detecção e anonimização de dados pessoais - LGPD/GDPR compliance. Detecta e mascara CPF, CNPJ, PIX, email, telefone automaticamente.

00PHPCI failing

Since Mar 30Pushed 1mo agoCompare

[ Source](https://github.com/Richardmsbr/privacy-shield-br)[ Packagist](https://packagist.org/packages/richardmsbr/privacy-shield-br)[ RSS](/packages/richardmsbr-privacy-shield-br/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

Privacy Shield BR
=================

[](#privacy-shield-br)

[![PHP Version](https://camo.githubusercontent.com/04744bae0a61d2ffe29c26f07a9612eae20445fc6feaeb77b3af1f0e9be6447c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253345253344382e312d3838393242462e737667)](https://php.net/)[![Laravel](https://camo.githubusercontent.com/0b4e3cd0b58a5aed9741b1d001457bde05a361cc1b1332c705ef704c225862a3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c61726176656c2d25334525334431302e302d4646324432302e737667)](https://laravel.com)[![License](https://camo.githubusercontent.com/8bb50fd2278f18fc326bf71f6e88ca8f884f72f179d3e555e20ed30157190d0d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e2e737667)](LICENSE)[![LGPD](https://camo.githubusercontent.com/de1712843beda99fb57551a2cb60857f44ce44ed482008831e6478813418ffe3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c4750442d436f6d706c69616e742d626c75652e737667)](#lgpd-compliance)

**Biblioteca PHP para detecção e anonimização de dados pessoais** - LGPD/GDPR compliance.

Detecta e mascara automaticamente **CPF, CNPJ, PIX, email, telefone e cartão de crédito** em strings, arrays e objetos. Otimizada para dados brasileiros.

---

Por que usar?
-------------

[](#por-que-usar)

- **LGPD Compliance**: Anonimização conforme Lei Geral de Proteção de Dados
- **Zero Configuração**: Funciona out-of-the-box para dados brasileiros
- **Validação Real**: CPF e CNPJ são validados com algoritmo oficial (não apenas regex)
- **Pseudonimização Consistente**: Mesmo input = mesmo output (útil para FKs)
- **Laravel Ready**: ServiceProvider, Facade, Middleware e Trait inclusos

---

Instalação
----------

[](#instalação)

```
composer require richardmsbr/privacy-shield-br
```

### Laravel

[](#laravel)

O ServiceProvider é registrado automaticamente via auto-discovery.

Para publicar a configuração:

```
php artisan vendor:publish --tag=privacy-shield-config
```

---

Uso Rápido
----------

[](#uso-rápido)

### Mascarar Dados

[](#mascarar-dados)

```
use PrivacyShield\Privacy;

// String simples
$texto = "Meu CPF é 123.456.789-09 e meu email é joao@email.com";
echo Privacy::mask($texto);
// Output: "Meu CPF é ***.456.789-** e meu email é j***@e****.com"

// Array
$usuario = [
    'nome' => 'João Silva',
    'cpf' => '123.456.789-09',
    'email' => 'joao.silva@empresa.com.br',
    'telefone' => '(11) 99999-8888',
];

print_r(Privacy::mask($usuario));
// Output:
// [
//     'nome' => 'João Silva',
//     'cpf' => '***.456.789-**',
//     'email' => 'j***.s****@e******.com.br',
//     'telefone' => '(11) *****-8888',
// ]
```

### Detectar Dados Sensíveis

[](#detectar-dados-sensíveis)

```
use PrivacyShield\Privacy;

$texto = "CPF: 123.456.789-09, Email: teste@email.com, Tel: 11999998888";

// Contagem simples
$resultado = Privacy::scan($texto);
// ['cpf' => 1, 'email' => 1, 'phone' => 1, 'total' => 3]

// Verificação rápida
if (Privacy::hasSensitiveData($texto)) {
    echo "ALERTA: Texto contém dados pessoais!";
}

// Detalhes completos
$detalhes = Privacy::scanDetailed($texto);
// [
//     ['type' => 'cpf', 'value' => '123.456.789-09', 'position' => 5],
//     ['type' => 'email', 'value' => 'teste@email.com', 'position' => 25],
//     ...
// ]
```

### Pseudonimização (Dados Falsos Consistentes)

[](#pseudonimização-dados-falsos-consistentes)

```
use PrivacyShield\Privacy;

$usuario = [
    'cpf' => '123.456.789-09',
    'email' => 'joao@email.com',
    'telefone' => '(11) 99999-8888',
];

// Pseudonimiza com seed (mesmo seed = mesmo resultado)
$fake = Privacy::pseudonymize($usuario, 'user_123');
// [
//     'cpf' => '987.654.321-00',  // CPF válido!
//     'email' => 'maria.santos42@gmail.com',
//     'telefone' => '(21) 98765-4321',
// ]

// Chamar novamente com mesmo seed = mesmo resultado
$fake2 = Privacy::pseudonymize($usuario, 'user_123');
// Idêntico a $fake - útil para manter consistência em FKs
```

### Remover Completamente (Redact)

[](#remover-completamente-redact)

```
use PrivacyShield\Privacy;

$texto = "Cliente João, CPF 123.456.789-09, ligou às 14h";
echo Privacy::redact($texto);
// Output: "Cliente João, CPF [REMOVIDO], ligou às 14h"
```

---

Integração Laravel
------------------

[](#integração-laravel)

### Facade

[](#facade)

```
use PrivacyShield\Laravel\Facades\Privacy;

// Mesmos métodos disponíveis
Privacy::mask($dados);
Privacy::scan($texto);
Privacy::pseudonymize($dados);
```

### Middleware

[](#middleware)

```
// routes/api.php

// Mascara automaticamente respostas JSON
Route::get('/users', [UserController::class, 'index'])
    ->middleware('privacy.mask');

// Sanitiza logs de requisição
Route::post('/checkout', [CheckoutController::class, 'store'])
    ->middleware('privacy.log');
```

### Trait Anonymizable em Models

[](#trait-anonymizable-em-models)

```
use PrivacyShield\Laravel\Traits\Anonymizable;

class User extends Model
{
    use Anonymizable;

    // Define campos sensíveis (opcional - tem padrões)
    protected array $anonymizable = ['cpf', 'email', 'phone', 'name'];
}
```

**Uso:**

```
$user = User::find(1);

// Retorna cópia mascarada (não altera original)
$masked = $user->masked();
echo $masked->cpf; // ***.456.789-**

// Array mascarado
$array = $user->toMaskedArray();

// Pseudonimiza (dados falsos consistentes)
$fake = $user->pseudonymized();

// Direito ao Esquecimento (LGPD Art. 18)
// CUIDADO: Altera e salva no banco!
$user->forget();

// Verifica se tem dados sensíveis
if ($user->hasSensitiveData()) {
    // ...
}
```

---

Validação de CPF/CNPJ
---------------------

[](#validação-de-cpfcnpj)

A biblioteca valida CPF e CNPJ usando o algoritmo oficial (dígitos verificadores), não apenas regex:

```
use PrivacyShield\Detectors\Detector;

$detector = new Detector();

// CPFs válidos são detectados
$detector->isValidCpf('123.456.789-09'); // true
$detector->isValidCpf('111.111.111-11'); // false (sequência inválida)
$detector->isValidCpf('123.456.789-00'); // false (dígitos errados)

// Mesma validação para CNPJ
$detector->isValidCnpj('11.222.333/0001-81'); // true
```

---

Geração de Dados Falsos Válidos
-------------------------------

[](#geração-de-dados-falsos-válidos)

A pseudonimização gera dados que passam em validações:

```
use PrivacyShield\Pseudonymizer;

$pseudo = new Pseudonymizer();

// Gera CPF válido
$cpf = $pseudo->generateFakeCpf('seed_123');
// 847.293.156-04 (válido!)

// Gera CNPJ válido
$cnpj = $pseudo->generateFakeCnpj('seed_123');
// 84.729.315/0001-60 (válido!)

// Gera nome brasileiro
$nome = $pseudo->generateFakeName('seed_123');
// "Fernanda Oliveira"

// Gera email realista
$email = $pseudo->generateFakeEmail('seed_123');
// "fernanda.oliveira42@gmail.com"

// Gera telefone com DDD válido
$tel = $pseudo->generateFakePhone('seed_123');
// "(11) 98472-9315"
```

---

Configuração
------------

[](#configuração)

```
// config/privacy-shield.php

return [
    // Caractere de máscara
    'mask_char' => '*',

    // Texto para redação completa
    'redact_text' => '[REMOVIDO]',

    // Detectores ativos
    'detectors' => [
        'cpf' => true,
        'cnpj' => true,
        'email' => true,
        'phone' => true,
        'pix' => true,
        'credit_card' => true,
    ],

    // Mascarar domínio do email
    'mask_email_domain' => true,

    // Log de requisições sanitizadas
    'log_requests' => false,
];
```

---

LGPD Compliance
---------------

[](#lgpd-compliance)

Esta biblioteca ajuda a cumprir os seguintes artigos da LGPD:

ArtigoRequisitoComo a biblioteca ajudaArt. 5ºDefinição de dado pessoalDetecta automaticamente dados pessoaisArt. 6ºPrincípio da necessidadePermite mascarar dados desnecessáriosArt. 12AnonimizaçãoMétodos `mask()` e `redact()`Art. 18Direito ao esquecimentoMétodo `forget()` no TraitArt. 46Medidas de segurançaPrevine vazamento em logs/APIs---

Casos de Uso
------------

[](#casos-de-uso)

### 1. Logs Seguros

[](#1-logs-seguros)

```
// Antes (ERRADO - vaza dados)
Log::info('Usuário criado', $request->all());

// Depois (CORRETO)
Log::info('Usuário criado', Privacy::mask($request->all()));
```

### 2. Ambiente de Desenvolvimento

[](#2-ambiente-de-desenvolvimento)

```
// Copia produção para dev com dados anonimizados
$users = User::all();

foreach ($users as $user) {
    $user->cpf = Privacy::pseudonymize($user->cpf, $user->id);
    $user->email = Privacy::pseudonymize($user->email, $user->id);
    $user->save();
}
```

### 3. Export de Dados

[](#3-export-de-dados)

```
// API que retorna dados mascarados
return response()->json(Privacy::mask($usuarios));
```

### 4. Atendimento ao Cliente

[](#4-atendimento-ao-cliente)

```
// Atendente vê dados parciais
$cliente = Cliente::find($id)->masked();
echo "CPF: {$cliente->cpf}"; // ***.456.789-**
```

---

Tipos de Dados Detectados
-------------------------

[](#tipos-de-dados-detectados)

TipoExemploMascaradoCPF123.456.789-09\*\*\*.456.789-\*\*CNPJ12.345.678/0001-90\*\*.345.678/\*\*\*\*-\*\*Emailj\*\*\*@e\*\*\*\*.comTelefone(11) 99999-8888(11) \*\*\*\*\*-8888Cartão4111 1111 1111 1111\*\*\*\* \*\*\*\* \*\*\*\* 1111PIX (chave)abc12345-1234-...abc1\*\*\*\*\*\*\*\*5678---

Requisitos
----------

[](#requisitos)

- PHP 8.1+
- Laravel 10+ (opcional, para integração)

---

Contribuindo
------------

[](#contribuindo)

Contribuições são bem-vindas! Por favor:

1. Fork o projeto
2. Crie sua branch (`git checkout -b feature/nova-feature`)
3. Commit suas mudanças (`git commit -m 'Adiciona nova feature'`)
4. Push para a branch (`git push origin feature/nova-feature`)
5. Abra um Pull Request

---

Licença
-------

[](#licença)

MIT License - veja [LICENSE](LICENSE) para detalhes.

---

Autor
-----

[](#autor)

**Richard** - [@richardmsbr](https://github.com/richardmsbr)

---

Links
-----

[](#links)

- [Documentação LGPD](https://www.gov.br/cidadania/pt-br/acesso-a-informacao/lgpd)
- [GDPR](https://gdpr.eu/)
- [Packagist](https://packagist.org/packages/richardmsbr/privacy-shield-br)

---

Author
------

[](#author)

**Richard Sakaguchi** - Solution Architect &amp; AI Engineer

- Website: [sakaguchi.ia.br](https://sakaguchi.ia.br)
- SEO Tools: [seoexpress.com.br](https://seoexpress.com.br)
- HuggingFace: [yoshii-ai](https://huggingface.co/yoshii-ai)
- LinkedIn: [richard-ms](https://www.linkedin.com/in/richard-ms/)

###  Health Score

19

—

LowBetter than 10% of packages

Maintenance61

Regular maintenance activity

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/83a3d575e66d5cc89603daa599e83d437a6bf9485e10136dc2ee68e6f81f4f93?d=identicon)[Richardmsbr](/maintainers/Richardmsbr)

---

Top Contributors

[![Richardmsbr](https://avatars.githubusercontent.com/u/56129411?v=4)](https://github.com/Richardmsbr "Richardmsbr (3 commits)")

---

Tags

anonymizationbrazilcnpjcompliancecpfdata-privacygdprlgpdphpphp-librarypii-detectionprivacysecurity

### Embed Badge

![Health badge](/badges/richardmsbr-privacy-shield-br/health.svg)

```
[![Health](https://phpackages.com/badges/richardmsbr-privacy-shield-br/health.svg)](https://phpackages.com/packages/richardmsbr-privacy-shield-br)
```

###  Alternatives

[defuse/php-encryption

Secure PHP Encryption Library

3.9k162.4M214](/packages/defuse-php-encryption)[roave/security-advisories

Prevents installation of composer packages with known security vulnerabilities: no API, simply require it

2.9k97.3M6.4k](/packages/roave-security-advisories)[mews/purifier

Laravel 5/6/7/8/9/10 HtmlPurifier Package

2.0k16.7M113](/packages/mews-purifier)[robrichards/xmlseclibs

A PHP library for XML Security

41278.1M118](/packages/robrichards-xmlseclibs)[bjeavons/zxcvbn-php

Realistic password strength estimation PHP library based on Zxcvbn JS

86917.5M63](/packages/bjeavons-zxcvbn-php)[enlightn/security-checker

A PHP dependency vulnerabilities scanner based on the Security Advisories Database.

33732.2M110](/packages/enlightn-security-checker)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
