Whiz Tools

Generator CURP

Wprowadzenie

CURP (Clave Única de Registro de Población) to unikalny alfanumeryczny kod używany w Meksyku do celów identyfikacyjnych. To narzędzie generuje ważne, losowe CURP do scenariuszy testowych, zgodnie z oficjalnym formatem i zasadami walidacji. Ważne jest, aby zauważyć, że te wygenerowane CURP nie są powiązane z rzeczywistymi osobami i powinny być używane tylko do celów testowych.

Struktura CURP

CURP składa się z 18 znaków w następującym formacie:

  1. Pierwsza litera nazwiska ojca
  2. Pierwsza samogłoska nazwiska ojca (z wyłączeniem pierwszej litery)
  3. Pierwsza litera nazwiska matki
  4. Pierwsza litera imienia 5-10. Data urodzenia (format YYMMDD)
  5. Płeć (H dla mężczyzn, M dla kobiet) 12-13. Dwuliterowy kod stanu urodzenia 14-16. Pierwsza wewnętrzna spółgłoska każdego składnika imienia (nazwisko ojca, nazwisko matki, imię)
  6. Cyfra różnicująca (0-9 dla osób urodzonych przed 2000 rokiem, A-Z dla tych urodzonych od 2000 roku)
  7. Cyfra kontrolna (0-9)

Algorytm generowania losowego CURP

  1. Generowanie losowych liter dla składników imienia
  2. Generowanie losowej daty urodzenia
  3. Losowy wybór płci
  4. Losowy wybór ważnego kodu stanu
  5. Generowanie losowych spółgłosk dla wewnętrznych składników imienia
  6. Określenie cyfry różnicującej na podstawie roku urodzenia
  7. Obliczenie cyfry kontrolnej
  8. Połączenie wszystkich składników w celu utworzenia CURP

Zasady walidacji

  • Wszystkie znaki alfabetyczne muszą być wielkimi literami
  • Data urodzenia musi być ważną datą (w tym uwzględnienie lat przestępnych)
  • Kod stanu musi być ważnym kodem stanu w Meksyku
  • Cyfra różnicująca musi odpowiadać rokowi urodzenia
  • Cyfra kontrolna musi być poprawnie obliczona
  • Obsługa przypadków szczególnych dla imion (np. nazwiska jedno-literowe, imiona z Ñ)

Przykłady użycia

  1. Testowanie oprogramowania: Programiści mogą używać tego narzędzia do generowania ważnych CURP do testowania systemów rejestracji użytkowników, operacji w bazach danych lub jakiegokolwiek oprogramowania, które wymaga wprowadzenia CURP.

  2. Prywatność danych: Podczas demonstrowania oprogramowania lub prezentowania danych, używanie losowo generowanych CURP pomaga chronić prywatność osób.

  3. Testowanie wydajności: Generowanie dużych zestawów unikalnych CURP w celu testowania wydajności systemu pod obciążeniem.

  4. Szkolenie i edukacja: Używanie generowanych CURP w materiałach edukacyjnych dotyczących systemów identyfikacji w Meksyku bez używania rzeczywistych danych osobowych.

Historia CURP w Meksyku

System CURP został wprowadzony w 1996 roku przez rząd Meksyku w ramach wysiłków na rzecz modernizacji i standaryzacji identyfikacji osobistej. Zastąpił różne inne systemy identyfikacji i stał się kluczowym elementem meksykańskiej biurokracji, używanym do wszystkiego, od rejestracji w szkołach po składanie zeznań podatkowych.

Na przestrzeni lat system CURP przeszedł kilka modyfikacji:

  • W 2011 roku wprowadzono cyfrę różnicującą, aby odróżnić osoby urodzone przed i po 2000 roku.
  • W 2012 roku zmodyfikowano algorytm obliczania cyfry kontrolnej, aby poprawić unikalność.

Przykłady

Oto przykłady kodu do generowania losowych CURP w różnych językach programowania:

import random
import string
from datetime import datetime, timedelta

def generate_curp():
    # Generowanie składników imienia
    paternal = random.choice(string.ascii_uppercase) + random.choice('AEIOU')
    maternal = random.choice(string.ascii_uppercase)
    given = random.choice(string.ascii_uppercase)

    # Generowanie daty urodzenia
    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")

    # Generowanie płci
    gender = random.choice(['H', 'M'])

    # Generowanie kodu stanu
    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)

    # Generowanie spółgłosk
    consonants = ''.join(random.choices(string.ascii_uppercase.translate(str.maketrans('', '', 'AEIOU')), k=3))

    # Generowanie cyfry różnicującej
    diff_digit = random.choice(string.digits) if int(date_str[:2]) < 20 else random.choice(string.ascii_uppercase)

    # Generowanie cyfry kontrolnej (uproszczone dla tego przykładu)
    check_digit = random.choice(string.digits)

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

## Generowanie i drukowanie losowego 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}`;
}

// Generowanie i logowanie losowego CURP
console.log(generateCURP());

Alternatywy w innych krajach

Chociaż CURP jest unikalne dla Meksyku, inne kraje mają podobne systemy identyfikacyjne:

  1. Stany Zjednoczone: Numer ubezpieczenia społecznego (SSN)
  2. Kanada: Numer ubezpieczenia społecznego (SIN)
  3. Indie: Numer Aadhaar
  4. Brazylia: Cadastro de Pessoas Físicas (CPF)

Każdy system ma swoją własną strukturę i zasady, ale pełni podobne funkcje w swoich krajach.

Źródła

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