Whiz Tools

Générateur de CURP

Introduction

Le CURP (Clave Única de Registro de Población) est un code alphanumérique unique utilisé au Mexique à des fins d'identification. Cet outil génère des CURP valides et aléatoires pour des scénarios de test, en respectant le format officiel et les règles de validation. Il est important de noter que ces CURP générés ne sont pas liés à de vraies personnes et doivent uniquement être utilisés à des fins de test.

Structure du CURP

Un CURP se compose de 18 caractères dans le format suivant :

  1. Première lettre du nom de famille paternel
  2. Première voyelle du nom de famille paternel (à l'exclusion de la première lettre)
  3. Première lettre du nom de famille maternel
  4. Première lettre du prénom 5-10. Date de naissance (format YYMMDD)
  5. Genre (H pour homme, M pour femme) 12-13. Code à deux lettres de l'état de naissance 14-16. Première consonne interne de chaque composant du nom (nom de famille paternel, nom de famille maternel, prénom)
  6. Chiffre de différenciation (0-9 pour les personnes nées avant 2000, A-Z pour celles nées à partir de 2000)
  7. Chiffre de contrôle (0-9)

Algorithme pour générer un CURP aléatoire

  1. Générer des lettres aléatoires pour les composants du nom
  2. Générer une date de naissance aléatoire
  3. Sélectionner aléatoirement un genre
  4. Sélectionner aléatoirement un code d'état valide
  5. Générer des consonnes aléatoires pour les composants internes du nom
  6. Déterminer le chiffre de différenciation en fonction de l'année de naissance
  7. Calculer le chiffre de contrôle
  8. Combiner tous les composants pour former le CURP

Règles de validation

  • Tous les caractères alphabétiques doivent être en majuscules
  • La date de naissance doit être une date valide (y compris la prise en compte des années bissextiles)
  • Le code de l'état doit être un code d'état mexicain valide
  • Le chiffre de différenciation doit correspondre à l'année de naissance
  • Le chiffre de contrôle doit être correctement calculé
  • Gérer les cas spéciaux pour les noms (par exemple, les noms de famille d'une seule lettre, les noms avec Ñ)

Cas d'utilisation

  1. Tests logiciels : Les développeurs peuvent utiliser cet outil pour générer des CURP valides pour tester les systèmes d'enregistrement des utilisateurs, les opérations de base de données ou tout logiciel nécessitant une saisie de CURP.

  2. Protection des données : Lors de la démonstration de logiciels ou de la présentation de données, l'utilisation de CURP générés aléatoirement aide à protéger la vie privée des individus.

  3. Tests de performance : Générer de grands ensembles de CURP uniques pour tester les performances du système sous charge.

  4. Formation et éducation : Utiliser des CURP générés dans des supports éducatifs sur les systèmes d'identification mexicains sans utiliser de données personnelles réelles.

Histoire du CURP au Mexique

Le système CURP a été introduit en 1996 par le gouvernement mexicain dans le cadre d'un effort de modernisation et de standardisation de l'identification personnelle. Il a remplacé divers autres systèmes d'identification et est devenu un élément crucial de la bureaucratie mexicaine, utilisé pour tout, de l'inscription scolaire au dépôt fiscal.

Au fil des ans, le système CURP a subi plusieurs modifications :

  • En 2011, le chiffre de différenciation a été introduit pour distinguer les personnes nées avant et après 2000.
  • En 2012, l'algorithme de calcul du chiffre de contrôle a été modifié pour améliorer l'unicité.

Exemples

Voici des exemples de code pour générer des CURP aléatoires dans divers langages de programmation :

import random
import string
from datetime import datetime, timedelta

def generate_curp():
    # Générer des composants de nom
    paternal = random.choice(string.ascii_uppercase) + random.choice('AEIOU')
    maternal = random.choice(string.ascii_uppercase)
    given = random.choice(string.ascii_uppercase)

    # Générer une date de naissance
    start_date = datetime(1940, 1, 1)
    end_date = datetime.now()
    random_date = start_date + timedelta(days=random.randint(0, (end_date - start_date).days))
    date_str = random_date.strftime("%y%m%d")

    # Générer le genre
    gender = random.choice(['H', 'M'])

    # Générer le code de l'état
    states = ['AS', 'BC', 'BS', 'CC', 'CL', 'CM', 'CS', 'CH', 'DF', 'DG', 'GT', 'GR', 'HG', 'JC', 'MC', 'MN', 'MS', 'NT', 'NL', 'OC', 'PL', 'QT', 'QR', 'SP', 'SL', 'SR', 'TC', 'TS', 'TL', 'VZ', 'YN', 'ZS']
    state = random.choice(states)

    # Générer des consonnes
    consonants = ''.join(random.choices(string.ascii_uppercase.translate(str.maketrans('', '', 'AEIOU')), k=3))

    # Générer le chiffre de différenciation
    diff_digit = random.choice(string.digits) if int(date_str[:2]) < 20 else random.choice(string.ascii_uppercase)

    # Générer le chiffre de contrôle (simplifié pour cet exemple)
    check_digit = random.choice(string.digits)

    return f"{paternal}{maternal}{given}{date_str}{gender}{state}{consonants}{diff_digit}{check_digit}"

## Générer et imprimer un CURP aléatoire
print(generate_curp())
function generateCURP() {
    const vowels = 'AEIOU';
    const consonants = 'BCDFGHJKLMNPQRSTVWXYZ';
    const states = ['AS', 'BC', 'BS', 'CC', 'CL', 'CM', 'CS', 'CH', 'DF', 'DG', 'GT', 'GR', 'HG', 'JC', 'MC', 'MN', 'MS', 'NT', 'NL', 'OC', 'PL', 'QT', 'QR', 'SP', 'SL', 'SR', 'TC', 'TS', 'TL', 'VZ', 'YN', 'ZS'];

    const randomLetter = () => String.fromCharCode(65 + Math.floor(Math.random() * 26));
    const randomVowel = () => vowels[Math.floor(Math.random() * vowels.length)];
    const randomConsonant = () => consonants[Math.floor(Math.random() * consonants.length)];

    const paternal = randomLetter() + randomVowel();
    const maternal = randomLetter();
    const given = randomLetter();

    const now = new Date();
    const start = new Date(1940, 0, 1);
    const randomDate = new Date(start.getTime() + Math.random() * (now.getTime() - start.getTime()));
    const dateStr = randomDate.toISOString().slice(2, 10).replace(/-/g, '');

    const gender = Math.random() < 0.5 ? 'H' : 'M';
    const state = states[Math.floor(Math.random() * states.length)];

    const internalConsonants = randomConsonant() + randomConsonant() + randomConsonant();

    const diffDigit = parseInt(dateStr.slice(0, 2)) < 20 ? 
        Math.floor(Math.random() * 10).toString() :
        String.fromCharCode(65 + Math.floor(Math.random() * 26));

    const checkDigit = Math.floor(Math.random() * 10).toString();

    return `${paternal}${maternal}${given}${dateStr}${gender}${state}${internalConsonants}${diffDigit}${checkDigit}`;
}

// Générer et afficher un CURP aléatoire
console.log(generateCURP());

Alternatives dans d'autres pays

Bien que le CURP soit unique au Mexique, d'autres pays ont des systèmes d'identification similaires :

  1. États-Unis : Numéro de sécurité sociale (SSN)
  2. Canada : Numéro d'assurance sociale (NAS)
  3. Inde : Numéro Aadhaar
  4. Brésil : Cadastro de Pessoas Físicas (CPF)

Chaque système a sa propre structure et ses propres règles, mais ils servent des objectifs similaires dans leurs pays respectifs.

Références

  1. SEGOB (Secrétariat de la Gouvernance). "CURP - Trámites." Gouvernement du Mexique, https://www.gob.mx/curp/. Consulté le 4 août 2024.
  2. RENAPO (Registre National de la Population et de l'Identité). "Instructif Normatif pour l'Attribution de la Clé Unique de Registre de Population." Gouvernement du Mexique, https://www.gob.mx/cms/uploads/attachment/file/79053/InstructivoNormativoCURP.pdf. Consulté le 4 août 2024.
Feedback