Whiz Tools

Генератор 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 року.
Feedback