Whiz Tools

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 notar que estos CURPs generados no están vinculados a individuos reales y solo deben usarse para fines de prueba.

Estructura del CURP

Un CURP consta de 18 caracteres en el siguiente formato:

  1. Primera letra del apellido paterno
  2. Primera vocal del apellido paterno (excluyendo la primera letra)
  3. Primera letra del apellido materno
  4. Primera letra del nombre 5-10. Fecha de nacimiento (formato YYMMDD)
  5. Género (H para masculino, M para femenino) 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)
  6. Dígito de diferenciación (0-9 para personas nacidas antes de 2000, A-Z para aquellos nacidos a partir de 2000)
  7. Dígito de verificación (0-9)

Algoritmo para Generar un CURP Aleatorio

  1. Generar letras aleatorias para los componentes del nombre
  2. Generar una fecha de nacimiento aleatoria
  3. Seleccionar aleatoriamente el género
  4. Seleccionar aleatoriamente un código de estado válido
  5. Generar consonantes aleatorias para los componentes internos del nombre
  6. Determinar el dígito de diferenciación basado en el año de nacimiento
  7. Calcular el dígito de verificación
  8. 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 (incluida la consideración del año bisiesto)
  • 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

  1. Pruebas de Software: Los desarrolladores pueden usar esta herramienta para generar CURPs válidos para probar sistemas de registro de usuarios, operaciones de base de datos o cualquier software que requiera entrada de CURP.

  2. Privacidad de Datos: Al demostrar software o presentar datos, usar CURPs generados aleatoriamente ayuda a proteger la privacidad de los individuos.

  3. Pruebas de Rendimiento: Generar grandes conjuntos de CURPs únicos para probar el rendimiento del sistema bajo carga.

  4. 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 mostrar un CURP aleatorio
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}`;
}

// Generar y mostrar un CURP aleatorio
console.log(generateCURP());

Alternativas en Otros Países

Si bien el CURP es único de México, otros países tienen sistemas de identificación similares:

  1. Estados Unidos: Número de Seguro Social (SSN)
  2. Canadá: Número de Seguro Social (SIN)
  3. India: Número Aadhaar
  4. Brasil: Cadastro de Pessoas Físicas (CPF)

Cada sistema tiene su propia estructura y reglas, pero cumplen propósitos similares en sus respectivos países.

Referencias

  1. 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.
  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. Consultado el 4 de agosto de 2024.
Feedback