Whiz Tools

Generator CURP

Pendahuluan

CURP (Clave Única de Registro de Población) adalah kode alfanumerik unik yang digunakan di Meksiko untuk tujuan identifikasi. Alat ini menghasilkan CURP acak yang valid untuk skenario pengujian, sesuai dengan format resmi dan aturan validasi. Penting untuk dicatat bahwa CURP yang dihasilkan ini tidak terikat pada individu nyata dan hanya boleh digunakan untuk tujuan pengujian.

Struktur CURP

CURP terdiri dari 18 karakter dalam format berikut:

  1. Huruf pertama dari nama belakang paternal
  2. Vokal pertama dari nama belakang paternal (tidak termasuk huruf pertama)
  3. Huruf pertama dari nama belakang maternal
  4. Huruf pertama dari nama depan 5-10. Tanggal lahir (format YYMMDD)
  5. Jenis kelamin (H untuk laki-laki, M untuk perempuan) 12-13. Kode dua huruf untuk negara bagian tempat lahir 14-16. Konsonan internal pertama dari setiap komponen nama (nama belakang paternal, nama belakang maternal, nama depan)
  6. Digit diferensiasi (0-9 untuk orang yang lahir sebelum tahun 2000, A-Z untuk mereka yang lahir dari tahun 2000 dan seterusnya)
  7. Digit cek (0-9)

Algoritma untuk Menghasilkan CURP Acak

  1. Menghasilkan huruf acak untuk komponen nama
  2. Menghasilkan tanggal lahir acak
  3. Memilih jenis kelamin secara acak
  4. Memilih kode negara bagian yang valid secara acak
  5. Menghasilkan konsonan acak untuk komponen nama internal
  6. Menentukan digit diferensiasi berdasarkan tahun lahir
  7. Menghitung digit cek
  8. Menggabungkan semua komponen untuk membentuk CURP

Aturan Validasi

  • Semua karakter alfabetik harus dalam huruf kapital
  • Tanggal lahir harus merupakan tanggal yang valid (termasuk pertimbangan tahun kabisat)
  • Kode negara bagian harus merupakan kode negara bagian Meksiko yang valid
  • Digit diferensiasi harus sesuai dengan tahun lahir
  • Digit cek harus dihitung dengan benar
  • Menangani kasus khusus untuk nama (misalnya, nama belakang satu huruf, nama dengan Ñ)

Kasus Penggunaan

  1. Pengujian Perangkat Lunak: Pengembang dapat menggunakan alat ini untuk menghasilkan CURP yang valid untuk menguji sistem pendaftaran pengguna, operasi basis data, atau perangkat lunak apa pun yang memerlukan input CURP.

  2. Privasi Data: Saat mendemonstrasikan perangkat lunak atau menyajikan data, menggunakan CURP yang dihasilkan secara acak membantu melindungi privasi individu.

  3. Pengujian Kinerja: Menghasilkan set CURP unik dalam jumlah besar untuk menguji kinerja sistem di bawah beban.

  4. Pelatihan dan Pendidikan: Menggunakan CURP yang dihasilkan dalam materi pendidikan tentang sistem identifikasi Meksiko tanpa menggunakan data pribadi yang nyata.

Sejarah CURP di Meksiko

Sistem CURP diperkenalkan pada tahun 1996 oleh pemerintah Meksiko sebagai bagian dari upaya untuk memodernisasi dan menstandarisasi identifikasi pribadi. Ini menggantikan berbagai sistem identifikasi lainnya dan menjadi elemen penting dalam birokrasi Meksiko, digunakan untuk segala hal mulai dari pendaftaran sekolah hingga pengisian pajak.

Selama bertahun-tahun, sistem CURP telah mengalami beberapa modifikasi:

  • Pada tahun 2011, digit diferensiasi diperkenalkan untuk membedakan antara orang yang lahir sebelum dan setelah tahun 2000.
  • Pada tahun 2012, algoritma untuk menghitung digit cek dimodifikasi untuk meningkatkan keunikan.

Contoh

Berikut adalah contoh kode untuk menghasilkan CURP acak dalam berbagai bahasa pemrograman:

import random
import string
from datetime import datetime, timedelta

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

    # Menghasilkan tanggal 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")

    # Menghasilkan jenis kelamin
    gender = random.choice(['H', 'M'])

    # Menghasilkan kode negara bagian
    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)

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

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

    # Menghasilkan digit cek (disederhanakan untuk contoh ini)
    check_digit = random.choice(string.digits)

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

## Menghasilkan dan mencetak CURP acak
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}`;
}

// Menghasilkan dan mencetak CURP acak
console.log(generateCURP());

Alternatif di Negara Lain

Sementara CURP unik untuk Meksiko, negara lain memiliki sistem identifikasi serupa:

  1. Amerika Serikat: Nomor Jaminan Sosial (SSN)
  2. Kanada: Nomor Asuransi Sosial (SIN)
  3. India: Nomor Aadhaar
  4. Brasil: Cadastro de Pessoas Físicas (CPF)

Setiap sistem memiliki struktur dan aturan sendiri, tetapi mereka melayani tujuan serupa di negara masing-masing.

Referensi

  1. SEGOB (Secretaría de Gobernación). "CURP - Trámites." Pemerintah Meksiko, https://www.gob.mx/curp/. Diakses 4 Agu. 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." Pemerintah Meksiko, https://www.gob.mx/cms/uploads/attachment/file/79053/InstructivoNormativoCURP.pdf. Diakses 4 Agu. 2024.
Feedback