Whiz Tools

Сгенерировать CURP

Генератор CURP

Введение

CURP (Clave Única de Registro de Población) — это уникальный алфавитно-цифровой код, используемый в Мексике для идентификации. Этот инструмент генерирует действительные, случайные CURP для тестовых сценариев, соответствующих официальному формату и правилам валидации. Важно отметить, что сгенерированные CURP не привязаны к реальным людям и должны использоваться только в тестовых целях.

Структура CURP

CURP состоит из 18 символов в следующем формате:

  1. Первая буква фамилии отца
  2. Первая гласная фамилии отца (исключая первую букву)
  3. Первая буква фамилии матери
  4. Первая буква имени 5-10. Дата рождения (формат YYMMDD)
  5. Пол (H для мужчин, M для женщин) 12-13. Двухбуквенный код штата рождения 14-16. Первая внутренняя согласная каждого компонента имени (фамилия отца, фамилия матери, имя)
  6. Дифференцирующая цифра (0-9 для людей, родившихся до 2000 года, A-Z для тех, кто родился с 2000 года и позже)
  7. Контрольная цифра (0-9)

Алгоритм генерации случайного CURP

  1. Генерация случайных букв для компонентов имени
  2. Генерация случайной даты рождения
  3. Случайный выбор пола
  4. Случайный выбор действительного кода штата
  5. Генерация случайных согласных для внутренних компонентов имени
  6. Определение дифференцирующей цифры на основе года рождения
  7. Расчет контрольной цифры
  8. Объединение всех компонентов для формирования CURP

Правила валидации

  • Все алфавитные символы должны быть заглавными
  • Дата рождения должна быть действительной (включая учет високосных годов)
  • Код штата должен быть действительным кодом мексиканского штата
  • Дифференцирующая цифра должна соответствовать году рождения
  • Контрольная цифра должна быть правильно рассчитана
  • Обработка особых случаев для имен (например, фамилии с одной буквой, имена с Ñ)

Сценарии использования

  1. Тестирование программного обеспечения: Разработчики могут использовать этот инструмент для генерации действительных CURP для тестирования систем регистрации пользователей, операций с базами данных или любого программного обеспечения, которое требует ввода CURP.

  2. Защита данных: При демонстрации программного обеспечения или представлении данных использование случайно сгенерированных CURP помогает защитить конфиденциальность людей.

  3. Тестирование производительности: Генерация больших наборов уникальных CURP для тестирования производительности системы под нагрузкой.

  4. Обучение и образование: Использование сгенерированных CURP в учебных материалах о мексиканских системах идентификации без использования реальных персональных данных.

История CURP в Мексике

Система CURP была введена в 1996 году мексиканским правительством в рамках усилий по модернизации и стандартизации личной идентификации. Она заменила различные другие системы идентификации и стала ключевым элементом мексиканской бюрократии, используемой для всего, от зачисления в школы до подачи налоговых деклараций.

На протяжении многих лет система CURP претерпела несколько изменений:

  • В 2011 году была введена дифференцирующая цифра для различения людей, родившихся до и после 2000 года.
  • В 2012 году алгоритм расчета контрольной цифры был изменен для улучшения уникальности.

Примеры

Вот примеры кода для генерации случайных CURP на различных языках программирования:

import random
import string
from datetime import datetime, timedelta

def generate_curp():
    # Генерация компонентов имени
    paternal = random.choice(string.ascii_uppercase) + random.choice('AEIOU')
    maternal = random.choice(string.ascii_uppercase)
    given = random.choice(string.ascii_uppercase)

    # Генерация даты рождения
    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")

    # Генерация пола
    gender = random.choice(['H', 'M'])

    # Генерация кода штата
    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)

    # Генерация согласных
    consonants = ''.join(random.choices(string.ascii_uppercase.translate(str.maketrans('', '', 'AEIOU')), k=3))

    # Генерация дифференцирующей цифры
    diff_digit = random.choice(string.digits) if int(date_str[:2]) < 20 else random.choice(string.ascii_uppercase)

    # Генерация контрольной цифры (упрощено для этого примера)
    check_digit = random.choice(string.digits)

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

## Генерация и вывод случайного 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}`;
}

// Генерация и вывод случайного CURP
console.log(generateCURP());

Альтернативы в других странах

Хотя CURP уникален для Мексики, в других странах существуют аналогичные системы идентификации:

  1. Соединенные Штаты: Номер социального страхования (SSN)
  2. Канада: Номер социального страхования (SIN)
  3. Индия: Номер Aadhaar
  4. Бразилия: Cadastro de Pessoas Físicas (CPF)

Каждая система имеет свою структуру и правила, но они служат аналогичным целям в своих странах.

Ссылки

  1. SEGOB (Secretaría de Gobernación). "CURP - Trámites." Gobierno de México, https://www.gob.mx/curp/. Доступ 4 авг. 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. Доступ 4 авг. 2024.
Обратная связь