Whiz Tools

CURP Generator

Увод

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 је прошао кроз неколико модификација:

    1. године, разликовни број је уведен да би се разликовали људи рођени пре и после 2000. године.
    1. године, алгоритам за израчунавање проверног броја је модификован да би се побољшала јединственост.

Примери

Ево примера кода за генерисање насумичних 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. Индија: Аадхар број
  4. Бразил: Cadastro de Pessoas Físicas (CPF)

Сваки систем има своју структуру и правила, али служи сличним сврхама у својим земљама.

Референце

  1. SEGOB (Secretaría de Gobernación). "CURP - Трађи." Влада Мексика, https://www.gob.mx/curp/. Приступљено 4. августа 2024.
  2. RENAPO (Registro Nacional de Población e Identidad). "Инструктивни норматив за доделу Clave Única de Registro de Población." Влада Мексика, https://www.gob.mx/cms/uploads/attachment/file/79053/InstructivoNormativoCURP.pdf. Приступљено 4. августа 2024.
Feedback