Whiz Tools

Generator CURP

Introducere

CURP (Clave Única de Registro de Población) este un cod alfanumeric unic folosit în Mexic pentru scopuri de identificare. Acest instrument generează CURP-uri valide, aleatorii pentru scenarii de testare, conform formatului oficial și regulilor de validare. Este important de menționat că aceste CURP-uri generate nu sunt legate de persoane reale și ar trebui folosite doar în scopuri de testare.

Structura CURP

Un CURP constă din 18 caractere în următorul format:

  1. Prima literă a numelui de familie patern
  2. Prima vocală a numelui de familie patern (excluzând prima literă)
  3. Prima literă a numelui de familie matern
  4. Prima literă a numelui dat 5-10. Data nașterii (format YYMMDD)
  5. Gen (H pentru bărbat, M pentru femeie) 12-13. Cod de două litere pentru statul de naștere 14-16. Prima consoană internă din fiecare componentă a numelui (numele de familie patern, numele de familie matern, numele dat)
  6. Digit de diferențiere (0-9 pentru persoanele născute înainte de 2000, A-Z pentru cei născuți din 2000 încoace)
  7. Digit de verificare (0-9)

Algoritm pentru Generarea unui CURP Aleatoriu

  1. Generați litere aleatorii pentru componentele numelui
  2. Generați o dată de naștere aleatorie
  3. Selectați aleatoriu genul
  4. Selectați aleatoriu un cod de stat valid
  5. Generați consoane aleatorii pentru componentele interne ale numelui
  6. Determinați digitul de diferențiere pe baza anului nașterii
  7. Calculați digitul de verificare
  8. Combinați toate componentele pentru a forma CURP-ul

Regulile de Validare

  • Toate caracterele alfabetice trebuie să fie cu majuscule
  • Data nașterii trebuie să fie o dată validă (inclusiv considerația anului bisect)
  • Codul de stat trebuie să fie un cod valid pentru un stat mexican
  • Digitul de diferențiere trebuie să corespundă anului nașterii
  • Digitul de verificare trebuie să fie calculat corect
  • Tratați cazurile speciale pentru nume (de exemplu, nume de familie cu o singură literă, nume cu Ñ)

Cazuri de Utilizare

  1. Testarea Software-ului: Dezvoltatorii pot folosi acest instrument pentru a genera CURP-uri valide pentru testarea sistemelor de înregistrare a utilizatorilor, operațiunilor de bază de date sau orice software care necesită introducerea CURP.

  2. Confidențialitatea Datelor: Atunci când se demonstrează software sau se prezintă date, utilizarea CURP-urilor generate aleatoriu ajută la protejarea confidențialității indivizilor.

  3. Testarea Performanței: Generați seturi mari de CURP-uri unice pentru a testa performanța sistemului sub sarcină.

  4. Formare și Educație: Utilizați CURP-uri generate în materialele educaționale despre sistemele de identificare din Mexic fără a folosi date personale reale.

Istoria CURP în Mexic

Sistemul CURP a fost introdus în 1996 de către guvernul mexican ca parte a unui efort de modernizare și standardizare a identificării personale. A înlocuit diverse alte sisteme de identificare și a devenit un element crucial în birocrația mexicană, utilizat pentru totul, de la înscrierea în școli până la depunerea impozitelor.

De-a lungul anilor, sistemul CURP a suferit mai multe modificări:

  • În 2011, digitul de diferențiere a fost introdus pentru a distinge între persoanele născute înainte și după 2000.
  • În 2012, algoritmul pentru calcularea digitului de verificare a fost modificat pentru a îmbunătăți unicitatea.

Exemple

Iată exemple de cod pentru a genera CURP-uri aleatorii în diferite limbaje de programare:

import random
import string
from datetime import datetime, timedelta

def generate_curp():
    # Generați componentele numelui
    paternal = random.choice(string.ascii_uppercase) + random.choice('AEIOU')
    maternal = random.choice(string.ascii_uppercase)
    given = random.choice(string.ascii_uppercase)

    # Generați data nașterii
    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")

    # Generați genul
    gender = random.choice(['H', 'M'])

    # Generați codul de stat
    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)

    # Generați consoane
    consonants = ''.join(random.choices(string.ascii_uppercase.translate(str.maketrans('', '', 'AEIOU')), k=3))

    # Generați digitul de diferențiere
    diff_digit = random.choice(string.digits) if int(date_str[:2]) < 20 else random.choice(string.ascii_uppercase)

    # Generați digitul de verificare (simplificat pentru acest exemplu)
    check_digit = random.choice(string.digits)

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

## Generați și imprimați un CURP aleatoriu
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}`;
}

// Generați și logați un CURP aleatoriu
console.log(generateCURP());

Alternative în Alte Țări

Deși CURP este unic pentru Mexic, alte țări au sisteme de identificare similare:

  1. Statele Unite: Numărul de Securitate Socială (SSN)
  2. Canada: Numărul de Asigurare Socială (SIN)
  3. India: Numărul Aadhaar
  4. Brazilia: Cadastro de Pessoas Físicas (CPF)

Fiecare sistem are propria structură și reguli, dar îndeplinesc scopuri similare în țările respective.

Referințe

  1. SEGOB (Secretaría de Gobernación). "CURP - Trámites." Gobierno de México, https://www.gob.mx/curp/. Accesat pe 4 Aug. 2024.
  2. RENAPO (Registro Nacional de Población e Identidad). "Instructivo Normativo para la Asignación de la Clave Única de Registro de Población." Gobierno de México, https://www.gob.mx/cms/uploads/attachment/file/79053/InstructivoNormativoCURP.pdf. Accesat pe 4 Aug. 2024.
Feedback