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:
-
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)
-
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.
-
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:
- Chukua tarakimu 10 za kwanza za CUIT/CUIL (nambari ya aina + DNI)
- Zidisha kila tarakimu kwa uzito unaolingana kutoka kwa mfuatano huu: 5, 4, 3, 2, 7, 6, 5, 4, 3, 2
- Jumlisha bidhaa zote zilizopatikana
- Hesabu 11 minus mabaki ya jumla iliyogawanywa kwa 11
- Ikiwa matokeo ni 11, tarakimu ya uthibitishaji ni 0
- Ikiwa matokeo ni 10, tarakimu ya uthibitishaji ni 9
- Vinginevyo, matokeo ni tarakimu ya uthibitishaji
Kihesabu, hii inaweza kuonyeshwa kama:
Ambapo:
- ni tarakimu ya uthibitishaji
- ni tarakimu ya ya kwanza 10
- ni uzito unaolingana kutoka kwa mfuatano [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
- Mambo maalum: ikiwa basi , ikiwa basi
Step-by-Step Guide
Using the Generator
-
Chagua kichupo "Generator" katika sehemu ya juu ya kiolesura cha zana.
-
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)
-
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
-
Zalisha DNI ya Bahati Nasibu (hiari):
- Bonyeza kitufe "Random" ili kuzalisha nambari ya DNI ya tarakimu 8 kwa bahati nasibu
-
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
-
Nakili Matokeo:
- Bonyeza ikoni ya nakala ili nakili CUIT/CUIL iliyozalishwa kwenye clipboard yako
- Ujumbe wa uthibitisho utaonekana wakati umefanikiwa kunakili
Using the Validator
-
Chagua kichupo "Validator" katika sehemu ya juu ya kiolesura cha zana.
-
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)
-
Bonyeza Kitufe "Validate":
- Zana itakagua muundo, nambari ya aina, na tarakimu ya uthibitishaji
-
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
-
Taarifa za Ziada:
- Kwa nambari halali, zana inaonyesha ufafanuzi wa vipengele:
- Nambari ya aina na maana yake
- Nambari ya DNI
- Tarakimu ya uthibitishaji
- Kwa nambari halali, zana inaonyesha ufafanuzi wa vipengele:
Use Cases
Development and Testing
-
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
-
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.
-
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.
-
Kujaribu API: Zalisha payloads halali kwa mwisho wa API zinazohitaji nambari za CUIT/CUIL, kuhakikisha kwamba majaribio yako ya uunganisho yanatumia data halali.
-
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
-
Kujifunza Algorithimu za Uthibitishaji: Elewa jinsi algorithimu za tarakimu za uthibitishaji zinavyofanya kazi kwa vitendo kwa kuona mchakato wa uthibitishaji wa CUIT/CUIL ukiendelea.
-
Kufundisha Uthibitishaji wa Data: Tumia kama mfano wa kielimu unapofundisha mbinu za uthibitishaji wa fomu kwa waendelezaji wapya.
-
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:
-
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.
-
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
- JavaScript: pakiti ya
-
Hesabu ya Mikono: Kwa madhumuni ya kielimu, unaweza kuhesabu tarakimu ya uthibitishaji kwa mikono ukitumia algorithimu iliyoelezwa hapo awali.
-
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:
- Nambari ya aina si mojawapo ya nambari halali (20, 23, 24, 27, 30, 33, 34)
- Tarakimu ya uthibitishaji haiendani na thamani iliyohesabiwa kulingana na algorithimu
- Muundo si sahihi (inapaswa kuwa XX-XXXXXXXX-X)
- 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
-
AFIP (Administración Federal de Ingresos Públicos). "CUIT/CUIL/CDI." Tovuti Rasmi. https://www.afip.gob.ar/
-
Ministerio de Trabajo, Empleo y Seguridad Social. "CUIL - Clave Única de Identificación Laboral." https://www.argentina.gob.ar/trabajo
-
ANSES (Administración Nacional de la Seguridad Social). "Obtener mi CUIL." https://www.anses.gob.ar/
-
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.)."
-
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!
Maoni
Bonyeza toast ya maoni kuanza kutoa maoni kuhusu zana hii
Zana Zinazohusiana
Gundua zana zaidi ambazo zinaweza kuwa na manufaa kwa mtiririko wako wa kazi