Whiz Tools

Penjana CURP

Pengenalan

CURP (Clave Única de Registro de Población) adalah kod alfanumerik unik yang digunakan di Mexico untuk tujuan pengenalan. Alat ini menjana CURP yang sah dan rawak untuk senario ujian, mematuhi format rasmi dan peraturan pengesahan. Adalah penting untuk diperhatikan bahawa CURP yang dijana ini tidak terikat dengan individu sebenar dan hanya boleh digunakan untuk tujuan ujian.

Struktur CURP

CURP terdiri daripada 18 aksara dalam format berikut:

  1. Huruf pertama nama bapa
  2. Huruf vokal pertama nama bapa (tidak termasuk huruf pertama)
  3. Huruf pertama nama ibu
  4. Huruf pertama nama diberikan 5-10. Tarikh lahir (format YYMMDD)
  5. Jantina (H untuk lelaki, M untuk perempuan) 12-13. Kod dua huruf untuk negeri kelahiran 14-16. Konsonan dalaman pertama bagi setiap komponen nama (nama bapa, nama ibu, nama diberikan)
  6. Digit pembezaan (0-9 untuk orang yang dilahirkan sebelum 2000, A-Z untuk mereka yang dilahirkan dari 2000 dan seterusnya)
  7. Digit semak (0-9)

Algoritma untuk Menjana CURP Rawak

  1. Hasilkan huruf rawak untuk komponen nama
  2. Hasilkan tarikh lahir rawak
  3. Pilih jantina secara rawak
  4. Pilih kod negeri yang sah secara rawak
  5. Hasilkan konsonan rawak untuk komponen nama dalaman
  6. Tentukan digit pembezaan berdasarkan tahun kelahiran
  7. Kira digit semak
  8. Gabungkan semua komponen untuk membentuk CURP

Peraturan Pengesahan

  • Semua aksara alfabetik mesti dalam huruf besar
  • Tarikh lahir mesti merupakan tarikh yang sah (termasuk pertimbangan tahun lompat)
  • Kod negeri mesti merupakan kod negeri Mexico yang sah
  • Digit pembezaan mesti sepadan dengan tahun kelahiran
  • Digit semak mesti dikira dengan betul
  • Tangani kes khas untuk nama (contohnya, nama keluarga satu huruf, nama dengan Ñ)

Kes Penggunaan

  1. Ujian Perisian: Pembangun boleh menggunakan alat ini untuk menjana CURP yang sah untuk menguji sistem pendaftaran pengguna, operasi pangkalan data, atau mana-mana perisian yang memerlukan input CURP.

  2. Privasi Data: Apabila mendemonstrasikan perisian atau membentangkan data, menggunakan CURP yang dijana secara rawak membantu melindungi privasi individu.

  3. Ujian Prestasi: Hasilkan set CURP unik yang besar untuk menguji prestasi sistem di bawah beban.

  4. Latihan dan Pendidikan: Gunakan CURP yang dijana dalam bahan pendidikan tentang sistem pengenalan Mexico tanpa menggunakan data peribadi sebenar.

Sejarah CURP di Mexico

Sistem CURP diperkenalkan pada tahun 1996 oleh kerajaan Mexico sebagai sebahagian daripada usaha untuk memodenkan dan menstandardkan pengenalan peribadi. Ia menggantikan pelbagai sistem pengenalan lain dan menjadi elemen penting dalam birokrasi Mexico, digunakan untuk segala-galanya dari pendaftaran sekolah hingga pengisian cukai.

Sepanjang tahun, sistem CURP telah melalui beberapa pengubahsuaian:

  • Pada tahun 2011, digit pembezaan diperkenalkan untuk membezakan antara orang yang dilahirkan sebelum dan selepas 2000.
  • Pada tahun 2012, algoritma untuk mengira digit semak telah diubahsuai untuk meningkatkan keunikan.

Contoh

Berikut adalah contoh kod untuk menjana CURP rawak dalam pelbagai bahasa pengaturcaraan:

import random
import string
from datetime import datetime, timedelta

def generate_curp():
    # Hasilkan komponen nama
    paternal = random.choice(string.ascii_uppercase) + random.choice('AEIOU')
    maternal = random.choice(string.ascii_uppercase)
    given = random.choice(string.ascii_uppercase)

    # Hasilkan tarikh lahir
    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")

    # Hasilkan jantina
    gender = random.choice(['H', 'M'])

    # Hasilkan kod negeri
    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)

    # Hasilkan konsonan
    consonants = ''.join(random.choices(string.ascii_uppercase.translate(str.maketrans('', '', 'AEIOU')), k=3))

    # Hasilkan digit pembezaan
    diff_digit = random.choice(string.digits) if int(date_str[:2]) < 20 else random.choice(string.ascii_uppercase)

    # Hasilkan digit semak (dipermudahkan untuk contoh ini)
    check_digit = random.choice(string.digits)

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

## Hasilkan dan cetak CURP rawak
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}`;
}

// Hasilkan dan log CURP rawak
console.log(generateCURP());

Alternatif di Negara Lain

Walaupun CURP adalah unik untuk Mexico, negara lain mempunyai sistem pengenalan yang serupa:

  1. Amerika Syarikat: Nombor Jaminan Sosial (SSN)
  2. Kanada: Nombor Insurans Sosial (SIN)
  3. India: Nombor Aadhaar
  4. Brazil: Cadastro de Pessoas Físicas (CPF)

Setiap sistem mempunyai struktur dan peraturannya sendiri, tetapi mereka berfungsi untuk tujuan yang serupa di negara masing-masing.

Rujukan

  1. SEGOB (Secretaría de Gobernación). "CURP - Trámites." Gobierno de México, https://www.gob.mx/curp/. Diakses 4 Ogos 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. Diakses 4 Ogos 2024.
Feedback