Whiz Tools

Trình tạo CURP

Giới thiệu

CURP (Clave Única de Registro de Población) là một mã alphanumeric duy nhất được sử dụng ở Mexico cho các mục đích nhận dạng. Công cụ này tạo ra các CURP ngẫu nhiên hợp lệ cho các tình huống thử nghiệm, tuân thủ định dạng và quy tắc xác thực chính thức. Quan trọng là lưu ý rằng các CURP được tạo ra này không liên quan đến các cá nhân thực và chỉ nên được sử dụng cho các mục đích thử nghiệm.

Cấu trúc của CURP

Một CURP bao gồm 18 ký tự theo định dạng sau:

  1. Chữ cái đầu tiên của họ cha
  2. Nguyên âm đầu tiên của họ cha (không bao gồm chữ cái đầu tiên)
  3. Chữ cái đầu tiên của họ mẹ
  4. Chữ cái đầu tiên của tên 5-10. Ngày sinh (định dạng YYMMDD)
  5. Giới tính (H cho nam, M cho nữ) 12-13. Mã hai chữ cái cho tiểu bang sinh 14-16. Phụ âm nội bộ đầu tiên của từng thành phần tên (họ cha, họ mẹ, tên)
  6. Chữ số phân biệt (0-9 cho những người sinh trước năm 2000, A-Z cho những người sinh từ năm 2000 trở đi)
  7. Chữ số kiểm tra (0-9)

Thuật toán để tạo CURP ngẫu nhiên

  1. Tạo các chữ cái ngẫu nhiên cho các thành phần tên
  2. Tạo một ngày sinh ngẫu nhiên
  3. Chọn ngẫu nhiên giới tính
  4. Chọn ngẫu nhiên một mã tiểu bang hợp lệ
  5. Tạo các phụ âm ngẫu nhiên cho các thành phần tên nội bộ
  6. Xác định chữ số phân biệt dựa trên năm sinh
  7. Tính toán chữ số kiểm tra
  8. Kết hợp tất cả các thành phần để tạo thành CURP

Quy tắc xác thực

  • Tất cả các ký tự chữ cái phải viết hoa
  • Ngày sinh phải là một ngày hợp lệ (bao gồm cả việc xem xét năm nhuận)
  • Mã tiểu bang phải là mã tiểu bang Mexico hợp lệ
  • Chữ số phân biệt phải tương ứng với năm sinh
  • Chữ số kiểm tra phải được tính toán chính xác
  • Xử lý các trường hợp đặc biệt cho tên (ví dụ: họ có một chữ cái, tên có chữ cái Ñ)

Các trường hợp sử dụng

  1. Kiểm tra phần mềm: Các nhà phát triển có thể sử dụng công cụ này để tạo ra các CURP hợp lệ cho việc thử nghiệm hệ thống đăng ký người dùng, hoạt động cơ sở dữ liệu, hoặc bất kỳ phần mềm nào yêu cầu đầu vào CURP.

  2. Bảo mật dữ liệu: Khi trình bày phần mềm hoặc trình bày dữ liệu, việc sử dụng CURP ngẫu nhiên giúp bảo vệ quyền riêng tư của cá nhân.

  3. Kiểm tra hiệu suất: Tạo ra các tập hợp CURP độc nhất lớn để kiểm tra hiệu suất hệ thống dưới tải.

  4. Đào tạo và giáo dục: Sử dụng CURP được tạo ra trong tài liệu giáo dục về các hệ thống nhận dạng của Mexico mà không sử dụng dữ liệu cá nhân thực.

Lịch sử của CURP ở Mexico

Hệ thống CURP được giới thiệu vào năm 1996 bởi chính phủ Mexico như một phần trong nỗ lực hiện đại hóa và chuẩn hóa nhận dạng cá nhân. Nó đã thay thế nhiều hệ thống nhận dạng khác nhau và trở thành một yếu tố quan trọng trong bộ máy hành chính Mexico, được sử dụng cho mọi thứ từ việc đăng ký trường học đến khai thuế.

Trong những năm qua, hệ thống CURP đã trải qua một số sửa đổi:

  • Năm 2011, chữ số phân biệt được giới thiệu để phân biệt giữa những người sinh trước và sau năm 2000.
  • Năm 2012, thuật toán tính toán chữ số kiểm tra đã được sửa đổi để cải thiện tính độc nhất.

Ví dụ

Dưới đây là các ví dụ mã để tạo CURP ngẫu nhiên trong nhiều ngôn ngữ lập trình khác nhau:

import random
import string
from datetime import datetime, timedelta

def generate_curp():
    # Tạo các thành phần tên
    paternal = random.choice(string.ascii_uppercase) + random.choice('AEIOU')
    maternal = random.choice(string.ascii_uppercase)
    given = random.choice(string.ascii_uppercase)

    # Tạo ngày sinh
    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")

    # Tạo giới tính
    gender = random.choice(['H', 'M'])

    # Tạo mã tiểu bang
    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)

    # Tạo phụ âm
    consonants = ''.join(random.choices(string.ascii_uppercase.translate(str.maketrans('', '', 'AEIOU')), k=3))

    # Tạo chữ số phân biệt
    diff_digit = random.choice(string.digits) if int(date_str[:2]) < 20 else random.choice(string.ascii_uppercase)

    # Tạo chữ số kiểm tra (đơn giản hóa cho ví dụ này)
    check_digit = random.choice(string.digits)

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

## Tạo và in ra một CURP ngẫu nhiên
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}`;
}

// Tạo và ghi lại một CURP ngẫu nhiên
console.log(generateCURP());

Các lựa chọn thay thế ở các quốc gia khác

Trong khi CURP là duy nhất cho Mexico, các quốc gia khác có các hệ thống nhận dạng tương tự:

  1. Hoa Kỳ: Số An sinh xã hội (SSN)
  2. Canada: Số Bảo hiểm xã hội (SIN)
  3. Ấn Độ: Số Aadhaar
  4. Brazil: Cadastro de Pessoas Físicas (CPF)

Mỗi hệ thống có cấu trúc và quy tắc riêng, nhưng chúng phục vụ các mục đích tương tự ở các quốc gia tương ứng.

Tài liệu tham khảo

  1. SEGOB (Secretaría de Gobernación). "CURP - Trámites." Gobierno de México, https://www.gob.mx/curp/. Truy cập ngày 4 tháng 8 năm 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. Truy cập ngày 4 tháng 8 năm 2024.
Feedback