🛠️

Whiz Tools

Build • Create • Innovate

أداة توليد والتحقق من CUIT/CUIL الأرجنتيني

قم بإنشاء أرقام CUIT/CUIL الأرجنتينية الصالحة للاختبار أو تحقق من الأرقام الموجودة. أداة بسيطة للمطورين الذين يعملون مع أرقام التعريف الضريبي وعملية العمل الأرجنتينية.

مولد CUIT/CUIL

أدخل رقم DNI مكون من 8 أرقام أو استخدم مولد عشوائي

CUIT/CUIL المولد

📚

الوثائق

مولد ومحقق رقم CUIT/CUIL الأرجنتيني

المقدمة

رقم CUIT (Clave Única de Identificación Tributaria) ورقم CUIL (Clave Única de Identificación Laboral) هما أرقام تعريف فريدة تستخدم في الأرجنتين لأغراض ضريبية وعمالية، على التوالي. هذه الرموز المكونة من 11 رقمًا ضرورية للأفراد والشركات للعمل بشكل قانوني ضمن النظام الاقتصادي الأرجنتيني. توفر أداة مولد ومحقق CUIT/CUIL لدينا وسيلة بسيطة وفعالة لتوليد أرقام CUIT/CUIL صالحة لأغراض الاختبار والتحقق من الأرقام الموجودة لضمان توافقها مع التنسيق الرسمي وخوارزمية التحقق.

سواء كنت مطورًا تختبر التطبيقات التي تتعامل مع معرفات الضرائب الأرجنتينية، أو متخصصًا في ضمان الجودة يتحقق من وظائف النظام، أو تحتاج ببساطة إلى فهم كيفية عمل هذه الأرقام التعريفية، تقدم هذه الأداة حلاً مباشرًا بدون تعقيدات غير ضرورية. تحتوي الأداة على وظيفتين رئيسيتين: مولد ينشئ أرقام CUIT/CUIL صالحة عشوائيًا أو بناءً على معلمات محددة، ومحقق يتحقق مما إذا كان رقم CUIT/CUIL المعطى يتبع التنسيق الصحيح وقواعد الحساب.

هيكل CUIT/CUIL والحساب

فهم التنسيق

يتكون رقم CUIT/CUIL صالح من 11 رقمًا يتم عرضها عادةً بالتنسيق XX-XXXXXXXX-X:

  1. رمز النوع (أول رقمين): يشير إلى نوع الكيان

    • 20، 23، 24: الأفراد الذكور (CUIL)
    • 27: الأفراد الإناث (CUIL)
    • 30، 33، 34: الشركات والمنظمات (CUIT)
  2. رقم DNI (وسط 8 أرقام): بالنسبة للأفراد، هو رقم وثيقة الهوية الوطنية (DNI)، مملوء بالأصفار في المقدمة إذا لزم الأمر للوصول إلى 8 أرقام. بالنسبة للشركات، هو رقم فريد مُعين.

  3. رقم التحقق (آخر رقم): رقم تحقق يتم حسابه باستخدام خوارزمية محددة للتحقق من الرقم بالكامل.

حساب رقم التحقق

يتم حساب رقم التحقق باستخدام الخوارزمية التالية:

  1. خذ الأرقام العشرة الأولى من CUIT/CUIL (رمز النوع + DNI)
  2. اضرب كل رقم بوزن مطابق من هذه السلسلة: 5، 4، 3، 2، 7، 6، 5، 4، 3، 2
  3. اجمع جميع المنتجات الناتجة
  4. احسب 11 ناقص باقي قسمة المجموع على 11
  5. إذا كانت النتيجة 11، فإن رقم التحقق هو 0
  6. إذا كانت النتيجة 10، فإن رقم التحقق هو 9
  7. بخلاف ذلك، تكون النتيجة هي رقم التحقق

يمكن التعبير عن ذلك رياضيًا كما يلي:

VD=11((i=110di×wi)mod11)VD = 11 - ((\sum_{i=1}^{10} d_i \times w_i) \bmod 11)

حيث:

  • VDVD هو رقم التحقق
  • did_i هو الرقم ii-th من الأرقام العشرة الأولى
  • wiw_i هو الوزن المطابق من السلسلة [5، 4، 3، 2، 7، 6، 5، 4، 3، 2]
  • حالات خاصة: إذا كان VD=11VD = 11 فإن VD=0VD = 0، إذا كان VD=10VD = 10 فإن VD=9VD = 9

دليل خطوة بخطوة

استخدام المولد

  1. اختر علامة التبويب "المولد" في أعلى واجهة الأداة.

  2. اختر رمز النوع من قائمة السحب:

    • 20: ذكر (CUIL)
    • 23: عمل (CUIT)
    • 24: عمل مؤقت (CUIT)
    • 27: أنثى (CUIL)
    • 30: شركة (CUIT)
    • 33: جمعية مدنية (CUIT)
    • 34: مؤسسة (CUIT)
  3. أدخل رقم DNI (اختياري):

    • أدخل رقم DNI مكون من 8 أرقام في الحقل المخصص
    • إذا تركت فارغًا، ستستخدم الأداة رقم DNI مُولد عشوائيًا
    • إذا أدخلت أقل من 8 أرقام، سيقوم النظام بإضافة أصفار في المقدمة
  4. توليد DNI عشوائي (اختياري):

    • انقر على زر "عشوائي" لتوليد رقم DNI مكون من 8 أرقام عشوائيًا
  5. عرض CUIT/CUIL المُولد:

    • تعرض الأداة تلقائيًا رقم CUIT/CUIL صالح بناءً على مدخلاتك
    • سيكون التنسيق XX-XXXXXXXX-X مع رقم التحقق الصحيح
  6. نسخ النتيجة:

    • انقر على أيقونة النسخ لنسخ CUIT/CUIL المُولد إلى الحافظة الخاصة بك
    • ستظهر رسالة تأكيد عند النسخ بنجاح

استخدام المحقق

  1. اختر علامة التبويب "المحقق" في أعلى واجهة الأداة.

  2. أدخل CUIT/CUIL للتحقق:

    • أدخل CUIT/CUIL بالتنسيق XX-XXXXXXXX-X
    • ستقوم الأداة تلقائيًا بتنسيق مدخلاتك مع الشرطات أثناء الكتابة
    • يمكنك أيضًا إدخال الرقم بدون شرطات (XXXXXXXXXXX)
  3. انقر على زر "التحقق":

    • ستتحقق الأداة من التنسيق، رمز النوع، ورقم التحقق
  4. عرض نتيجة التحقق:

    • بالنسبة لأرقام CUIT/CUIL الصالحة، ستظهر رسالة نجاح باللون الأخضر
    • بالنسبة للأرقام غير الصالحة، ستظهر رسالة خطأ باللون الأحمر تشرح المشكلة:
      • تنسيق غير صالح (يجب أن يكون XX-XXXXXXXX-X)
      • رمز نوع غير صالح (يجب أن يكون واحدًا من: 20، 23، 24، 27، 30، 33، 34)
      • رقم تحقق غير صالح
  5. معلومات إضافية:

    • بالنسبة للأرقام الصالحة، تعرض الأداة تحليلًا لمكونات الرقم:
      • رمز النوع ومعناه
      • رقم DNI
      • رقم التحقق

حالات الاستخدام

التطوير والاختبار

  1. تطوير البرمجيات: توليد أرقام CUIT/CUIL صالحة لاختبار التطبيقات التي تتعامل مع معرفات الضرائب الأرجنتينية، مثل:

    • منصات التجارة الإلكترونية
    • برامج المحاسبة
    • أنظمة إدارة الموارد البشرية
    • بوابات الخدمات الحكومية
    • تطبيقات البنوك
  2. تعبئة قاعدة البيانات: إنشاء بيانات اختبار واقعية للأنظمة التي تخزن معلومات المستخدمين الأرجنتينيين، مما يضمن أن قيود قاعدة البيانات وقواعد التحقق تعمل بشكل صحيح.

  3. اختبار التحقق من النموذج: اختبار التحقق من المدخلات لنماذج الويب التي تجمع معلومات CUIT/CUIL، والتحقق من ظهور رسائل الخطأ المناسبة للإدخالات غير الصالحة.

  4. اختبار واجهة برمجة التطبيقات: توليد حمولات صالحة لنقاط نهاية واجهة برمجة التطبيقات التي تتطلب أرقام CUIT/CUIL، مما يضمن أن اختبارات التكامل الخاصة بك تستخدم بيانات صالحة.

  5. أتمتة ضمان الجودة: دمج توليد CUIT/CUIL في نصوص الاختبار الآلي لإنشاء حالات اختبار ديناميكية بدلاً من استخدام بيانات اختبار ثابتة.

الأغراض التعليمية

  1. تعلم خوارزميات التحقق: فهم كيفية عمل خوارزميات الأرقام المراقبة في الممارسة العملية من خلال رؤية عملية التحقق من CUIT/CUIL في العمل.

  2. تعليم تقنيات التحقق من البيانات: استخدام كأمثلة تعليمية عند تعليم تقنيات التحقق من النموذج للمطورين الجدد.

  3. فهم متطلبات الأعمال الأرجنتينية: التعرف على نظام التعريف المستخدم في الأرجنتين لتطوير الأعمال الدولية.

البدائل

بينما توفر أداتنا وسيلة مباشرة لتوليد والتحقق من أرقام CUIT/CUIL، هناك طرق بديلة قد تفكر فيها:

  1. التحقق الرسمي من الحكومة: في البيئات الإنتاجية، تحقق دائمًا من أرقام CUIT/CUIL ضد قاعدة بيانات AFIP (Administración Federal de Ingresos Públicos) الرسمية عند الإمكان.

  2. المكتبات والحزم: تحتوي العديد من لغات البرمجة على مكتبات مصممة خصيصًا للتحقق من معرفات الضرائب الأرجنتينية:

    • JavaScript: حزمة npm validar-cuit
    • PHP: مكتبة afip-php
    • Python: حزمة py-cuit
  3. الحساب اليدوي: لأغراض تعليمية، يمكنك حساب رقم التحقق يدويًا باستخدام الخوارزمية الموضحة سابقًا.

  4. خدمات التحقق من الأعمال الشاملة: لتطبيقات المؤسسات، ضع في اعتبارك استخدام خدمات التحقق الشاملة التي لا تتحقق فقط من التنسيق ولكن أيضًا تتحقق من وجود وحالة الكيان المرتبط برقم CUIT/CUIL.

تاريخ نظام CUIT/CUIL

تطور نظام التعريف CUIT/CUIL في الأرجنتين بشكل كبير منذ بدايته:

الأصول والتنفيذ

تم تقديم CUIT (Clave Única de Identificación Tributaria) لأول مرة في الأرجنتين في السبعينيات كجزء من الجهود الرامية إلى تحديث نظام جمع الضرائب. نفذت الإدارة الفيدرالية للإيرادات العامة (AFIP) هذا المعرف الفريد لتتبع دافعي الضرائب بشكل أكثر كفاءة وتقليل التهرب الضريبي.

تم تقديم CUIL (Clave Única de Identificación Laboral) لاحقًا لتحديد العمال بشكل خاص في نظام الضمان الاجتماعي، مما خلق تمييزًا بين التعريف الضريبي والتعريف العمالي مع الحفاظ على تنسيق متسق.

التطور والرقمنة

في التسعينيات، مع حدوث إصلاحات اقتصادية كبيرة في الأرجنتين، أصبح نظام CUIT/CUIL أكثر أهمية لتتبع النشاط الاقتصادي. تم رقمنة النظام بشكل أكبر، وتم تنفيذ أنظمة تحقق عبر الإنترنت.

شهدت أوائل العقد الأول من القرن الحادي والعشرين دمج نظام CUIT/CUIL مع مجموعة متنوعة من خدمات الحكومة الرقمية، مما جعله عنصرًا أساسيًا في مبادرات الحكومة الإلكترونية في الأرجنتين. كما شهدت هذه الفترة توحيد خوارزمية التحقق والتنسيق الذي لا يزال مستخدمًا اليوم.

التطورات الأخيرة

في السنوات الأخيرة، عززت AFIP عمليات التحقق والأمان لأرقام CUIT/CUIL، حيث نفذت أنظمة تحقق أكثر تعقيدًا ودمجتها مع قواعد بيانات حكومية أخرى. يلعب النظام الآن دورًا حاسمًا في جهود الأرجنتين لمكافحة التهرب الضريبي وتشكيل الاقتصاد.

اليوم، يُستخدم CUIT/CUIL ليس فقط لأغراض الضرائب والعمل ولكن أيضًا لمجموعة واسعة من الأنشطة بما في ذلك الخدمات المصرفية، والمعاملات العقارية، وخدمات المرافق، والمشتريات عبر الإنترنت، مما يجعله معرفًا أساسيًا للأفراد والشركات التي تعمل في الأرجنتين.

أمثلة على الشيفرة

بايثون

1def calculate_verification_digit(type_code, dni):
2    # تحويل إلى سلسلة وضمان أن DNI مكون من 8 أرقام مع الأصفار في المقدمة
3    type_code_str = str(type_code)
4    dni_str = str(dni).zfill(8)
5    
6    # دمج رمز النوع وDNI
7    digits = type_code_str + dni_str
8    
9    # الأوزان لكل موضع
10    weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
11    
12    # حساب مجموع المنتجات
13    sum_products = sum(int(digits[i]) * weights[i] for i in range(10))
14    
15    # حساب رقم التحقق
16    verification_digit = 11 - (sum_products % 11)
17    
18    # حالات خاصة
19    if verification_digit == 11:
20        verification_digit = 0
21    elif verification_digit == 10:
22        verification_digit = 9
23    
24    return verification_digit
25
26def generate_cuit_cuil(type_code, dni=None):
27    import random
28    
29    # رموز النوع الصالحة
30    valid_type_codes = [20, 23, 24, 27, 30, 33, 34]
31    
32    if type_code not in valid_type_codes:
33        raise ValueError(f"رمز النوع غير صالح. يجب أن يكون واحدًا من: {valid_type_codes}")
34    
35    # توليد DNI عشوائي إذا لم يتم تقديمه
36    if dni is None:
37        dni = random.randint(10000000, 99999999)
38    
39    # حساب رقم التحقق
40    verification_digit = calculate_verification_digit(type_code, dni)
41    
42    # تنسيق CUIT/CUIL
43    return f"{type_code}-{str(dni).zfill(8)}-{verification_digit}"
44
45def validate_cuit_cuil(cuit_cuil):
46    # إزالة الشرطات إذا كانت موجودة
47    cuit_cuil_clean = cuit_cuil.replace("-", "")
48    
49    # تحقق من التنسيق الأساسي
50    if not cuit_cuil_clean.isdigit() or len(cuit_cuil_clean) != 11:
51        return False, "تنسيق غير صالح"
52    
53    # استخراج الأجزاء
54    type_code = int(cuit_cuil_clean[0:2])
55    dni = int(cuit_cuil_clean[2:10])
56    verification_digit = int(cuit_cuil_clean[10])
57    
58    # التحقق من رمز النوع
59    valid_type_codes = [20, 23, 24, 27, 30, 33, 34]
60    if type_code not in valid_type_codes:
61        return False, "رمز النوع غير صالح"
62    
63    # حساب ومقارنة رقم التحقق
64    calculated_digit = calculate_verification_digit(type_code, dni)
65    if calculated_digit != verification_digit:
66        return False, "رقم التحقق غير صالح"
67    
68    return True, "CUIT/CUIL صالح"
69
70# مثال للاستخدام
71print(generate_cuit_cuil(20, 12345678))  # توليد لDNI محدد
72print(generate_cuit_cuil(27))  # توليد مع DNI عشوائي
73print(validate_cuit_cuil("20-12345678-9"))  # التحقق من CUIT/CUIL
74

جافا سكريبت

1function calculateVerificationDigit(typeCode, dni) {
2  // تحويل إلى سلسلة وضمان أن DNI مكون من 8 أرقام مع الأصفار في المقدمة
3  const typeCodeStr = typeCode.toString();
4  const dniStr = dni.toString().padStart(8, '0');
5  
6  // دمج رمز النوع وDNI
7  const digits = typeCodeStr + dniStr;
8  
9  // الأوزان لكل موضع
10  const weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
11  
12  // حساب مجموع المنتجات
13  let sumProducts = 0;
14  for (let i = 0; i < 10; i++) {
15    sumProducts += parseInt(digits[i]) * weights[i];
16  }
17  
18  // حساب رقم التحقق
19  let verificationDigit = 11 - (sumProducts % 11);
20  
21  // حالات خاصة
22  if (verificationDigit === 11) {
23    verificationDigit = 0;
24  } else if (verificationDigit === 10) {
25    verificationDigit = 9;
26  }
27  
28  return verificationDigit;
29}
30
31function generateCuitCuil(typeCode, dni) {
32  // رموز النوع الصالحة
33  const validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
34  
35  if (!validTypeCodes.includes(typeCode)) {
36    throw new Error(`رمز النوع غير صالح. يجب أن يكون واحدًا من: ${validTypeCodes.join(', ')}`);
37  }
38  
39  // توليد DNI عشوائي إذا لم يتم تقديمه
40  if (dni === undefined) {
41    dni = Math.floor(Math.random() * 90000000) + 10000000;
42  }
43  
44  // حساب رقم التحقق
45  const verificationDigit = calculateVerificationDigit(typeCode, dni);
46  
47  // تنسيق CUIT/CUIL
48  return `${typeCode}-${dni.toString().padStart(8, '0')}-${verificationDigit}`;
49}
50
51function validateCuitCuil(cuitCuil) {
52  // إزالة الشرطات إذا كانت موجودة
53  const cuitCuilClean = cuitCuil.replace(/-/g, '');
54  
55  // تحقق من التنسيق الأساسي
56  if (!/^\d{11}$/.test(cuitCuilClean)) {
57    return { isValid: false, errorMessage: 'تنسيق غير صالح' };
58  }
59  
60  // استخراج الأجزاء
61  const typeCode = parseInt(cuitCuilClean.substring(0, 2));
62  const dni = parseInt(cuitCuilClean.substring(2, 10));
63  const verificationDigit = parseInt(cuitCuilClean.substring(10, 11));
64  
65  // التحقق من رمز النوع
66  const validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
67  if (!validTypeCodes.includes(typeCode)) {
68    return { isValid: false, errorMessage: 'رمز النوع غير صالح' };
69  }
70  
71  // حساب ومقارنة رقم التحقق
72  const calculatedDigit = calculateVerificationDigit(typeCode, dni);
73  if (calculatedDigit !== verificationDigit) {
74    return { isValid: false, errorMessage: 'رقم التحقق غير صالح' };
75  }
76  
77  return { isValid: true };
78}
79
80// مثال للاستخدام
81console.log(generateCuitCuil(20, 12345678)); // توليد لDNI محدد
82console.log(generateCuitCuil(27)); // توليد مع DNI عشوائي
83console.log(validateCuitCuil("20-12345678-9")); // التحقق من CUIT/CUIL
84

جافا

1import java.util.Arrays;
2import java.util.List;
3import java.util.Random;
4
5public class CuitCuilUtils {
6    private static final List<Integer> VALID_TYPE_CODES = Arrays.asList(20, 23, 24, 27, 30, 33, 34);
7    private static final int[] WEIGHTS = {5, 4, 3, 2, 7, 6, 5, 4, 3, 2};
8    
9    public static int calculateVerificationDigit(int typeCode, int dni) {
10        // تحويل إلى سلسلة وضمان أن DNI مكون من 8 أرقام مع الأصفار في المقدمة
11        String typeCodeStr = String.valueOf(typeCode);
12        String dniStr = String.format("%08d", dni);
13        
14        // دمج رمز النوع وDNI
15        String digits = typeCodeStr + dniStr;
16        
17        // حساب مجموع المنتجات
18        int sumProducts = 0;
19        for (int i = 0; i < 10; i++) {
20            sumProducts += Character.getNumericValue(digits.charAt(i)) * WEIGHTS[i];
21        }
22        
23        // حساب رقم التحقق
24        int verificationDigit = 11 - (sumProducts % 11);
25        
26        // حالات خاصة
27        if (verificationDigit == 11) {
28            verificationDigit = 0;
29        } else if (verificationDigit == 10) {
30            verificationDigit = 9;
31        }
32        
33        return verificationDigit;
34    }
35    
36    public static String generateCuitCuil(int typeCode, Integer dni) {
37        if (!VALID_TYPE_CODES.contains(typeCode)) {
38            throw new IllegalArgumentException("رمز النوع غير صالح. يجب أن يكون واحدًا من: " + VALID_TYPE_CODES);
39        }
40        
41        // توليد DNI عشوائي إذا لم يتم تقديمه
42        if (dni == null) {
43            Random random = new Random();
44            dni = 10000000 + random.nextInt(90000000);
45        }
46        
47        // حساب رقم التحقق
48        int verificationDigit = calculateVerificationDigit(typeCode, dni);
49        
50        // تنسيق CUIT/CUIL
51        return String.format("%d-%08d-%d", typeCode, dni, verificationDigit);
52    }
53    
54    public static ValidationResult validateCuitCuil(String cuitCuil) {
55        // إزالة الشرطات إذا كانت موجودة
56        String cuitCuilClean = cuitCuil.replace("-", "");
57        
58        // تحقق من التنسيق الأساسي
59        if (!cuitCuilClean.matches("\\d{11}")) {
60            return new ValidationResult(false, "تنسيق غير صالح");
61        }
62        
63        // استخراج الأجزاء
64        int typeCode = Integer.parseInt(cuitCuilClean.substring(0, 2));
65        int dni = Integer.parseInt(cuitCuilClean.substring(2, 10));
66        int verificationDigit = Integer.parseInt(cuitCuilClean.substring(10, 11));
67        
68        // التحقق من رمز النوع
69        if (!VALID_TYPE_CODES.contains(typeCode)) {
70            return new ValidationResult(false, "رمز النوع غير صالح");
71        }
72        
73        // حساب ومقارنة رقم التحقق
74        int calculatedDigit = calculateVerificationDigit(typeCode, dni);
75        if (calculatedDigit != verificationDigit) {
76            return new ValidationResult(false, "رقم التحقق غير صالح");
77        }
78        
79        return new ValidationResult(true, null);
80    }
81    
82    public static class ValidationResult {
83        private final boolean isValid;
84        private final String errorMessage;
85        
86        public ValidationResult(boolean isValid, String errorMessage) {
87            this.isValid = isValid;
88            this.errorMessage = errorMessage;
89        }
90        
91        public boolean isValid() {
92            return isValid;
93        }
94        
95        public String getErrorMessage() {
96            return errorMessage;
97        }
98    }
99    
100    public static void main(String[] args) {
101        // مثال للاستخدام
102        System.out.println(generateCuitCuil(20, 12345678)); // توليد لDNI محدد
103        System.out.println(generateCuitCuil(27, null)); // توليد مع DNI عشوائي
104        System.out.println(validateCuitCuil("20-12345678-9").isValid()); // التحقق من CUIT/CUIL
105    }
106}
107

PHP

1<?php
2
3function calculateVerificationDigit($typeCode, $dni) {
4    // تحويل إلى سلسلة وضمان أن DNI مكون من 8 أرقام مع الأصفار في المقدمة
5    $typeCodeStr = (string)$typeCode;
6    $dniStr = str_pad((string)$dni, 8, '0', STR_PAD_LEFT);
7    
8    // دمج رمز النوع وDNI
9    $digits = $typeCodeStr . $dniStr;
10    
11    // الأوزان لكل موضع
12    $weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
13    
14    // حساب مجموع المنتجات
15    $sumProducts = 0;
16    for ($i = 0; $i < 10; $i++) {
17        $sumProducts += (int)$digits[$i] * $weights[$i];
18    }
19    
20    // حساب رقم التحقق
21    $verificationDigit = 11 - ($sumProducts % 11);
22    
23    // حالات خاصة
24    if ($verificationDigit == 11) {
25        $verificationDigit = 0;
26    } else if ($verificationDigit == 10) {
27        $verificationDigit = 9;
28    }
29    
30    return $verificationDigit;
31}
32
33function generateCuitCuil($typeCode, $dni = null) {
34    // رموز النوع الصالحة
35    $validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
36    
37    if (!in_array($typeCode, $validTypeCodes)) {
38        throw new Exception("رمز النوع غير صالح. يجب أن يكون واحدًا من: " . implode(', ', $validTypeCodes));
39    }
40    
41    // توليد DNI عشوائي إذا لم يتم تقديمه
42    if ($dni === null) {
43        $dni = rand(10000000, 99999999);
44    }
45    
46    // حساب رقم التحقق
47    $verificationDigit = calculateVerificationDigit($typeCode, $dni);
48    
49    // تنسيق CUIT/CUIL
50    return sprintf("%d-%08d-%d", $typeCode, $dni, $verificationDigit);
51}
52
53function validateCuitCuil($cuitCuil) {
54    // إزالة الشرطات إذا كانت موجودة
55    $cuitCuilClean = str_replace('-', '', $cuitCuil);
56    
57    // تحقق من التنسيق الأساسي
58    if (!preg_match('/^\d{11}$/', $cuitCuilClean)) {
59        return ['isValid' => false, 'errorMessage' => 'تنسيق غير صالح'];
60    }
61    
62    // استخراج الأجزاء
63    $typeCode = (int)substr($cuitCuilClean, 0, 2);
64    $dni = (int)substr($cuitCuilClean, 2, 8);
65    $verificationDigit = (int)substr($cuitCuilClean, 10, 1);
66    
67    // التحقق من رمز النوع
68    $validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
69    if (!in_array($typeCode, $validTypeCodes)) {
70        return ['isValid' => false, 'errorMessage' => 'رمز النوع غير صالح'];
71    }
72    
73    // حساب ومقارنة رقم التحقق
74    $calculatedDigit = calculateVerificationDigit($typeCode, $dni);
75    if ($calculatedDigit !== $verificationDigit) {
76        return ['isValid' => false, 'errorMessage' => 'رقم التحقق غير صالح'];
77    }
78    
79    return ['isValid' => true];
80}
81
82// مثال للاستخدام
83echo generateCuitCuil(20, 12345678) . "\n"; // توليد لDNI محدد
84echo generateCuitCuil(27) . "\n"; // توليد مع DNI عشوائي
85var_dump(validateCuitCuil("20-12345678-9")); // التحقق من CUIT/CUIL
86?>
87

الأسئلة الشائعة

ما الفرق بين CUIT و CUIL؟

CUIT (Clave Única de Identificación Tributaria) يُستخدم لأغراض التعريف الضريبي ويُعطى لكل من الأفراد والكيانات القانونية التي تحتاج إلى دفع الضرائب في الأرجنتين. CUIL (Clave Única de Identificación Laboral) مُخصص بشكل خاص للعمال ويُستخدم لأغراض العمل والضمان الاجتماعي. على الرغم من أنهما يشتركان في نفس التنسيق وخوارزمية الحساب، إلا أنهما يخدمان أغراضًا إدارية مختلفة.

أي رموز نوع تُستخدم للأفراد وأيها للشركات؟

بالنسبة للأفراد:

  • 20، 23، 24: الأفراد الذكور (CUIL)
  • 27: الأفراد الإناث (CUIL)

بالنسبة للشركات والمنظمات:

  • 30: الشركات (CUIT)
  • 33: الجمعيات المدنية (CUIT)
  • 34: المؤسسات (CUIT)

كيف يتم حساب رقم التحقق؟

يتم حساب رقم التحقق باستخدام خوارزمية مجموع الأوزان. يتم ضرب كل من الأرقام العشرة الأولى بوزن مطابق (5، 4، 3، 2، 7، 6، 5، 4، 3، 2)، ويتم جمع النتائج. رقم التحقق هو 11 ناقص باقي قسمة هذا المجموع على 11. حالات خاصة: إذا كانت النتيجة 11، فإن رقم التحقق هو 0؛ إذا كانت النتيجة 10، فإن رقم التحقق هو 9.

هل يمكنني استخدام هذه الأداة لتوليد أرقام CUIT/CUIL حقيقية ورسمية؟

لا، هذه الأداة مصممة لأغراض الاختبار والتعليم فقط. الأرقام المُولدة صالحة رياضيًا وفقًا لخوارزمية CUIT/CUIL ولكنها غير مسجلة رسميًا لدى السلطات الضريبية الأرجنتينية (AFIP). للتسجيل الرسمي لرقم CUIT/CUIL، يجب على الأفراد والشركات اتباع الإجراءات القانونية المناسبة من خلال AFIP.

لماذا تفشل عملية التحقق من CUIT/CUIL الخاصة بي على الرغم من أن التنسيق يبدو صحيحًا؟

يمكن أن تفشل عملية التحقق لعدة أسباب:

  1. رمز النوع ليس واحدًا من الرموز الصالحة (20، 23، 24، 27، 30، 33، 34)
  2. رقم التحقق لا يتطابق مع القيمة المحسوبة بناءً على الخوارزمية
  3. التنسيق غير صحيح (يجب أن يكون XX-XXXXXXXX-X)
  4. هناك أحرف غير رقمية في المدخلات (بخلاف الشرطات)

هل الشرطات مطلوبة في أرقام CUIT/CUIL؟

بينما تُكتب وتُعرض أرقام CUIT/CUIL عادةً مع الشرطات (XX-XXXXXXXX-X)، فإن الشرطات ليست جزءًا من الرقم الفعلي لأغراض الحساب. يقبل المحقق لدينا كلا التنسيقين (مع أو بدون شرطات) وسيتحقق بشكل صحيح من أي تنسيق.

هل يمكن أن يحتوي رقم CUIT/CUIL على أقل من 8 أرقام في جزء DNI؟

لا، يجب أن يتكون جزء DNI دائمًا من 8 أرقام بالضبط. إذا كان رقم DNI الفعلي يحتوي على أقل من 8 أرقام، يجب ملؤه بالأصفار في المقدمة للوصول إلى 8 أرقام. على سبيل المثال، إذا كان رقم DNI لشخص ما هو 1234567، فسيتم تمثيله في CUIT/CUIL كـ 01234567.

كيف يمكنني التحقق مما إذا كان CUIT/CUIL مسجلاً رسميًا في الأرجنتين؟

للتحقق مما إذا كان CUIT/CUIL مسجلاً رسميًا ونشطًا، يجب عليك استخدام الموقع الرسمي لـ AFIP (Administración Federal de Ingresos Públicos) أو خدماتها. تقوم أداتنا فقط بالتحقق من الصلاحية الرياضية للرقم، وليس من حالة تسجيله الرسمي.

هل يمكنني استخدام هذه الأداة في تطبيقي التجاري؟

نعم، يمكنك دمج الخوارزمية والمنطق الموضحين في هذه الأداة في تطبيقاتك التجارية. تعتبر خوارزمية التحقق من CUIT/CUIL معيارًا عامًا. ومع ذلك، في البيئات الإنتاجية، نوصي بتنفيذ معالجة الأخطاء المناسبة والنظر في التحقق الإضافي ضد المصادر الرسمية عند الضرورة.

هل تقوم الأداة بتخزين أي من أرقام CUIT/CUIL المُولدة أو المُتحققة؟

لا، هذه الأداة لا تخزن أي من المعلومات المدخلة أو المُولدة. يتم إجراء جميع المعالجة على جانب العميل في متصفحك، ولا يتم إرسال أي بيانات إلى أو تخزينها على خوادمنا. يضمن ذلك خصوصية وأمان أي معلومات تدخلها.

المراجع

  1. AFIP (Administración Federal de Ingresos Públicos). "CUIT/CUIL/CDI." الموقع الرسمي. https://www.afip.gob.ar/

  2. وزارة العمل، التوظيف والضمان الاجتماعي. "CUIL - Clave Única de Identificación Laboral." https://www.argentina.gob.ar/trabajo

  3. ANSES (الإدارة الوطنية للضمان الاجتماعي). "الحصول على CUIL الخاص بي." https://www.anses.gob.ar/

  4. الجريدة الرسمية لجمهورية الأرجنتين. "القرار العام AFIP 2854/2010: الإجراءات. رقم التعريف الضريبي الفريد (C.U.I.T.)."

  5. القانون الضريبي لجمهورية الأرجنتين. "التعريف والتسجيل لدافعي الضرائب."


هل أنت مستعد لتوليد أو التحقق من أرقام CUIT/CUIL الأرجنتينية؟ جرب أداتنا الآن وسهّل عملية الاختبار الخاصة بك!