Whiz Tools

Gerador de CURP

Introdução

O CURP (Clave Única de Registro de Población) é um código alfanumérico único utilizado no México para fins de identificação. Esta ferramenta gera CURPs válidos e aleatórios para cenários de teste, cumprindo com o formato oficial e regras de validação. É importante notar que esses CURPs gerados não estão vinculados a indivíduos reais e devem ser usados apenas para fins de teste.

Estrutura do CURP

Um CURP consiste em 18 caracteres no seguinte formato:

  1. Primeira letra do sobrenome paterno
  2. Primeira vogal do sobrenome paterno (excluindo a primeira letra)
  3. Primeira letra do sobrenome materno
  4. Primeira letra do nome 5-10. Data de nascimento (formato YYMMDD)
  5. Gênero (H para masculino, M para feminino) 12-13. Código de duas letras para o estado de nascimento 14-16. Primeira consoante interna de cada componente do nome (sobrenome paterno, sobrenome materno, nome)
  6. Dígito de diferenciação (0-9 para pessoas nascidas antes de 2000, A-Z para aquelas nascidas a partir de 2000)
  7. Dígito de verificação (0-9)

Algoritmo para Gerar um CURP Aleatório

  1. Gerar letras aleatórias para os componentes do nome
  2. Gerar uma data de nascimento aleatória
  3. Selecionar aleatoriamente o gênero
  4. Selecionar aleatoriamente um código de estado válido
  5. Gerar consoantes aleatórias para os componentes internos do nome
  6. Determinar o dígito de diferenciação com base no ano de nascimento
  7. Calcular o dígito de verificação
  8. Combinar todos os componentes para formar o CURP

Regras de Validação

  • Todos os caracteres alfabéticos devem estar em maiúsculas
  • A data de nascimento deve ser uma data válida (incluindo consideração de anos bissextos)
  • O código do estado deve ser um código de estado mexicano válido
  • O dígito de diferenciação deve corresponder ao ano de nascimento
  • O dígito de verificação deve ser calculado corretamente
  • Lidar com casos especiais para nomes (por exemplo, sobrenomes de uma letra, nomes com Ñ)

Casos de Uso

  1. Teste de Software: Os desenvolvedores podem usar esta ferramenta para gerar CURPs válidos para testar sistemas de registro de usuários, operações de banco de dados ou qualquer software que exija entrada de CURP.

  2. Privacidade de Dados: Ao demonstrar software ou apresentar dados, usar CURPs gerados aleatoriamente ajuda a proteger a privacidade dos indivíduos.

  3. Teste de Desempenho: Gerar grandes conjuntos de CURPs únicos para testar o desempenho do sistema sob carga.

  4. Treinamento e Educação: Usar CURPs gerados em materiais educacionais sobre sistemas de identificação mexicanos sem usar dados pessoais reais.

História do CURP no México

O sistema CURP foi introduzido em 1996 pelo governo mexicano como parte de um esforço para modernizar e padronizar a identificação pessoal. Ele substituiu vários outros sistemas de identificação e se tornou um elemento crucial na burocracia mexicana, usado para tudo, desde matrícula escolar até declaração de impostos.

Ao longo dos anos, o sistema CURP passou por várias modificações:

  • Em 2011, o dígito de diferenciação foi introduzido para distinguir entre pessoas nascidas antes e depois de 2000.
  • Em 2012, o algoritmo para calcular o dígito de verificação foi modificado para melhorar a exclusividade.

Exemplos

Aqui estão exemplos de código para gerar CURPs aleatórios em várias linguagens de programação:

import random
import string
from datetime import datetime, timedelta

def generate_curp():
    # Gerar componentes do nome
    paternal = random.choice(string.ascii_uppercase) + random.choice('AEIOU')
    maternal = random.choice(string.ascii_uppercase)
    given = random.choice(string.ascii_uppercase)

    # Gerar data de nascimento
    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")

    # Gerar gênero
    gender = random.choice(['H', 'M'])

    # Gerar código do 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)

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

    # Gerar dígito de diferenciação
    diff_digit = random.choice(string.digits) if int(date_str[:2]) < 20 else random.choice(string.ascii_uppercase)

    # Gerar dígito de verificação (simplificado para este exemplo)
    check_digit = random.choice(string.digits)

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

## Gerar e imprimir um CURP aleatório
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}`;
}

// Gerar e registrar um CURP aleatório
console.log(generateCURP());

Alternativas em Outros Países

Embora o CURP seja exclusivo do México, outros países têm sistemas de identificação semelhantes:

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

Cada sistema tem sua própria estrutura e regras, mas servem a propósitos semelhantes em seus respectivos países.

Referências

  1. SEGOB (Secretaría de Gobernación). "CURP - Trámites." Governo do México, https://www.gob.mx/curp/. Acessado em 4 de agosto de 2024.
  2. RENAPO (Registro Nacional de Población e Identidad). "Instructivo Normativo para a Asignação da Clave Única de Registro de Población." Governo do México, https://www.gob.mx/cms/uploads/attachment/file/79053/InstructivoNormativoCURP.pdf. Acessado em 4 de agosto de 2024.
Feedback