Whiz Tools

CURP Generator

Uvod

CURP (Clave Única de Registro de Población) je jedinstveni alfanumerički kod koji se koristi u Meksiku u svrhe identifikacije. Ovaj alat generira važeće, nasumične CURP-ove za testne scenarije, u skladu s službenim formatom i pravilima validacije. Važno je napomenuti da ovi generirani CURP-ovi nisu povezani s stvarnim osobama i trebaju se koristiti samo u svrhe testiranja.

Struktura CURP-a

CURP se sastoji od 18 znakova u sljedećem formatu:

  1. Prvo slovo prezimena oca
  2. Prva samoglasnik prezimena oca (izuzevši prvo slovo)
  3. Prvo slovo prezimena majke
  4. Prvo slovo imena 5-10. Datum rođenja (YYMMDD format)
  5. Spol (H za muškarce, M za žene) 12-13. Dvije slova koda za državu rođenja 14-16. Prva unutarnja suglasnika svakog sastojka imena (prezime oca, prezime majke, ime)
  6. Diferencijalna cifra (0-9 za osobe rođene prije 2000. godine, A-Z za one rođene od 2000. godine nadalje)
  7. Kontrolna cifra (0-9)

Algoritam za generiranje nasumičnog CURP-a

  1. Generirati nasumična slova za sastojke imena
  2. Generirati nasumični datum rođenja
  3. Nasumično odabrati spol
  4. Nasumično odabrati važeći kod države
  5. Generirati nasumične suglasnike za unutarnje sastojke imena
  6. Odrediti diferencijalnu cifru na temelju godine rođenja
  7. Izračunati kontrolnu cifru
  8. Kombinirati sve sastojke kako bi se formirao CURP

Pravila validacije

  • Svi abecedni znakovi moraju biti velika slova
  • Datum rođenja mora biti važeći datum (uključujući razmatranje prijestupne godine)
  • Kod države mora biti važeći meksički kod države
  • Diferencijalna cifra mora odgovarati godini rođenja
  • Kontrolna cifra mora biti ispravno izračunata
  • Rukovati posebnim slučajevima za imena (npr. prezimena sa jednim slovom, imena s Ñ)

Upotrebe

  1. Testiranje softvera: Programeri mogu koristiti ovaj alat za generiranje važećih CURP-ova za testiranje sustava registracije korisnika, operacija baze podataka ili bilo kojeg softvera koji zahtijeva unos CURP-a.

  2. Privatnost podataka: Kada se demonstrira softver ili prezentiraju podaci, korištenje nasumično generiranih CURP-ova pomaže u zaštiti privatnosti pojedinaca.

  3. Testiranje performansi: Generirati velike skupove jedinstvenih CURP-ova za testiranje performansi sustava pod opterećenjem.

  4. Obuka i obrazovanje: Koristiti generirane CURP-ove u obrazovnim materijalima o meksičkim identifikacijskim sustavima bez korištenja stvarnih osobnih podataka.

Povijest CURP-a u Meksiku

Sistem CURP uveden je 1996. godine od strane meksičke vlade kao dio napora za modernizaciju i standardizaciju osobne identifikacije. Zamijenio je razne druge identifikacijske sustave i postao ključni element u meksičkoj birokraciji, koristi se za sve, od upisa u školu do podnošenja poreza.

Tokom godina, sistem CURP je prošao kroz nekoliko modifikacija:

  • Godine 2011. uvedena je diferencijalna cifra kako bi se razlikovale osobe rođene prije i nakon 2000. godine.
  • Godine 2012. modificiran je algoritam za izračunavanje kontrolne cifre kako bi se poboljšala jedinstvenost.

Primjeri

Evo primjera koda za generiranje nasumičnih CURP-ova u raznim programskim jezicima:

import random
import string
from datetime import datetime, timedelta

def generate_curp():
    # Generirati sastojke imena
    paternal = random.choice(string.ascii_uppercase) + random.choice('AEIOU')
    maternal = random.choice(string.ascii_uppercase)
    given = random.choice(string.ascii_uppercase)

    # Generirati datum rođenja
    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")

    # Generirati spol
    gender = random.choice(['H', 'M'])

    # Generirati kod države
    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)

    # Generirati suglasnike
    consonants = ''.join(random.choices(string.ascii_uppercase.translate(str.maketrans('', '', 'AEIOU')), k=3))

    # Generirati diferencijalnu cifru
    diff_digit = random.choice(string.digits) if int(date_str[:2]) < 20 else random.choice(string.ascii_uppercase)

    # Generirati kontrolnu cifru ( pojednostavljeno za ovaj primjer)
    check_digit = random.choice(string.digits)

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

## Generirati i ispisati nasumični 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}`;
}

// Generirati i ispisati nasumični CURP
console.log(generateCURP());

Alternativa u drugim zemljama

Iako je CURP jedinstven za Meksiko, druge zemlje imaju slične identifikacijske sisteme:

  1. Sjedinjene Američke Države: Broj socijalnog osiguranja (SSN)
  2. Kanada: Broj socijalnog osiguranja (SIN)
  3. Indija: Aadhaar broj
  4. Brazil: Cadastro de Pessoas Físicas (CPF)

Svaki sistem ima svoju strukturu i pravila, ali služe sličnim svrhama u svojim zemljama.

Reference

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