Generador de CURP
Introducció
El CURP (Clave Única de Registro de Población) és un codi alfanumèric únic utilitzat a Mèxic per a fins d'identificació. Aquesta eina genera CURPs vàlids i aleatoris per a escenaris de prova, complint amb el format oficial i les regles de validació. És important notar que aquests CURPs generats no estan vinculats a persones reals i només s'han d'utilitzar per a fins de prova.
Estructura del CURP
Un CURP consisteix en 18 caràcters en el següent format:
- Primera lletra del cognom paterno
- Primera vocal del cognom paterno (excloent la primera lletra)
- Primera lletra del cognom matern
- Primera lletra del nom 5-10. Data de naixement (format YYMMDD)
- Gènere (H per a homes, M per a dones) 12-13. Codi de dues lletres per a l'estat de naixement 14-16. Primera consonant interna de cada component del nom (cognom paterno, cognom matern, nom)
- Dígit de diferenciació (0-9 per a persones nascudes abans de 2000, A-Z per a les nascudes a partir de 2000)
- Dígit de control (0-9)
Algoritme per a generar un CURP aleatori
- Generar lletres aleatòries per als components del nom
- Generar una data de naixement aleatòria
- Seleccionar aleatòriament el gènere
- Seleccionar aleatòriament un codi d'estat vàlid
- Generar consonants aleatòries per als components interns del nom
- Determinar el dígit de diferenciació en funció de l'any de naixement
- Calcular el dígit de control
- Combinar tots els components per formar el CURP
Regles de validació
- Tots els caràcters alfabètics han de ser en majúscules
- La data de naixement ha de ser una data vàlida (incloent la consideració d'anys de traspàs)
- El codi d'estat ha de ser un codi d'estat mexicà vàlid
- El dígit de diferenciació ha de correspondre amb l'any de naixement
- El dígit de control ha de ser calculat correctament
- Gestionar casos especials per als noms (per exemple, cognoms de lletra única, noms amb Ñ)
Casos d'ús
-
Proves de programari: Els desenvolupadors poden utilitzar aquesta eina per generar CURPs vàlids per a provar sistemes d'inscripció d'usuaris, operacions de base de dades o qualsevol programari que requereixi entrada de CURP.
-
Privadesa de dades: En demostrar programari o presentar dades, utilitzar CURPs generats aleatòriament ajuda a protegir la privadesa dels individus.
-
Proves de rendiment: Generar grans conjunts de CURPs únics per provar el rendiment del sistema sota càrrega.
-
Formació i educació: Utilitzar CURPs generats en materials educatius sobre sistemes d'identificació mexicans sense utilitzar dades personals reals.
Història del CURP a Mèxic
El sistema CURP es va introduir el 1996 pel govern mexicà com a part d'un esforç per modernitzar i estandarditzar la identificació personal. Va substituir diversos altres sistemes d'identificació i es va convertir en un element crucial de la burocràcia mexicana, utilitzat per a tot, des de l'inscripció escolar fins a la presentació d'impostos.
Al llarg dels anys, el sistema CURP ha sofert diverses modificacions:
- El 2011, es va introduir el dígit de diferenciació per distingir entre persones nascudes abans i després de 2000.
- El 2012, s'ha modificat l'algoritme per calcular el dígit de control per millorar la unicitat.
Exemples
Aquí hi ha exemples de codi per generar CURPs aleatoris en diversos llenguatges de programació:
import random
import string
from datetime import datetime, timedelta
def generate_curp():
# Generar components del nom
paternal = random.choice(string.ascii_uppercase) + random.choice('AEIOU')
maternal = random.choice(string.ascii_uppercase)
given = random.choice(string.ascii_uppercase)
# Generar data de naixement
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")
# Generar gènere
gender = random.choice(['H', 'M'])
# Generar codi d'estat
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)
# Generar consonants
consonants = ''.join(random.choices(string.ascii_uppercase.translate(str.maketrans('', '', 'AEIOU')), k=3))
# Generar dígit de diferenciació
diff_digit = random.choice(string.digits) if int(date_str[:2]) < 20 else random.choice(string.ascii_uppercase)
# Generar dígit de control (simplificat per a aquest exemple)
check_digit = random.choice(string.digits)
return f"{paternal}{maternal}{given}{date_str}{gender}{state}{consonants}{diff_digit}{check_digit}"
## Generar i imprimir un CURP aleatori
print(generate_curp())
Alternatives en altres països
Si bé el CURP és únic a Mèxic, altres països tenen sistemes d'identificació similars:
- Estats Units: Número de Seguretat Social (SSN)
- Canadà: Número d'Assegurança Social (SIN)
- Índia: Número Aadhaar
- Brasil: Cadastro de Pessoas Físicas (CPF)
Cada sistema té la seva pròpia estructura i regles, però serveixen a fins similars en els seus respectius països.
Referències
- SEGOB (Secretaría de Gobernación). "CURP - Tràmits." Gobierno de México, https://www.gob.mx/curp/. Accedit el 4 d'agost de 2024.
- RENAPO (Registro Nacional de Población e Identidad). "Instructiu Normatiu per a l'Assignació de la Clau Única de Registro de Población." Gobierno de México, https://www.gob.mx/cms/uploads/attachment/file/79053/InstructivoNormativoCURP.pdf. Accedit el 4 d'agost de 2024.