Generador de CURP
Introducción
El CURP (Clave Única de Registro de Población) es un código alfanumérico único utilizado en México para fines de identificación. Esta herramienta genera CURPs válidos y aleatorios para escenarios de prueba, cumpliendo con el formato oficial y las reglas de validación. Es importante señalar que estos CURPs generados no están vinculados a personas reales y solo deben usarse para fines de prueba.
Estructura del CURP
Un CURP consta de 18 caracteres en el siguiente formato:
- Primera letra del apellido paterno
- Primera vocal del apellido paterno (excluyendo la primera letra)
- Primera letra del apellido materno
- Primera letra del nombre 5-10. Fecha de nacimiento (formato YYMMDD)
- Género (H para hombre, M para mujer) 12-13. Código de dos letras para el estado de nacimiento 14-16. Primera consonante interna de cada componente del nombre (apellido paterno, apellido materno, nombre)
- Dígito de diferenciación (0-9 para personas nacidas antes de 2000, A-Z para aquellos nacidos a partir de 2000)
- Dígito de verificación (0-9)
Algoritmo para Generar un CURP Aleatorio
- Generar letras aleatorias para los componentes del nombre
- Generar una fecha de nacimiento aleatoria
- Seleccionar aleatoriamente el género
- Seleccionar aleatoriamente un código de estado válido
- Generar consonantes aleatorias para los componentes internos del nombre
- Determinar el dígito de diferenciación según el año de nacimiento
- Calcular el dígito de verificación
- Combinar todos los componentes para formar el CURP
Reglas de Validación
- Todos los caracteres alfabéticos deben estar en mayúsculas
- La fecha de nacimiento debe ser una fecha válida (incluyendo la consideración de años bisiestos)
- El código de estado debe ser un código de estado mexicano válido
- El dígito de diferenciación debe corresponder al año de nacimiento
- El dígito de verificación debe ser calculado correctamente
- Manejar casos especiales para nombres (por ejemplo, apellidos de una sola letra, nombres con Ñ)
Casos de Uso
-
Pruebas de Software: Los desarrolladores pueden usar esta herramienta para generar CURPs válidos para probar sistemas de registro de usuarios, operaciones de bases de datos o cualquier software que requiera entrada de CURP.
-
Privacidad de Datos: Al demostrar software o presentar datos, usar CURPs generados aleatoriamente ayuda a proteger la privacidad de las personas.
-
Pruebas de Rendimiento: Generar grandes conjuntos de CURPs únicos para probar el rendimiento del sistema bajo carga.
-
Capacitación y Educación: Usar CURPs generados en materiales educativos sobre sistemas de identificación mexicanos sin utilizar datos personales reales.
Historia del CURP en México
El sistema CURP fue introducido en 1996 por el gobierno mexicano como parte de un esfuerzo por modernizar y estandarizar la identificación personal. Reemplazó varios otros sistemas de identificación y se convirtió en un elemento crucial en la burocracia mexicana, utilizado para todo, desde la inscripción escolar hasta la presentación de impuestos.
A lo largo de los años, el sistema CURP ha sufrido varias modificaciones:
- En 2011, se introdujo el dígito de diferenciación para distinguir entre personas nacidas antes y después de 2000.
- En 2012, se modificó el algoritmo para calcular el dígito de verificación para mejorar la unicidad.
Ejemplos
Aquí hay ejemplos de código para generar CURPs aleatorios en varios lenguajes de programación:
import random
import string
from datetime import datetime, timedelta
def generate_curp():
# Generar componentes del nombre
paternal = random.choice(string.ascii_uppercase) + random.choice('AEIOU')
maternal = random.choice(string.ascii_uppercase)
given = random.choice(string.ascii_uppercase)
# Generar fecha de nacimiento
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énero
gender = random.choice(['H', 'M'])
# Generar código de estado
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 consonantes
consonants = ''.join(random.choices(string.ascii_uppercase.translate(str.maketrans('', '', 'AEIOU')), k=3))
# Generar dígito de diferenciación
diff_digit = random.choice(string.digits) if int(date_str[:2]) < 20 else random.choice(string.ascii_uppercase)
# Generar dígito de verificación (simplificado para este ejemplo)
check_digit = random.choice(string.digits)
return f"{paternal}{maternal}{given}{date_str}{gender}{state}{consonants}{diff_digit}{check_digit}"
## Generar y imprimir un CURP aleatorio
print(generate_curp())
Alternativas en Otros Países
Si bien el CURP es único de México, otros países tienen sistemas de identificación similares:
- Estados Unidos: Número de Seguro Social (SSN)
- Canadá: Número de Seguro Social (SIN)
- India: Número Aadhaar
- Brasil: Cadastro de Pessoas Físicas (CPF)
Cada sistema tiene su propia estructura y reglas, pero sirven propósitos similares en sus respectivos países.
Referencias
- SEGOB (Secretaría de Gobernación). "CURP - Trámites." Gobierno de México, https://www.gob.mx/curp/. Consultado el 4 de agosto de 2024.
- 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. Consultado el 4 de agosto de 2024.