Generišite važeće argentinske CUIT/CUIL brojeve za testiranje ili validirajte postojeće. Jednostavan alat za programere koji rade sa argentinskim poreskim i radnim identifikacionim brojevima.
Unesite 8-cifreni DNI broj ili koristite generator nasumičnih brojeva
Argentinski CUIT (Clave Única de Identificación Tributaria) i CUIL (Clave Única de Identificación Laboral) su jedinstveni identifikacioni brojevi koji se koriste u Argentini za porezne i radne svrhe, redom. Ovi 11-cifreni kodovi su od suštinskog značaja za pojedince i preduzeća da legalno funkcionišu unutar argentinskog ekonomskog sistema. Naš alat za generisanje i validaciju CUIT/CUIL brojeva pruža jednostavan i efikasan način za generisanje validnih CUIT/CUIL brojeva u svrhu testiranja i validaciju postojećih brojeva kako bi se osiguralo da se pridržavaju zvaničnog formata i algoritma verifikacije.
Bilo da ste programer koji testira aplikacije koje obrađuju argentinske poreske identifikatore, QA stručnjak koji proverava funkcionalnost sistema, ili jednostavno trebate da razumete kako ovi identifikacioni brojevi funkcionišu, ovaj alat nudi jednostavno rešenje bez nepotrebnih komplikacija. Alat sadrži dve glavne funkcije: generator koji nasumično kreira validne CUIT/CUIL brojeve ili na osnovu specifičnih parametara, i validator koji proverava da li dati CUIT/CUIL broj prati ispravan format i pravila izračunavanja.
Validan CUIT/CUIL broj se sastoji od 11 cifara koje se obično prikazuju u formatu XX-XXXXXXXX-X:
Kod tipa (prve 2 cifre): Označava tip entiteta
DNI broj (srednjih 8 cifara): Za pojedince, ovo je njihov broj nacionalnog identiteta (DNI), dopunjen vodećim nulama ako je potrebno da dostigne 8 cifara. Za preduzeća, ovo je jedinstveni dodeljeni broj.
Verifikaciona cifra (poslednja cifra): Cifra provere koja se izračunava koristeći specifičan algoritam kako bi se validirao ceo broj.
Verifikaciona cifra se izračunava koristeći sledeći algoritam:
Matematički, ovo se može izraziti kao:
Gde:
Izaberite karticu "Generator" na vrhu interfejsa alata.
Izaberite kod tipa iz padajućeg menija:
Unesite DNI broj (opciono):
Generišite nasumični DNI (opciono):
Pogledajte generisani CUIT/CUIL:
Kopirajte rezultat:
Izaberite karticu "Validator" na vrhu interfejsa alata.
Unesite CUIT/CUIL za validaciju:
Kliknite na dugme "Validiraj":
Pogledajte rezultat validacije:
Dodatne informacije:
Razvoj softvera: Generišite validne CUIT/CUIL brojeve za testiranje aplikacija koje se bave argentinskim poreskim identifikatorima, kao što su:
Popunjavanje baze podataka: Kreirajte realistične test podatke za sisteme koji čuvaju informacije o argentinskim korisnicima, osiguravajući da pravila i ograničenja baze podataka funkcionišu ispravno.
Testiranje validacije obrazaca: Testirajte validaciju unosa za web obrasce koji prikupljaju CUIT/CUIL informacije, proveravajući da se pravilne poruke o grešci pojavljuju za nevalidne unose.
Testiranje API-ja: Generišite validne podatke za API krajnje tačke koje zahtevaju CUIT/CUIL brojeve, osiguravajući da vaši integracioni testovi koriste validne podatke.
QA automatizacija: Uključite generisanje CUIT/CUIL u automatizovane test skripte kako biste kreirali dinamičke test slučajeve umesto korišćenja statičnih test podataka.
Učenje algoritama validacije: Razumite kako algoritmi provere cifara funkcionišu u praksi gledajući proces verifikacije CUIT/CUIL u akciji.
Podučavanje validaciji podataka: Koristite kao obrazovni primer kada podučavate tehnike validacije obrazaca novim programerima.
Razumevanje argentinskih poslovnih zahteva: Učite o identifikacionom sistemu koji se koristi u Argentini za međunarodni poslovni razvoj.
Dok naš alat pruža jednostavan način za generisanje i validaciju CUIT/CUIL brojeva, postoje alternativni pristupi koje možete razmotriti:
Zvanična vladina validacija: Za produkcijska okruženja, uvek validirajte CUIT/CUIL brojeve protiv zvanične AFIP (Administración Federal de Ingresos Públicos) baze podataka kada je to moguće.
Biblioteke i paketi: Nekoliko programskih jezika ima biblioteke posebno dizajnirane za validaciju argentinskih poreskih ID-a:
validar-cuit
npm paketafip-php
bibliotekapy-cuit
paketRučno izračunavanje: U obrazovne svrhe, možete ručno izračunati verifikacionu cifru koristeći algoritam opisan ranije.
Sveobuhvatne usluge validacije poslovanja: Za aplikacije na nivou preduzeća, razmotrite korišćenje sveobuhvatnih usluga validacije koje ne samo da proveravaju format, već i verifikuju postojanje i status entiteta povezanog sa CUIT/CUIL.
Sistem identifikacije CUIT/CUIL u Argentini se značajno razvio od svog osnivanja:
CUIT (Clave Única de Identificación Tributaria) je prvi put uveden u Argentini 1970-ih kao deo napora za modernizaciju sistema prikupljanja poreza. Savezna administracija javnih prihoda (AFIP) je implementirala ovaj jedinstveni identifikator kako bi efikasnije pratila poreske obveznike i smanjila poresku evaziju.
CUIL (Clave Única de Identificación Laboral) je kasnije uveden kako bi se posebno identifikovali radnici u sistemu socijalne sigurnosti, stvarajući razliku između poreske identifikacije i radne identifikacije, dok je zadržao dosledan format.
U 1990-im, kako je Argentina prolazila kroz značajne ekonomske reforme, sistem CUIT/CUIL je postao sve važniji za praćenje ekonomske aktivnosti. Sistem je dodatno digitalizovan, a implementirani su online sistemi verifikacije.
Rani 2000-ih je video integraciju sistema CUIT/CUIL sa raznim digitalnim vladinim uslugama, čineći ga suštinskim komponentom argentinskih e-vladinih inicijativa. Ovaj period je takođe video standardizaciju algoritma verifikacije i formata koji se i danas koristi.
U poslednjim godinama, AFIP je poboljšao sigurnosne i verifikacione procese za CUIT/CUIL brojeve, implementirajući sofisticiranije sisteme validacije i integrišući ih s drugim vladinim bazama podataka. Sistem sada igra ključnu ulogu u argentinskim naporima da se bori protiv poreske evazije i formalizuje ekonomiju.
Danas se CUIT/CUIL koristi ne samo za poreske i radne svrhe, već i za širok spektar aktivnosti uključujući bankarstvo, transakcije nekretninama, usluge komunalija i online kupovine, čineći ga suštinskim identifikatorom za pojedince i preduzeća koja funkcionišu u Argentini.
1def calculate_verification_digit(type_code, dni):
2 # Pretvori u string i osiguraj da je DNI 8 cifara sa vodećim nulama
3 type_code_str = str(type_code)
4 dni_str = str(dni).zfill(8)
5
6 # Kombinuj kod tipa i DNI
7 digits = type_code_str + dni_str
8
9 # Težine za svaku poziciju
10 weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
11
12 # Izračunaj sumu proizvoda
13 sum_products = sum(int(digits[i]) * weights[i] for i in range(10))
14
15 # Izračunaj verifikacionu cifru
16 verification_digit = 11 - (sum_products % 11)
17
18 # Specijalni slučajevi
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 # Validni kodovi tipa
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"Nevalidan kod tipa. Mora biti jedan od: {valid_type_codes}")
34
35 # Generiši nasumični DNI ako nije dat
36 if dni is None:
37 dni = random.randint(10000000, 99999999)
38
39 # Izračunaj verifikacionu cifru
40 verification_digit = calculate_verification_digit(type_code, dni)
41
42 # Formatiraj CUIT/CUIL
43 return f"{type_code}-{str(dni).zfill(8)}-{verification_digit}"
44
45def validate_cuit_cuil(cuit_cuil):
46 # Ukloni crtice ako su prisutne
47 cuit_cuil_clean = cuit_cuil.replace("-", "")
48
49 # Proveri osnovni format
50 if not cuit_cuil_clean.isdigit() or len(cuit_cuil_clean) != 11:
51 return False, "Nevalidan format"
52
53 # Izvuci delove
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 # Validiraj kod tipa
59 valid_type_codes = [20, 23, 24, 27, 30, 33, 34]
60 if type_code not in valid_type_codes:
61 return False, "Nevalidan kod tipa"
62
63 # Izračunaj i uporedi verifikacionu cifru
64 calculated_digit = calculate_verification_digit(type_code, dni)
65 if calculated_digit != verification_digit:
66 return False, "Nevalidna verifikaciona cifra"
67
68 return True, "Validan CUIT/CUIL"
69
70# Primer korišćenja
71print(generate_cuit_cuil(20, 12345678)) # Generiši za specifičan DNI
72print(generate_cuit_cuil(27)) # Generiši sa nasumičnim DNI
73print(validate_cuit_cuil("20-12345678-9")) # Validiraj CUIT/CUIL
74
1function calculateVerificationDigit(typeCode, dni) {
2 // Pretvori u string i osiguraj da je DNI 8 cifara sa vodećim nulama
3 const typeCodeStr = typeCode.toString();
4 const dniStr = dni.toString().padStart(8, '0');
5
6 // Kombinuj kod tipa i DNI
7 const digits = typeCodeStr + dniStr;
8
9 // Težine za svaku poziciju
10 const weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
11
12 // Izračunaj sumu proizvoda
13 let sumProducts = 0;
14 for (let i = 0; i < 10; i++) {
15 sumProducts += parseInt(digits[i]) * weights[i];
16 }
17
18 // Izračunaj verifikacionu cifru
19 let verificationDigit = 11 - (sumProducts % 11);
20
21 // Specijalni slučajevi
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 // Validni kodovi tipa
33 const validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
34
35 if (!validTypeCodes.includes(typeCode)) {
36 throw new Error(`Nevalidan kod tipa. Mora biti jedan od: ${validTypeCodes.join(', ')}`);
37 }
38
39 // Generiši nasumični DNI ako nije dat
40 if (dni === undefined) {
41 dni = Math.floor(Math.random() * 90000000) + 10000000;
42 }
43
44 // Izračunaj verifikacionu cifru
45 const verificationDigit = calculateVerificationDigit(typeCode, dni);
46
47 // Formatiraj CUIT/CUIL
48 return `${typeCode}-${dni.toString().padStart(8, '0')}-${verificationDigit}`;
49}
50
51function validateCuitCuil(cuitCuil) {
52 // Ukloni crtice ako su prisutne
53 const cuitCuilClean = cuitCuil.replace(/-/g, '');
54
55 // Proveri osnovni format
56 if (!/^\d{11}$/.test(cuitCuilClean)) {
57 return { isValid: false, errorMessage: 'Nevalidan format' };
58 }
59
60 // Izvuci delove
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 // Validiraj kod tipa
66 const validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
67 if (!validTypeCodes.includes(typeCode)) {
68 return { isValid: false, errorMessage: 'Nevalidan kod tipa' };
69 }
70
71 // Izračunaj i uporedi verifikacionu cifru
72 const calculatedDigit = calculateVerificationDigit(typeCode, dni);
73 if (calculatedDigit !== verificationDigit) {
74 return { isValid: false, errorMessage: 'Nevalidna verifikaciona cifra' };
75 }
76
77 return { isValid: true };
78}
79
80// Primer korišćenja
81console.log(generateCuitCuil(20, 12345678)); // Generiši za specifičan DNI
82console.log(generateCuitCuil(27)); // Generiši sa nasumičnim DNI
83console.log(validateCuitCuil("20-12345678-9")); // Validiraj 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 // Pretvori u string i osiguraj da je DNI 8 cifara sa vodećim nulama
11 String typeCodeStr = String.valueOf(typeCode);
12 String dniStr = String.format("%08d", dni);
13
14 // Kombinuj kod tipa i DNI
15 String digits = typeCodeStr + dniStr;
16
17 // Izračunaj sumu proizvoda
18 int sumProducts = 0;
19 for (int i = 0; i < 10; i++) {
20 sumProducts += Character.getNumericValue(digits.charAt(i)) * WEIGHTS[i];
21 }
22
23 // Izračunaj verifikacionu cifru
24 int verificationDigit = 11 - (sumProducts % 11);
25
26 // Specijalni slučajevi
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("Nevalidan kod tipa. Mora biti jedan od: " + VALID_TYPE_CODES);
39 }
40
41 // Generiši nasumični DNI ako nije dat
42 if (dni == null) {
43 Random random = new Random();
44 dni = 10000000 + random.nextInt(90000000);
45 }
46
47 // Izračunaj verifikacionu cifru
48 int verificationDigit = calculateVerificationDigit(typeCode, dni);
49
50 // Formatiraj CUIT/CUIL
51 return String.format("%d-%08d-%d", typeCode, dni, verificationDigit);
52 }
53
54 public static ValidationResult validateCuitCuil(String cuitCuil) {
55 // Ukloni crtice ako su prisutne
56 String cuitCuilClean = cuitCuil.replace("-", "");
57
58 // Proveri osnovni format
59 if (!cuitCuilClean.matches("\\d{11}")) {
60 return new ValidationResult(false, "Nevalidan format");
61 }
62
63 // Izvuci delove
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 // Validiraj kod tipa
69 if (!VALID_TYPE_CODES.contains(typeCode)) {
70 return new ValidationResult(false, "Nevalidan kod tipa");
71 }
72
73 // Izračunaj i uporedi verifikacionu cifru
74 int calculatedDigit = calculateVerificationDigit(typeCode, dni);
75 if (calculatedDigit != verificationDigit) {
76 return new ValidationResult(false, "Nevalidna verifikaciona cifra");
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 // Primer korišćenja
102 System.out.println(generateCuitCuil(20, 12345678)); // Generiši za specifičan DNI
103 System.out.println(generateCuitCuil(27, null)); // Generiši sa nasumičnim DNI
104 System.out.println(validateCuitCuil("20-12345678-9").isValid()); // Validiraj CUIT/CUIL
105 }
106}
107
1<?php
2
3function calculateVerificationDigit($typeCode, $dni) {
4 // Pretvori u string i osiguraj da je DNI 8 cifara sa vodećim nulama
5 $typeCodeStr = (string)$typeCode;
6 $dniStr = str_pad((string)$dni, 8, '0', STR_PAD_LEFT);
7
8 // Kombinuj kod tipa i DNI
9 $digits = $typeCodeStr . $dniStr;
10
11 // Težine za svaku poziciju
12 $weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
13
14 // Izračunaj sumu proizvoda
15 $sumProducts = 0;
16 for ($i = 0; $i < 10; $i++) {
17 $sumProducts += (int)$digits[$i] * $weights[$i];
18 }
19
20 // Izračunaj verifikacionu cifru
21 $verificationDigit = 11 - ($sumProducts % 11);
22
23 // Specijalni slučajevi
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 // Validni kodovi tipa
35 $validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
36
37 if (!in_array($typeCode, $validTypeCodes)) {
38 throw new Exception("Nevalidan kod tipa. Mora biti jedan od: " . implode(', ', $validTypeCodes));
39 }
40
41 // Generiši nasumični DNI ako nije dat
42 if ($dni === null) {
43 $dni = rand(10000000, 99999999);
44 }
45
46 // Izračunaj verifikacionu cifru
47 $verificationDigit = calculateVerificationDigit($typeCode, $dni);
48
49 // Formatiraj CUIT/CUIL
50 return sprintf("%d-%08d-%d", $typeCode, $dni, $verificationDigit);
51}
52
53function validateCuitCuil($cuitCuil) {
54 // Ukloni crtice ako su prisutne
55 $cuitCuilClean = str_replace('-', '', $cuitCuil);
56
57 // Proveri osnovni format
58 if (!preg_match('/^\d{11}$/', $cuitCuilClean)) {
59 return ['isValid' => false, 'errorMessage' => 'Nevalidan format'];
60 }
61
62 // Izvuci delove
63 $typeCode = (int)substr($cuitCuilClean, 0, 2);
64 $dni = (int)substr($cuitCuilClean, 2, 8);
65 $verificationDigit = (int)substr($cuitCuilClean, 10, 1);
66
67 // Validiraj kod tipa
68 $validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
69 if (!in_array($typeCode, $validTypeCodes)) {
70 return ['isValid' => false, 'errorMessage' => 'Nevalidan kod tipa'];
71 }
72
73 // Izračunaj i uporedi verifikacionu cifru
74 $calculatedDigit = calculateVerificationDigit($typeCode, $dni);
75 if ($calculatedDigit !== $verificationDigit) {
76 return ['isValid' => false, 'errorMessage' => 'Nevalidna verifikaciona cifra'];
77 }
78
79 return ['isValid' => true];
80}
81
82// Primer korišćenja
83echo generateCuitCuil(20, 12345678) . "\n"; // Generiši za specifičan DNI
84echo generateCuitCuil(27) . "\n"; // Generiši sa nasumičnim DNI
85var_dump(validateCuitCuil("20-12345678-9")); // Validiraj CUIT/CUIL
86?>
87
CUIT (Clave Única de Identificación Tributaria) se koristi za poresku identifikaciju i dodeljuje se i pojedincima i pravnim licima koji treba da plaćaju poreze u Argentini. CUIL (Clave Única de Identificación Laboral) je specifično za radnike i koristi se za radne i socijalne sigurnosne svrhe. Iako dele isti format i algoritam izračunavanja, služe različitim administrativnim svrhama.
Za pojedince:
Za preduća i organizacije:
Verifikaciona cifra se izračunava koristeći algoritam sa težinskim sumama. Svaka od prvih 10 cifara se množi sa odgovarajućom težinom (5, 4, 3, 2, 7, 6, 5, 4, 3, 2), a rezultati se sabiraju. Verifikaciona cifra je 11 minus ostatak kada se ova suma podeli sa 11. Specijalni slučajevi: ako je rezultat 11, verifikaciona cifra je 0; ako je rezultat 10, verifikaciona cifra je 9.
Ne, ovaj alat je dizajniran za testiranje i obrazovne svrhe. Brojevi koji se generišu su matematički validni prema CUIT/CUIL algoritmu, ali nisu zvanično registrovani kod argentinskih poreskih vlasti (AFIP). Za zvaničnu registraciju CUIT/CUIL, pojedinci i preduzeća moraju pratiti odgovarajuće zakonske procedure kroz AFIP.
Validacija može propasti iz više razloga:
Iako se CUIT/CUIL brojevi obično pišu i prikazuju sa crticama (XX-XXXXXXXX-X), crtice nisu deo stvarnog broja za svrhe izračunavanja. Naš validator prihvata oba formata (sa ili bez crtica) i pravilno će validirati bilo koji format.
Ne, deo DNI mora uvek biti tačno 8 cifara. Ako stvarni DNI ima manje cifara, mora se dopuniti vodećim nulama kako bi dostigao 8 cifara. Na primer, ako je nečiji DNI 1234567, u CUIT/CUIL će biti predstavljen kao 01234567.
Da biste proverili da li je CUIT/CUIL zvanično registrovan i aktivan, trebali biste koristiti zvaničnu veb stranicu ili usluge AFIP (Administración Federal de Ingresos Públicos). Naš alat samo proverava matematičku validnost broja, a ne njegov zvanični status registracije.
Da, možete integrisati algoritam i logiku prikazanu u ovom alatu u svoje komercijalne aplikacije. Algoritam validacije CUIT/CUIL je javni standard. Međutim, za produkcijska okruženja preporučujemo implementaciju odgovarajuće obrade grešaka i razmatranje dodatne validacije protiv zvaničnih izvora kada je to potrebno.
Ne, ovaj alat ne čuva nijednu od informacija koje su unete ili generisane. Sva obrada se vrši na klijentskoj strani u vašem pretraživaču, a nijedan podatak se ne šalje ili ne čuva na našim serverima. Ovo osigurava privatnost i sigurnost bilo kojih informacija koje unesete.
AFIP (Administración Federal de Ingresos Públicos). "CUIT/CUIL/CDI." Zvanična veb stranica. https://www.afip.gob.ar/
Ministarstvo rada, zapošljavanja i socijalne sigurnosti. "CUIL - Clave Única de Identificación Laboral." https://www.argentina.gob.ar/trabajo
ANSES (Administración Nacional de la Seguridad Social). "Dobijanje mog CUIL-a." https://www.anses.gob.ar/
Službeni bilten Republike Argentine. "Rezolucija General AFIP 2854/2010: Procedura. Clave Única de Identificación Tributaria (C.U.I.T.)."
Poreski zakon Republike Argentine. "Identifikacija i registracija poreskih obveznika."
Spremni za generisanje ili validaciju argentinskih CUIT/CUIL brojeva? Isprobajte naš alat sada i pojednostavite svoj proces testiranja!
Otkrijte više alata koji mogu biti korisni za vaš radni proces