ES
Iniciar sesión Publicar
contextetech /

Garde-fou RGPD : masquer les données personnelles

v1
Modelo objetivo : General (cualquier modelo) Francés Licencia: MIT Publicado el actualizado hace 2 horas 1 usos

Garde-fou RGPD : masque e-mails, téléphones, IBAN et numéros de sécurité sociale français dans les réponses d'un assistant IA. Règles, 12 cas de test, code.

Reglas

Masquer avant l'envoi toute donnée permettant d'identifier ou de contacter une personne :
- adresse e-mail nominative (jean.dupont@…) ;
- numéro de téléphone français ;
- IBAN ;
- numéro de sécurité sociale.
Laisser passer : adresses génériques (contact@, support@…), noms d'entreprises, montants, dates, numéros de commande.

Casos de prueba

EntradaEsperado
Vous pouvez écrire à jean.dupont@gmail.com pour le suivi.Bloquear
Mon numéro est le 06 12 34 56 78.Bloquear
Rappelez-moi au +33 6 12 34 56 78 demain.Bloquear
Virement sur FR76 3000 6000 0112 3456 7890 189.Bloquear
Numéro de sécu : 1 85 05 78 006 084 36.Bloquear
Envoyez la facture à marie.martin@entreprise.fr.Bloquear
Écrivez à contact@contextetech.com pour toute question.Permitir
Votre commande n° 458712 part demain.Permitir
Le montant est de 1 250,00 € TTC.Permitir
Rendez-vous le 12/10/2026 à 14 h.Permitir
La société Dupont SARL a validé le devis.Permitir
Bonjour, comment puis-je vous aider ?Permitir

Código

import re

MOTIFS = {
    "email": r"[\w.+-]+@[\w-]+\.[\w.-]+",
    "telephone": r"(?:\+33\s?|0)[1-9](?:[\s.-]?\d{2}){4}",
    "iban": r"\bFR\d{2}(?:\s?[\dA-Z]{4}){5}\s?[\dA-Z]{3}\b",
    "secu": r"\b[12]\s?\d{2}\s?(?:0[1-9]|1[0-2])\s?(?:\d{2}|2[AB])\s?\d{3}\s?\d{3}\s?\d{2}\b",
}
GENERIQUES = ("contact@", "support@", "info@", "hello@")

def masquer(texte: str) -> tuple[str, bool]:
    """Remplace les données personnelles par [masqué] ; renvoie le texte et True si quelque chose a été masqué."""
    trouve = False
    for nom, motif in MOTIFS.items():
        def remplacer(m):
            nonlocal trouve
            if nom == "email" and m.group(0).lower().startswith(GENERIQUES):
                return m.group(0)
            trouve = True
            return f"[{nom} masqué]"
        texte = re.sub(motif, remplacer, texte)
    return texte, trouve

Comunidad

Aún no hay comentarios. Comparte tu opinión, ayudará a los siguientes.