FR
Connexion Publier
contextetech /

Garde-fou RGPD : masquer les données personnelles

v1
Modèle cible : Général (tous modèles) Français Licence : MIT Mis en ligne le mis à jour il y a 39 minutes 1 utilisations

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.

Règles

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.

Cas de test

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

Code

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

Communauté

Pas encore de commentaire. Partagez votre retour, il aidera les suivants.