Whiz Tools

CURP Generator

Introduction

ה-CURP (Clave Única de Registro de Población) הוא קוד אלפאנומרי ייחודי שמשמש במקסיקו למטרות זיהוי. הכלי הזה יוצר CURPs תקפים ורנדומליים לסנריואים של בדיקות, בהתאם לפורמט ולחוקי האימות הרשמים. חשוב לציין שה-CURPs המיוצרים אינם קשורים לאנשים אמיתיים ויש להשתמש בהם רק למטרות בדיקה.

Structure of 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)

Algorithm for Generating a Random CURP

  1. יצירת אותיות רנדומליות עבור רכיבי השם
  2. יצירת תאריך לידה רנדומלי
  3. בחירת מגדר רנדומלי
  4. בחירת קוד מדינה תקף רנדומלי
  5. יצירת עיצורים רנדומליים עבור רכיבי השם הפנימיים
  6. קביעת ספרת הבחנה על סמך שנת הלידה
  7. חישוב ספרת הבדיקה
  8. שילוב כל הרכיבים ליצירת ה-CURP

Validation Rules

  • כל התווים האלפביתיים חייבים להיות באותיות גדולות
  • תאריך הלידה חייב להיות תאריך תקף (כולל התחשבות בשנה מעוברת)
  • קוד המדינה חייב להיות קוד מדינה מקסיקני תקף
  • ספרת הבחנה חייבת להתאים לשנת הלידה
  • ספרת הבדיקה חייבת להיות מחושבת כהלכה
  • טיפול במקרים מיוחדים עבור שמות (למשל, שמות משפחה באות אחת, שמות עם Ñ)

Use Cases

  1. בדיקות תוכנה: מפתחים יכולים להשתמש בכלי הזה ליצירת CURPs תקפים לצורך בדיקות מערכות רישום משתמשים, פעולות במסד נתונים, או כל תוכנה שדורשת קלט CURP.

  2. פרטיות נתונים: כאשר מדגימים תוכנה או מציגים נתונים, השימוש ב-CURPs שנוצרו רנדומלית עוזר להגן על פרטיות הפרטים.

  3. בדיקות ביצועים: יצירת קבוצות גדולות של CURPs ייחודיים לצורך בדיקת ביצועי המערכת תחת עומס.

  4. הכשרה וחינוך: שימוש ב-CURPs שנוצרו בחומרי לימוד על מערכות זיהוי מקסיקניות מבלי להשתמש בנתונים אישיים אמיתיים.

History of CURP in Mexico

מערכת ה-CURP הוצגה בשנת 1996 על ידי הממשלה המקסיקנית כחלק ממאמצים לייעל ולסטנדרטיזציה של זיהוי אישי. היא החליפה מערכות זיהוי אחרות והפכה לרכיב קרדינלי בבירוקרטיה המקסיקנית, שמשמשת לכל דבר, החל מרישום בבתי ספר ועד הגשת מיסים.

עם השנים, מערכת ה-CURP עברה מספר שינויים:

  • בשנת 2011, ספרת הבחנה הוצגה כדי להבחין בין אנשים שנולדו לפני ואחרי 2000.
  • בשנת 2012, האלגוריתם לחישוב ספרת הבדיקה שונה כדי לשפר את הייחודיות.

Examples

הנה דוגמאות קוד ליצירת CURPs רנדומליים בשפות תכנות שונות:

import random
import string
from datetime import datetime, timedelta

def generate_curp():
    # Generate name components
    paternal = random.choice(string.ascii_uppercase) + random.choice('AEIOU')
    maternal = random.choice(string.ascii_uppercase)
    given = random.choice(string.ascii_uppercase)

    # Generate date of birth
    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")

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

    # Generate state code
    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)

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

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

    # Generate check digit (simplified for this example)
    check_digit = random.choice(string.digits)

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

## Generate and print a random 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}`;
}

// Generate and log a random CURP
console.log(generateCURP());

Alternatives in Other Countries

בעוד שה-CURP ייחודי למקסיקו, מדינות אחרות יש מערכות זיהוי דומות:

  1. ארצות הברית: מספר ביטוח לאומי (SSN)
  2. קנדה: מספר ביטוח חברתי (SIN)
  3. הודו: מספר Aadhaar
  4. ברזיל: Cadastro de Pessoas Físicas (CPF)

כל מערכת יש את המבנה והחוקים שלה, אך הן משרתות מטרות דומות במדינות שלהן.

References

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