Whiz Tools

CURP Generator

Introduksjon

CURP (Clave Única de Registro de Población) er en unik alfanumerisk kode som brukes i Mexico for identifikasjonsformål. Dette verktøyet genererer gyldige, tilfeldige CURP-er for testscenarier, i samsvar med det offisielle formatet og valideringsreglene. Det er viktig å merke seg at disse genererte CURP-ene ikke er knyttet til virkelige individer og kun skal brukes til testformål.

Struktur av CURP

En CURP består av 18 tegn i følgende format:

  1. Første bokstav av etternavnet til far
  2. Første vokal av etternavnet til far (unntatt første bokstav)
  3. Første bokstav av etternavnet til mor
  4. Første bokstav av fornavnet 5-10. Fødselsdato (YYMMDD-format)
  5. Kjønn (H for mann, M for kvinne) 12-13. To-bokstavers kode for fødselsstat 14-16. Første interne konsonant av hver navnekomponent (paternal etternavn, maternal etternavn, fornavn)
  6. Differensieringsdigit (0-9 for personer født før 2000, A-Z for de som er født fra 2000 og utover)
  7. Sjekkdigit (0-9)

Algoritme for å generere en tilfeldig CURP

  1. Generer tilfeldige bokstaver for navnekomponenter
  2. Generer en tilfeldig fødselsdato
  3. Velg tilfeldig kjønn
  4. Velg tilfeldig en gyldig statskode
  5. Generer tilfeldige konsonanter for interne navnekomponenter
  6. Bestem differensieringsdigit basert på fødselsåret
  7. Beregn sjekkdigit
  8. Kombiner alle komponentene for å danne CURP-en

Valideringsregler

  • Alle alfabetiske tegn må være store bokstaver
  • Fødselsdatoen må være en gyldig dato (inkludert skuddårsconsiderasjoner)
  • Statskoden må være en gyldig mexicansk statskode
  • Differensieringsdigit må samsvare med fødselsåret
  • Sjekkdigit må være korrekt beregnet
  • Håndter spesielle tilfeller for navn (f.eks. ett-bokstavers etternavn, navn med Ñ)

Bruksområder

  1. Programvaretesting: Utviklere kan bruke dette verktøyet til å generere gyldige CURP-er for testing av brukerregistreringssystemer, databaseoperasjoner eller programvare som krever CURP-inndata.

  2. Dataprivacy: Når man demonstrerer programvare eller presenterer data, hjelper det å bruke tilfeldig genererte CURP-er for å beskytte enkeltpersoners personvern.

  3. Ytelsestesting: Generer store sett med unike CURP-er for å teste systemytelse under belastning.

  4. Opplæring og utdanning: Bruk genererte CURP-er i utdanningsmateriell om mexicanske identifikasjonssystemer uten å bruke ekte personopplysninger.

Historie om CURP i Mexico

CURP-systemet ble introdusert i 1996 av den meksikanske regjeringen som en del av et forsøk på å modernisere og standardisere personlig identifikasjon. Det erstattet ulike andre identifikasjonssystemer og ble et viktig element i meksikansk byråkrati, brukt til alt fra skoleinnmelding til skatteinnlevering.

I løpet av årene har CURP-systemet gjennomgått flere modifikasjoner:

  • I 2011 ble differensieringsdigit introdusert for å skille mellom personer født før og etter 2000.
  • I 2012 ble algoritmen for beregning av sjekkdigit endret for å forbedre unikhet.

Eksempler

Her er kodeeksempler for å generere tilfeldige CURP-er i forskjellige programmeringsspråk:

import random
import string
from datetime import datetime, timedelta

def generate_curp():
    # Generer navnekomponenter
    paternal = random.choice(string.ascii_uppercase) + random.choice('AEIOU')
    maternal = random.choice(string.ascii_uppercase)
    given = random.choice(string.ascii_uppercase)

    # Generer fødselsdato
    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")

    # Generer kjønn
    gender = random.choice(['H', 'M'])

    # Generer statskode
    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)

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

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

    # Generer sjekkdigit (forenklet for dette eksemplet)
    check_digit = random.choice(string.digits)

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

## Generer og skriv ut en tilfeldig 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}`;
}

// Generer og logg en tilfeldig CURP
console.log(generateCURP());

Alternativer i andre land

Mens CURP er unikt for Mexico, har andre land lignende identifikasjonssystemer:

  1. USA: Social Security Number (SSN)
  2. Canada: Social Insurance Number (SIN)
  3. India: Aadhaar Number
  4. Brasil: Cadastro de Pessoas Físicas (CPF)

Hvert system har sin egen struktur og regler, men de tjener lignende formål i sine respektive land.

Referanser

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