🛠️

Whiz Tools

Build • Create • Innovate

Chombo cha Kutunga na Kuhakiki CUIT/CUIL cha Argentina

Tunga nambari halali za CUIT/CUIL za Argentina kwa ajili ya majaribio au hakiki zile zilizopo. Chombo rahisi kwa wabunifu wanaofanya kazi na nambari za utambulisho wa ushuru na ajira za Argentina.

Mwanzo wa CUIT/CUIL

Ingiza nambari ya DNI yenye tarakimu 8 au tumia jenereta ya nasibu

CUIT/CUIL iliyotengenezwa

📚

Hati

Argentinian CUIT/CUIL Generator and Validator

Introduction

Nambari za CUIT (Clave Única de Identificación Tributaria) na CUIL (Clave Única de Identificación Laboral) za Argentina ni nambari maalum za utambulisho zinazotumiwa nchini Argentina kwa madhumuni ya ushuru na ajira, mtawalia. Nambari hizi za tarakimu 11 ni muhimu kwa watu binafsi na biashara kufanya kazi kisheria ndani ya mfumo wa uchumi wa Argentina. Zana yetu ya Generator na Validator ya CUIT/CUIL inatoa njia rahisi na yenye ufanisi ya kuzalisha nambari halali za CUIT/CUIL kwa madhumuni ya majaribio na kuthibitisha nambari zilizopo ili kuhakikisha zinafuata muundo rasmi na kanuni za uthibitishaji.

Iwe wewe ni mende wa programu akijaribu programu zinazoshughulikia vitambulisho vya ushuru vya Argentina, mtaalamu wa QA anayethibitisha utendaji wa mfumo, au unahitaji tu kuelewa jinsi nambari hizi za utambulisho zinavyofanya kazi, zana hii inatoa suluhisho rahisi bila matatizo yasiyo ya lazima. Zana ina kazi mbili kuu: generator inayounda nambari halali za CUIT/CUIL kwa bahati nasibu au kulingana na vigezo maalum, na validator inayothibitisha ikiwa nambari fulani ya CUIT/CUIL inafuata muundo sahihi na sheria za hesabu.

CUIT/CUIL Structure and Calculation

Understanding the Format

Nambari halali ya CUIT/CUIL ina tarakimu 11 ambazo kawaida huonyeshwa katika muundo XX-XXXXXXXX-X:

  1. Nambari ya Aina (tarakimu 2 za kwanza): Inaonyesha aina ya chombo

    • 20, 23, 24: Wanaume binafsi (CUIL)
    • 27: Wanawake binafsi (CUIL)
    • 30, 33, 34: Kampuni na mashirika (CUIT)
  2. Nambari ya DNI (tarakimu 8 za kati): Kwa watu binafsi, hii ni nambari yao ya kitambulisho cha kitaifa (DNI), iliyoongezwa na sifuri za mbele ikiwa inahitajika kufikia tarakimu 8. Kwa kampuni, hii ni nambari ya kipekee iliyotolewa.

  3. Tarakimu ya Uthibitishaji (tarakimu ya mwisho): Tarakimu ya uthibitishaji inayohesabiwa kwa kutumia algorithimu maalum ili kuthibitisha nambari nzima.

Verification Digit Calculation

Tarakimu ya uthibitishaji inahesabiwa kwa kutumia algorithimu ifuatayo:

  1. Chukua tarakimu 10 za kwanza za CUIT/CUIL (nambari ya aina + DNI)
  2. Zidisha kila tarakimu kwa uzito unaolingana kutoka kwa mfuatano huu: 5, 4, 3, 2, 7, 6, 5, 4, 3, 2
  3. Jumlisha bidhaa zote zilizopatikana
  4. Hesabu 11 minus mabaki ya jumla iliyogawanywa kwa 11
  5. Ikiwa matokeo ni 11, tarakimu ya uthibitishaji ni 0
  6. Ikiwa matokeo ni 10, tarakimu ya uthibitishaji ni 9
  7. Vinginevyo, matokeo ni tarakimu ya uthibitishaji

Kihesabu, hii inaweza kuonyeshwa kama:

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

Ambapo:

  • VDVD ni tarakimu ya uthibitishaji
  • did_i ni tarakimu ya ii ya kwanza 10
  • wiw_i ni uzito unaolingana kutoka kwa mfuatano [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
  • Mambo maalum: ikiwa VD=11VD = 11 basi VD=0VD = 0, ikiwa VD=10VD = 10 basi VD=9VD = 9

Step-by-Step Guide

Using the Generator

  1. Chagua kichupo "Generator" katika sehemu ya juu ya kiolesura cha zana.

  2. Chagua Nambari ya Aina kutoka kwenye orodha ya kushuka:

    • 20: Wanaume (CUIL)
    • 23: Biashara (CUIT)
    • 24: Biashara ya muda (CUIT)
    • 27: Wanawake (CUIL)
    • 30: Shirika (CUIT)
    • 33: Chama cha Kiraia (CUIT)
    • 34: Taasisi (CUIT)
  3. Ingiza Nambari ya DNI (hiari):

    • Ingiza nambari ya DNI ya tarakimu 8 katika uwanja uliopewa
    • Ikiwa umeacha tupu, zana itatumia DNI iliyozalishwa kwa bahati nasibu
    • Ikiwa unaingiza tarakimu chini ya 8, mfumo utaongeza sifuri za mbele
  4. Zalisha DNI ya Bahati Nasibu (hiari):

    • Bonyeza kitufe "Random" ili kuzalisha nambari ya DNI ya tarakimu 8 kwa bahati nasibu
  5. Tazama CUIT/CUIL iliyozalishwa:

    • Zana inonyesha moja kwa moja CUIT/CUIL halali kulingana na maingizo yako
    • Muundo utakuwa XX-XXXXXXXX-X na tarakimu sahihi ya uthibitishaji
  6. Nakili Matokeo:

    • Bonyeza ikoni ya nakala ili nakili CUIT/CUIL iliyozalishwa kwenye clipboard yako
    • Ujumbe wa uthibitisho utaonekana wakati umefanikiwa kunakili

Using the Validator

  1. Chagua kichupo "Validator" katika sehemu ya juu ya kiolesura cha zana.

  2. Ingiza CUIT/CUIL ya Kuthibitisha:

    • Ingiza CUIT/CUIL katika muundo XX-XXXXXXXX-X
    • Zana itaweka muundo wa ingizo lako kwa hyphens unavyotunga
    • Unaweza pia kuingiza nambari bila hyphens (XXXXXXXXXXX)
  3. Bonyeza Kitufe "Validate":

    • Zana itakagua muundo, nambari ya aina, na tarakimu ya uthibitishaji
  4. Tazama Matokeo ya Uthibitishaji:

    • Kwa nambari halali za CUIT/CUIL, ujumbe wa mafanikio wa kijani utaonekana
    • Kwa nambari zisizo halali, ujumbe wa kosa wa shaba utaeleza tatizo:
      • Muundo usio sahihi (lazima iwe XX-XXXXXXXX-X)
      • Nambari ya aina isiyo sahihi (lazima iwe moja ya: 20, 23, 24, 27, 30, 33, 34)
      • Tarakimu ya uthibitishaji isiyo sahihi
  5. Taarifa za Ziada:

    • Kwa nambari halali, zana inaonyesha ufafanuzi wa vipengele:
      • Nambari ya aina na maana yake
      • Nambari ya DNI
      • Tarakimu ya uthibitishaji

Use Cases

Development and Testing

  1. Maendeleo ya Programu: Zalisha nambari halali za CUIT/CUIL ili kujaribu programu zinazoshughulikia vitambulisho vya ushuru vya Argentina, kama vile:

    • Majukwaa ya biashara mtandaoni
    • Programu za uhasibu
    • Mifumo ya usimamizi wa HR
    • Tovuti za huduma za serikali
    • Programu za benki
  2. Ujaza Hifadhidata: Unda data halisi za majaribio kwa mifumo inayohifadhi taarifa za watumiaji wa Argentina, kuhakikisha kwamba vizuizi vya hifadhidata na sheria za uthibitishaji zinafanya kazi ipasavyo.

  3. Kujaribu Uthibitishaji wa Fomu: Jaribu uthibitishaji wa ingizo kwa fomu za wavuti zinazokusanya taarifa za CUIT/CUIL, ukithibitisha kwamba ujumbe sahihi wa makosa unaonekana kwa ingizo zisizo sahihi.

  4. Kujaribu API: Zalisha payloads halali kwa mwisho wa API zinazohitaji nambari za CUIT/CUIL, kuhakikisha kwamba majaribio yako ya uunganisho yanatumia data halali.

  5. Automatisering ya QA: Jumuisha uzalishaji wa CUIT/CUIL katika skripti za majaribio ya automatisering ili kuunda kesi za majaribio zinazoendelea badala ya kutumia data za majaribio zisizobadilika.

Educational Purposes

  1. Kujifunza Algorithimu za Uthibitishaji: Elewa jinsi algorithimu za tarakimu za uthibitishaji zinavyofanya kazi kwa vitendo kwa kuona mchakato wa uthibitishaji wa CUIT/CUIL ukiendelea.

  2. Kufundisha Uthibitishaji wa Data: Tumia kama mfano wa kielimu unapofundisha mbinu za uthibitishaji wa fomu kwa waendelezaji wapya.

  3. Kuelewa Mahitaji ya Biashara ya Argentina: Jifunze kuhusu mfumo wa utambulisho unaotumiwa nchini Argentina kwa maendeleo ya biashara za kimataifa.

Alternatives

Ingawa zana yetu inatoa njia rahisi ya kuzalisha na kuthibitisha nambari za CUIT/CUIL, kuna mbinu mbadala unazoweza kuzingatia:

  1. Uthibitishaji wa Serikali Rasmi: Kwa mazingira ya uzalishaji, kila wakati uthibitisha nambari za CUIT/CUIL dhidi ya hifadhidata rasmi ya AFIP (Administración Federal de Ingresos Públicos) inapowezekana.

  2. Maktaba na Pakiti: Lugha kadhaa za programu zina maktaba maalum zilizoundwa kwa ajili ya uthibitishaji wa vitambulisho vya ushuru vya Argentina:

    • JavaScript: pakiti ya validar-cuit ya npm
    • PHP: maktaba ya afip-php
    • Python: pakiti ya py-cuit
  3. Hesabu ya Mikono: Kwa madhumuni ya kielimu, unaweza kuhesabu tarakimu ya uthibitishaji kwa mikono ukitumia algorithimu iliyoelezwa hapo awali.

  4. Huduma za Uthibitishaji za Biashara Kamili: Kwa programu za biashara, fikiria kutumia huduma za uthibitishaji za kina ambazo hazithibitishi muundo tu bali pia kuthibitisha uwepo na hali ya chombo kinachohusishwa na CUIT/CUIL.

History of the CUIT/CUIL System

Mfumo wa utambulisho wa CUIT/CUIL nchini Argentina umebadilika sana tangu kuanzishwa kwake:

Origins and Implementation

CUIT (Clave Única de Identificación Tributaria) ilianzishwa nchini Argentina katika miaka ya 1970 kama sehemu ya juhudi za kisasa za mfumo wa ukusanyaji ushuru. Utawala wa Shirikisho la Mapato ya Umma (AFIP) ulianzisha utambulisho huu wa kipekee ili kufuatilia walipa ushuru kwa ufanisi zaidi na kupunguza udanganyifu wa ushuru.

CUIL (Clave Única de Identificación Laboral) ilianzishwa baadaye ili kutambulisha wafanyakazi katika mfumo wa usalama wa jamii, kuunda tofauti kati ya utambulisho wa ushuru na utambulisho wa kazi huku ikihifadhi muundo sawa.

Evolution and Digitalization

Katika miaka ya 1990, wakati Argentina ilipokuwa ikipitia mabadiliko makubwa ya kiuchumi, mfumo wa CUIT/CUIL ulizidi kuwa muhimu katika kufuatilia shughuli za kiuchumi. Mfumo huo ulitolewa kidijitali zaidi, na mifumo ya uthibitishaji mtandaoni ilianzishwa.

Mwaka wa 2000 uliona kuunganishwa kwa mfumo wa CUIT/CUIL na huduma mbalimbali za serikali za kidijitali, na kuufanya kuwa sehemu muhimu ya juhudi za serikali za e-government za Argentina. Kipindi hiki pia kiliona viwango vya uthibitishaji na muundo vilivyokuwa vimeimarishwa ambavyo vinaendelea kutumika hadi leo.

Recent Developments

Katika miaka ya hivi karibuni, AFIP imeimarisha usalama na mchakato wa uthibitishaji wa nambari za CUIT/CUIL, ikitekeleza mifumo ya uthibitishaji yenye nguvu zaidi na kuunganishwa na hifadhidata nyingine za serikali. Mfumo huo sasa unachukua jukumu muhimu katika juhudi za Argentina za kupambana na udanganyifu wa ushuru na kuhalalisha uchumi.

Leo, CUIT/CUIL inatumika sio tu kwa madhumuni ya ushuru na ajira bali pia kwa shughuli mbalimbali ikiwa ni pamoja na benki, shughuli za mali, huduma za umeme, na manunuzi mtandaoni, na kuifanya kuwa kitambulisho muhimu kwa watu binafsi na biashara zinazofanya kazi nchini Argentina.

Code Examples

Python

1def calculate_verification_digit(type_code, dni):
2    # Badilisha kuwa string na hakikisha DNI ina tarakimu 8 kwa sifuri za mbele
3    type_code_str = str(type_code)
4    dni_str = str(dni).zfill(8)
5    
6    # Changanya nambari ya aina na DNI
7    digits = type_code_str + dni_str
8    
9    # Uzito kwa kila nafasi
10    weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
11    
12    # Hesabu jumla ya bidhaa
13    sum_products = sum(int(digits[i]) * weights[i] for i in range(10))
14    
15    # Hesabu tarakimu ya uthibitishaji
16    verification_digit = 11 - (sum_products % 11)
17    
18    # Mambo maalum
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    # Nambari za aina halali
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"Nambari ya aina si sahihi. Lazima iwe moja ya: {valid_type_codes}")
34    
35    # Zalisha DNI ya bahati nasibu ikiwa haijatolewa
36    if dni is None:
37        dni = random.randint(10000000, 99999999)
38    
39    # Hesabu tarakimu ya uthibitishaji
40    verification_digit = calculate_verification_digit(type_code, dni)
41    
42    # Fanya muundo wa CUIT/CUIL
43    return f"{type_code}-{str(dni).zfill(8)}-{verification_digit}"
44
45def validate_cuit_cuil(cuit_cuil):
46    # Ondoa hyphens ikiwa zipo
47    cuit_cuil_clean = cuit_cuil.replace("-", "")
48    
49    # Angalia muundo wa msingi
50    if not cuit_cuil_clean.isdigit() or len(cuit_cuil_clean) != 11:
51        return False, "Muundo usio sahihi"
52    
53    # Pata vipengele
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    # Thibitisha nambari ya aina
59    valid_type_codes = [20, 23, 24, 27, 30, 33, 34]
60    if type_code not in valid_type_codes:
61        return False, "Nambari ya aina si sahihi"
62    
63    # Hesabu na linganisha tarakimu ya uthibitishaji
64    calculated_digit = calculate_verification_digit(type_code, dni)
65    if calculated_digit != verification_digit:
66        return False, "Tarakimu ya uthibitishaji si sahihi"
67    
68    return True, "CUIT/CUIL ni halali"
69
70# Mfano wa matumizi
71print(generate_cuit_cuil(20, 12345678))  # Zalisha kwa DNI maalum
72print(generate_cuit_cuil(27))  # Zalisha na DNI ya bahati nasibu
73print(validate_cuit_cuil("20-12345678-9"))  # Thibitisha CUIT/CUIL
74

JavaScript

1function calculateVerificationDigit(typeCode, dni) {
2  // Badilisha kuwa string na hakikisha DNI ina tarakimu 8 kwa sifuri za mbele
3  const typeCodeStr = typeCode.toString();
4  const dniStr = dni.toString().padStart(8, '0');
5  
6  // Changanya nambari ya aina na DNI
7  const digits = typeCodeStr + dniStr;
8  
9  // Uzito kwa kila nafasi
10  const weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
11  
12  // Hesabu jumla ya bidhaa
13  let sumProducts = 0;
14  for (let i = 0; i < 10; i++) {
15    sumProducts += parseInt(digits[i]) * weights[i];
16  }
17  
18  // Hesabu tarakimu ya uthibitishaji
19  let verificationDigit = 11 - (sumProducts % 11);
20  
21  // Mambo maalum
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  // Nambari za aina halali
33  const validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
34  
35  if (!validTypeCodes.includes(typeCode)) {
36    throw new Error(`Nambari ya aina si sahihi. Lazima iwe moja ya: ${validTypeCodes.join(', ')}`);
37  }
38  
39  // Zalisha DNI ya bahati nasibu ikiwa haijatolewa
40  if (dni === undefined) {
41    dni = Math.floor(Math.random() * 90000000) + 10000000;
42  }
43  
44  // Hesabu tarakimu ya uthibitishaji
45  const verificationDigit = calculateVerificationDigit(typeCode, dni);
46  
47  // Fanya muundo wa CUIT/CUIL
48  return `${typeCode}-${dni.toString().padStart(8, '0')}-${verificationDigit}`;
49}
50
51function validateCuitCuil(cuitCuil) {
52  // Ondoa hyphens ikiwa zipo
53  const cuitCuilClean = cuitCuil.replace(/-/g, '');
54  
55  // Angalia muundo wa msingi
56  if (!/^\d{11}$/.test(cuitCuilClean)) {
57    return { isValid: false, errorMessage: 'Muundo usio sahihi' };
58  }
59  
60  // Pata vipengele
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  // Thibitisha nambari ya aina
66  const validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
67  if (!validTypeCodes.includes(typeCode)) {
68    return { isValid: false, errorMessage: 'Nambari ya aina si sahihi' };
69  }
70  
71  // Hesabu na linganisha tarakimu ya uthibitishaji
72  const calculatedDigit = calculateVerificationDigit(typeCode, dni);
73  if (calculatedDigit !== verificationDigit) {
74    return { isValid: false, errorMessage: 'Tarakimu ya uthibitishaji si sahihi' };
75  }
76  
77  return { isValid: true };
78}
79
80// Mfano wa matumizi
81console.log(generateCuitCuil(20, 12345678)); // Zalisha kwa DNI maalum
82console.log(generateCuitCuil(27)); // Zalisha na DNI ya bahati nasibu
83console.log(validateCuitCuil("20-12345678-9")); // Thibitisha CUIT/CUIL
84

Java

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        // Badilisha kuwa string na hakikisha DNI ina tarakimu 8 kwa sifuri za mbele
11        String typeCodeStr = String.valueOf(typeCode);
12        String dniStr = String.format("%08d", dni);
13        
14        // Changanya nambari ya aina na DNI
15        String digits = typeCodeStr + dniStr;
16        
17        // Hesabu jumla ya bidhaa
18        int sumProducts = 0;
19        for (int i = 0; i < 10; i++) {
20            sumProducts += Character.getNumericValue(digits.charAt(i)) * WEIGHTS[i];
21        }
22        
23        // Hesabu tarakimu ya uthibitishaji
24        int verificationDigit = 11 - (sumProducts % 11);
25        
26        // Mambo maalum
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("Nambari ya aina si sahihi. Lazima iwe moja ya: " + VALID_TYPE_CODES);
39        }
40        
41        // Zalisha DNI ya bahati nasibu ikiwa haijatolewa
42        if (dni == null) {
43            Random random = new Random();
44            dni = 10000000 + random.nextInt(90000000);
45        }
46        
47        // Hesabu tarakimu ya uthibitishaji
48        int verificationDigit = calculateVerificationDigit(typeCode, dni);
49        
50        // Fanya muundo wa CUIT/CUIL
51        return String.format("%d-%08d-%d", typeCode, dni, verificationDigit);
52    }
53    
54    public static ValidationResult validateCuitCuil(String cuitCuil) {
55        // Ondoa hyphens ikiwa zipo
56        String cuitCuilClean = cuitCuil.replace("-", "");
57        
58        // Angalia muundo wa msingi
59        if (!cuitCuilClean.matches("\\d{11}")) {
60            return new ValidationResult(false, "Muundo usio sahihi");
61        }
62        
63        // Pata vipengele
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        // Thibitisha nambari ya aina
69        if (!VALID_TYPE_CODES.contains(typeCode)) {
70            return new ValidationResult(false, "Nambari ya aina si sahihi");
71        }
72        
73        // Hesabu na linganisha tarakimu ya uthibitishaji
74        int calculatedDigit = calculateVerificationDigit(typeCode, dni);
75        if (calculatedDigit != verificationDigit) {
76            return new ValidationResult(false, "Tarakimu ya uthibitishaji si sahihi");
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        // Mfano wa matumizi
102        System.out.println(generateCuitCuil(20, 12345678)); // Zalisha kwa DNI maalum
103        System.out.println(generateCuitCuil(27, null)); // Zalisha na DNI ya bahati nasibu
104        System.out.println(validateCuitCuil("20-12345678-9").isValid()); // Thibitisha CUIT/CUIL
105    }
106}
107

PHP

1<?php
2
3function calculateVerificationDigit($typeCode, $dni) {
4    // Badilisha kuwa string na hakikisha DNI ina tarakimu 8 kwa sifuri za mbele
5    $typeCodeStr = (string)$typeCode;
6    $dniStr = str_pad((string)$dni, 8, '0', STR_PAD_LEFT);
7    
8    // Changanya nambari ya aina na DNI
9    $digits = $typeCodeStr . $dniStr;
10    
11    // Uzito kwa kila nafasi
12    $weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
13    
14    // Hesabu jumla ya bidhaa
15    $sumProducts = 0;
16    for ($i = 0; $i < 10; $i++) {
17        $sumProducts += (int)$digits[$i] * $weights[$i];
18    }
19    
20    // Hesabu tarakimu ya uthibitishaji
21    $verificationDigit = 11 - ($sumProducts % 11);
22    
23    // Mambo maalum
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    // Nambari za aina halali
35    $validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
36    
37    if (!in_array($typeCode, $validTypeCodes)) {
38        throw new Exception("Nambari ya aina si sahihi. Lazima iwe moja ya: " . implode(', ', $validTypeCodes));
39    }
40    
41    // Zalisha DNI ya bahati nasibu ikiwa haijatolewa
42    if ($dni === null) {
43        $dni = rand(10000000, 99999999);
44    }
45    
46    // Hesabu tarakimu ya uthibitishaji
47    $verificationDigit = calculateVerificationDigit($typeCode, $dni);
48    
49    // Fanya muundo wa CUIT/CUIL
50    return sprintf("%d-%08d-%d", $typeCode, $dni, $verificationDigit);
51}
52
53function validateCuitCuil($cuitCuil) {
54    // Ondoa hyphens ikiwa zipo
55    $cuitCuilClean = str_replace('-', '', $cuitCuil);
56    
57    // Angalia muundo wa msingi
58    if (!preg_match('/^\d{11}$/', $cuitCuilClean)) {
59        return ['isValid' => false, 'errorMessage' => 'Muundo usio sahihi'];
60    }
61    
62    // Pata vipengele
63    $typeCode = (int)substr($cuitCuilClean, 0, 2);
64    $dni = (int)substr($cuitCuilClean, 2, 8);
65    $verificationDigit = (int)substr($cuitCuilClean, 10, 1);
66    
67    // Thibitisha nambari ya aina
68    $validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
69    if (!in_array($typeCode, $validTypeCodes)) {
70        return ['isValid' => false, 'errorMessage' => 'Nambari ya aina si sahihi'];
71    }
72    
73    // Hesabu na linganisha tarakimu ya uthibitishaji
74    $calculatedDigit = calculateVerificationDigit($typeCode, $dni);
75    if ($calculatedDigit !== $verificationDigit) {
76        return ['isValid' => false, 'errorMessage' => 'Tarakimu ya uthibitishaji si sahihi'];
77    }
78    
79    return ['isValid' => true];
80}
81
82// Mfano wa matumizi
83echo generateCuitCuil(20, 12345678) . "\n"; // Zalisha kwa DNI maalum
84echo generateCuitCuil(27) . "\n"; // Zalisha na DNI ya bahati nasibu
85var_dump(validateCuitCuil("20-12345678-9")); // Thibitisha CUIT/CUIL
86?>
87

Frequently Asked Questions

What is the difference between CUIT and CUIL?

CUIT (Clave Única de Identificación Tributaria) inatumika kwa madhumuni ya utambulisho wa ushuru na inatolewa kwa watu binafsi na vyombo vya kisheria vinavyohitaji kulipa ushuru nchini Argentina. CUIL (Clave Única de Identificación Laboral) ni maalum kwa wafanyakazi na inatumika kwa madhumuni ya kazi na usalama wa jamii. Ingawa zina muundo na algorithimu ya uthibitishaji sawa, zinatumika kwa madhumuni tofauti ya kiutawala.

Which type codes are used for individuals and which for companies?

Kwa watu binafsi:

  • 20, 23, 24: Wanaume binafsi (CUIL)
  • 27: Wanawake binafsi (CUIL)

Kwa kampuni na mashirika:

  • 30: Kampuni (CUIT)
  • 33: Chama cha Kiraia (CUIT)
  • 34: Taasisi (CUIT)

How is the verification digit calculated?

Tarakimu ya uthibitishaji inahesabiwa kwa kutumia algorithimu ya jumla ya uzito. Kila moja ya tarakimu 10 inazidishwa kwa uzito unaolingana (5, 4, 3, 2, 7, 6, 5, 4, 3, 2), na matokeo yanajumlishwa. Tarakimu ya uthibitishaji ni 11 minus mabaki ya jumla iliyogawanywa kwa 11. Mambo maalum: ikiwa matokeo ni 11, tarakimu ya uthibitishaji ni 0; ikiwa matokeo ni 10, tarakimu ya uthibitishaji ni 9.

Can I use this tool to generate real, official CUIT/CUIL numbers?

Hapana, zana hii imeundwa kwa madhumuni ya majaribio na kielimu pekee. Nambari zinazozalishwa ni halali kwa mujibu wa algorithimu ya CUIT/CUIL lakini hazijarekodiwa rasmi na mamlaka ya ushuru ya Argentina (AFIP). Kwa ajili ya usajili rasmi wa CUIT/CUIL, watu binafsi na kampuni lazima wafuate taratibu sahihi za kisheria kupitia AFIP.

Why does my CUIT/CUIL validation fail even though the format looks correct?

Uthibitishaji unaweza kushindwa kwa sababu kadhaa:

  1. Nambari ya aina si mojawapo ya nambari halali (20, 23, 24, 27, 30, 33, 34)
  2. Tarakimu ya uthibitishaji haiendani na thamani iliyohesabiwa kulingana na algorithimu
  3. Muundo si sahihi (inapaswa kuwa XX-XXXXXXXX-X)
  4. Kuna wahusika wasio wa nambari katika ingizo (mbali na hyphens)

Are hyphens required in CUIT/CUIL numbers?

Ingawa nambari za CUIT/CUIL kawaida huandikwa na kuonyeshwa kwa hyphens (XX-XXXXXXXX-X), hyphens si sehemu ya nambari halisi kwa madhumuni ya hesabu. Validator yetu inakubali muundo wote (pamoja na au bila hyphens) na itathibitisha ipasavyo muundo wowote.

Can a CUIT/CUIL number have fewer than 8 digits in the DNI portion?

Hapana, sehemu ya DNI lazima iwe na tarakimu 8 tu kila wakati. Ikiwa DNI halisi ina tarakimu chache, lazima iongezwe na sifuri za mbele ili kufikia tarakimu 8. Kwa mfano, ikiwa DNI ya mtu ni 1234567, katika CUIT/CUIL itawakilishwa kama 01234567.

How can I verify if a CUIT/CUIL is officially registered in Argentina?

Ili kuthibitisha ikiwa CUIT/CUIL imeandikishwa rasmi na inafanya kazi, unapaswa kutumia tovuti rasmi ya AFIP (Administración Federal de Ingresos Públicos) au huduma. Zana yetu inathibitisha tu halali ya kihesabu ya nambari, si hali yake rasmi ya usajili.

Can I use this tool in my commercial application?

Ndio, unaweza kuunganisha algorithimu na mantiki iliyonyeshwa katika zana hii katika programu zako za kibiashara. Algorithimu ya uthibitishaji wa CUIT/CUIL ni kiwango cha umma. Hata hivyo, kwa mazingira ya uzalishaji, tunapendekeza kutekeleza usimamizi sahihi wa makosa na kuzingatia uthibitishaji wa ziada dhidi ya vyanzo rasmi inapohitajika.

Does the tool store any of the generated or validated CUIT/CUIL numbers?

Hapana, zana hii haisitishi taarifa zozote zilizowekwa au zinazothibitishwa. Usindikaji wote unafanyika upande wa mteja kwenye kivinjari chako, na hakuna data inayotumwa au kuhifadhiwa kwenye seva zetu. Hii inahakikisha faragha na usalama wa taarifa yoyote unayoingiza.

References

  1. AFIP (Administración Federal de Ingresos Públicos). "CUIT/CUIL/CDI." Tovuti Rasmi. https://www.afip.gob.ar/

  2. Ministerio de Trabajo, Empleo y Seguridad Social. "CUIL - Clave Única de Identificación Laboral." https://www.argentina.gob.ar/trabajo

  3. ANSES (Administración Nacional de la Seguridad Social). "Obtener mi CUIL." https://www.anses.gob.ar/

  4. Boletín Oficial de la República Argentina. "Resolución General AFIP 2854/2010: Procedimiento. Clave Única de Identificación Tributaria (C.U.I.T.)."

  5. Código Fiscal de la República Argentina. "Identificación y Registro de Contribuyentes."


Ready to generate or validate Argentinian CUIT/CUIL numbers? Try our tool now and simplify your testing process!