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