Генератор CURP
Вступ
CURP (Clave Única de Registro de Población) — це унікальний алфавітно-цифровий код, що використовується в Мексиці для ідентифікації. Цей інструмент генерує дійсні, випадкові CURP для тестових сценаріїв, дотримуючись офіційного формату та правил валідації. Важливо зазначити, що ці згенеровані CURP не пов'язані з реальними особами і повинні використовуватися лише для тестування.
Структура CURP
CURP складається з 18 символів у наступному форматі:
- Перша літера батьківського прізвища
- Перша голосна батьківського прізвища (не рахуючи першої літери)
- Перша літера материнського прізвища
- Перша літера імені 5-10. Дата народження (формат YYMMDD)
- Стать (H для чоловіків, M для жінок) 12-13. Двобуквений код штату народження 14-16. Перша внутрішня приголосна кожного компонента імені (батьківське прізвище, материнське прізвище, ім'я)
- Диференційний знак (0-9 для людей, народжених до 2000 року, A-Z для тих, хто народився з 2000 року)
- Контрольна цифра (0-9)
Алгоритм для генерації випадкового CURP
- Генерувати випадкові літери для компонентів імені
- Генерувати випадкову дату народження
- Випадковим чином вибрати стать
- Випадковим чином вибрати дійсний код штату
- Генерувати випадкові приголосні для внутрішніх компонентів імені
- Визначити диференційний знак на основі року народження
- Обчислити контрольну цифру
- Об'єднати всі компоненти, щоб сформувати CURP
Правила валідації
- Всі алфавітні символи повинні бути великими
- Дата народження повинна бути дійсною датою (включаючи врахування високосного року)
- Код штату повинен бути дійсним кодом мексиканського штату
- Диференційний знак повинен відповідати року народження
- Контрольна цифра повинна бути правильно обчислена
- Обробляти спеціальні випадки для імен (наприклад, однолітерні прізвища, імена з Ñ)
Сценарії використання
-
Тестування програмного забезпечення: Розробники можуть використовувати цей інструмент для генерації дійсних CURP для тестування систем реєстрації користувачів, операцій з базами даних або будь-якого програмного забезпечення, яке потребує введення CURP.
-
Конфіденційність даних: При демонстрації програмного забезпечення або представленні даних використання випадково згенерованих CURP допомагає захистити конфіденційність осіб.
-
Тестування продуктивності: Генерувати великі набори унікальних CURP для тестування продуктивності системи під навантаженням.
-
Навчання та освіта: Використовувати згенеровані 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())
Альтернативи в інших країнах
Хоча CURP є унікальним для Мексики, інші країни мають подібні системи ідентифікації:
- Сполучені Штати: Номер соціального страхування (SSN)
- Канада: Номер соціального страхування (SIN)
- Індія: Номер Aadhaar
- Бразилія: Cadastro de Pessoas Físicas (CPF)
Кожна система має свою структуру та правила, але вони виконують подібні функції в своїх країнах.
Посилання
- SEGOB (Secretaría de Gobernación). "CURP - Trámites." Gobierno de México, https://www.gob.mx/curp/. Доступ 4 серпня 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. Доступ 4 серпня 2024 року.