Whiz Tools

Generátor CURP

Úvod

CURP (Clave Única de Registro de Población) je jedinečný alfanumerický kód používaný v Mexiku pro identifikační účely. Tento nástroj generuje platné, náhodné CURPy pro testovací scénáře, které splňují oficiální formát a pravidla validace. Je důležité poznamenat, že tyto generované CURPy nejsou spojeny s reálnými osobami a měly by být používány pouze pro testovací účely.

Struktura CURP

CURP se skládá z 18 znaků v následujícím formátu:

  1. První písmeno příjmení otce
  2. První samohláska příjmení otce (s výjimkou prvního písmene)
  3. První písmeno příjmení matky
  4. První písmeno křestního jména 5-10. Datum narození (ve formátu YYMMDD)
  5. Pohlaví (H pro muže, M pro ženy) 12-13. Dvoupísmenný kód pro stát narození 14-16. První vnitřní souhláska každé komponenty jména (příjmení otce, příjmení matky, křestní jméno)
  6. Diferenciální číslice (0-9 pro osoby narozené před rokem 2000, A-Z pro ty, kteří se narodili od roku 2000)
  7. Kontrolní číslice (0-9)

Algoritmus pro generování náhodného CURP

  1. Generujte náhodná písmena pro komponenty jména
  2. Generujte náhodné datum narození
  3. Náhodně vyberte pohlaví
  4. Náhodně vyberte platný kód státu
  5. Generujte náhodné souhlásky pro vnitřní komponenty jména
  6. Určete diferenciální číslici na základě roku narození
  7. Vypočítejte kontrolní číslici
  8. Kombinujte všechny komponenty do formátu CURP

Pravidla validace

  • Všechny abecední znaky musí být velkými písmeny
  • Datum narození musí být platné (včetně zohlednění přestupného roku)
  • Kód státu musí být platný mexický kód státu
  • Diferenciální číslice musí odpovídat roku narození
  • Kontrolní číslice musí být správně vypočítána
  • Zpracovávejte zvláštní případy pro jména (např. jednopísmenná příjmení, jména s Ñ)

Případy použití

  1. Testování softwaru: Vývojáři mohou tento nástroj použít k generování platných CURP pro testování systémů registrace uživatelů, databázových operací nebo jakéhokoli softwaru, který vyžaduje vstup CURP.

  2. Ochrana soukromí: Při demonstraci softwaru nebo prezentaci dat pomáhá použití náhodně generovaných CURP chránit soukromí jednotlivců.

  3. Testování výkonu: Generujte velké sady unikátních CURP pro testování výkonu systému pod zatížením.

  4. Školení a vzdělávání: Používejte generované CURP v vzdělávacích materiálech o mexických identifikačních systémech, aniž byste používali skutečná osobní data.

Historie CURP v Mexiku

Systém CURP byl zaveden v roce 1996 mexickou vládou jako součást snahy modernizovat a standardizovat osobní identifikaci. Nahradil různé jiné identifikační systémy a stal se klíčovým prvkem v mexické byrokracii, používaným pro vše od zápisu do školy po podávání daní.

V průběhu let došlo k několika úpravám systému CURP:

  • V roce 2011 byla zavedena diferenciální číslice, aby se odlišily osoby narozené před a po roce 2000.
  • V roce 2012 byl algoritmus pro výpočet kontrolní číslice upraven, aby se zlepšila jedinečnost.

Příklady

Zde jsou příklady kódu pro generování náhodných CURP v různých programovacích jazycích:

import random
import string
from datetime import datetime, timedelta

def generate_curp():
    # Generujte komponenty jména
    paternal = random.choice(string.ascii_uppercase) + random.choice('AEIOU')
    maternal = random.choice(string.ascii_uppercase)
    given = random.choice(string.ascii_uppercase)

    # Generujte datum narození
    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")

    # Generujte pohlaví
    gender = random.choice(['H', 'M'])

    # Generujte kód státu
    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)

    # Generujte souhlásky
    consonants = ''.join(random.choices(string.ascii_uppercase.translate(str.maketrans('', '', 'AEIOU')), k=3))

    # Generujte diferenciální číslici
    diff_digit = random.choice(string.digits) if int(date_str[:2]) < 20 else random.choice(string.ascii_uppercase)

    # Generujte kontrolní číslici (zjednodušené pro tento příklad)
    check_digit = random.choice(string.digits)

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

## Generujte a vytiskněte náhodný CURP
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}`;
}

// Generujte a vytiskněte náhodný CURP
console.log(generateCURP());

Alternativy v jiných zemích

Zatímco CURP je jedinečný pro Mexiko, jiné země mají podobné identifikační systémy:

  1. Spojené státy: Číslo sociálního zabezpečení (SSN)
  2. Kanada: Číslo sociálního pojištění (SIN)
  3. Indie: Číslo Aadhaar
  4. Brazílie: Cadastro de Pessoas Físicas (CPF)

Každý systém má svou vlastní strukturu a pravidla, ale slouží podobným účelům ve svých příslušných zemích.

Odkazy

  1. SEGOB (Secretaría de Gobernación). "CURP - Trámites." Gobierno de México, https://www.gob.mx/curp/. Přístup 4. srpna 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. Přístup 4. srpna 2024.
Feedback