Whiz Tools

CURP Generator

Introduktion

CURP (Clave Única de Registro de Población) är en unik alfanumerisk kod som används i Mexiko för identifieringsändamål. Detta verktyg genererar giltiga, slumpmässiga CURP:er för testscenarier, i enlighet med det officiella formatet och valideringsreglerna. Det är viktigt att notera att dessa genererade CURP:er inte är kopplade till verkliga individer och endast ska användas för teständamål.

Struktur av CURP

En CURP består av 18 tecken i följande format:

  1. Första bokstaven i det paterna efternamnet
  2. Första vokalen i det paterna efternamnet (exklusive första bokstaven)
  3. Första bokstaven i det materna efternamnet
  4. Första bokstaven i det givna namnet 5-10. Födelsedatum (YYMMDD-format)
  5. Kön (H för man, M för kvinna) 12-13. Tvåbokstavskod för födelsestat 14-16. Första interna konsonant i varje namnkomponent (paterna efternamn, materna efternamn, givet namn)
  6. Differentieringssiffra (0-9 för personer födda före 2000, A-Z för de som föddes från 2000 och framåt)
  7. Kontrollsiffra (0-9)

Algoritm för att generera en slumpmässig CURP

  1. Generera slumpmässiga bokstäver för namnkomponenter
  2. Generera ett slumpmässigt födelsedatum
  3. Slumptalsval kön
  4. Slumptalsval en giltig statskod
  5. Generera slumpmässiga konsonanter för interna namnkomponenter
  6. Bestäm differentieringssiffran baserat på födelseåret
  7. Beräkna kontrollsiffran
  8. Kombinera alla komponenter för att bilda CURP

Valideringsregler

  • Alla alfabetiska tecken måste vara versaler
  • Födelsedatumet måste vara ett giltigt datum (inklusive hänsyn till skottår)
  • Statskoden måste vara en giltig mexikansk statskod
  • Differentieringssiffran måste motsvara födelseåret
  • Kontrollsiffran måste vara korrekt beräknad
  • Hantera specialfall för namn (t.ex. en-bokstavsefnamn, namn med Ñ)

Användningsområden

  1. Programvarutestning: Utvecklare kan använda detta verktyg för att generera giltiga CURP:er för att testa användarregistreringssystem, databasoperationer eller all programvara som kräver CURP-inmatning.

  2. Dataskydd: När man demonstrerar programvara eller presenterar data hjälper användningen av slumpmässigt genererade CURP:er att skydda individers integritet.

  3. Prestandatestning: Generera stora mängder unika CURP:er för att testa systemets prestanda under belastning.

  4. Utbildning och träning: Använd genererade CURP:er i utbildningsmaterial om mexikanska identifieringssystem utan att använda verkliga personuppgifter.

Historia om CURP i Mexiko

CURP-systemet introducerades 1996 av den mexikanska regeringen som en del av en insats för att modernisera och standardisera personlig identifiering. Det ersatte olika andra identifieringssystem och blev ett avgörande element i mexikansk byråkrati, som används för allt från skolregistrering till skatteinlämning.

Under åren har CURP-systemet genomgått flera förändringar:

  • År 2011 infördes differentieringssiffran för att särskilja mellan personer födda före och efter 2000.
  • År 2012 modifierades algoritmen för att beräkna kontrollsiffran för att förbättra unikheten.

Exempel

Här är kodexempel för att generera slumpmässiga CURP:er i olika programmeringsspråk:

import random
import string
from datetime import datetime, timedelta

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

    # Generera födelsedatum
    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")

    # Generera kön
    gender = random.choice(['H', 'M'])

    # Generera statskod
    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)

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

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

    # Generera kontrollsiffra (förenklad för detta exempel)
    check_digit = random.choice(string.digits)

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

## Generera och skriv ut en slumpmässig 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}`;
}

// Generera och logga en slumpmässig CURP
console.log(generateCURP());

Alternativ i andra länder

Även om CURP är unikt för Mexiko, har andra länder liknande identifieringssystem:

  1. USA: Social Security Number (SSN)
  2. Kanada: Social Insurance Number (SIN)
  3. Indien: Aadhaar Number
  4. Brasilien: Cadastro de Pessoas Físicas (CPF)

Varje system har sin egen struktur och regler, men de tjänar liknande syften i sina respektive länder.

Referenser

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