Ustvarite veljavne argentinske številke CUIT/CUIL za testiranje ali preverite obstoječe. Preprost pripomoček za razvijalce, ki delajo z argentinskimi davčnimi in delovnimi identifikacijskimi številkami.
Vnesite 8-mestno številko DNI ali uporabite naključni generator
Argentinski CUIT (Clave Única de Identificación Tributaria) in CUIL (Clave Única de Identificación Laboral) sta edinstvena identifikacijska številka, ki se uporablja v Argentini za davčne in zaposlitvene namene. Te 11-mestne kode so bistvene za posameznike in podjetja, da lahko zakonito delujejo v argentinskem ekonomskem sistemu. Naša orodja za generiranje in preverjanje CUIT/CUIL ponujajo preprost in učinkovit način za ustvarjanje veljavnih številk CUIT/CUIL za testne namene in preverjanje obstoječih številk, da se zagotovi, da ustrezajo uradnemu formatu in verifikacijskemu algoritmu.
Ne glede na to, ali ste razvijalec, ki testira aplikacije, ki obravnavajo argentinske davčne ID-je, specialist za QA, ki preverja funkcionalnost sistema, ali pa preprosto potrebujete razumevanje, kako te identifikacijske številke delujejo, to orodje ponuja enostavno rešitev brez nepotrebnih zapletov. Orodje ima dve glavni funkciji: generator, ki ustvarja veljavne številke CUIT/CUIL naključno ali na podlagi specifičnih parametrov, in validator, ki preverja, ali določena številka CUIT/CUIL sledi pravilnemu formatu in pravilom izračuna.
Veljavna številka CUIT/CUIL je sestavljena iz 11 številk, ki so običajno prikazane v formatu XX-XXXXXXXX-X:
Koda tipa (prvi 2 številki): Pokaže tip subjekta
Številka DNI (srednjih 8 številk): Za posameznike je to njihova nacionalna identifikacijska številka (DNI), ki je po potrebi dopolnjena z vodilnimi ničlami, da doseže 8 številk. Za podjetja je to edinstvena dodeljena številka.
Verifikacijska številka (zadnja številka): Preverjena številka, izračunana z uporabo specifičnega algoritma za validacijo celotne številke.
Verifikacijska številka se izračuna z naslednjim algoritmom:
Matematično lahko to izrazimo kot:
Kjer:
Izberite zavihek "Generator" na vrhu vmesnika orodja.
Izberite kodo tipa iz spustnega menija:
Vnesite številko DNI (neobvezno):
Generirajte naključno DNI (neobvezno):
Oglejte si generirano CUIT/CUIL:
Kopirajte rezultat:
Izberite zavihek "Validator" na vrhu vmesnika orodja.
Vnesite CUIT/CUIL za preverjanje:
Kliknite gumb "Preveri":
Oglejte si rezultat preverjanja:
Dodatne informacije:
Razvoj programske opreme: Generirajte veljavne številke CUIT/CUIL za testiranje aplikacij, ki obravnavajo argentinske davčne identifikacije, kot so:
Polnjenje podatkovne baze: Ustvarite realistične testne podatke za sisteme, ki shranjujejo informacije o argentinskih uporabnikih, kar zagotavlja, da pravilno delujejo omejitve podatkovne baze in pravila validacije.
Testiranje validacije obrazcev: Preizkusite validacijo vnosa za spletne obrazce, ki zbirajo informacije CUIT/CUIL, in preverite, ali se pravilna sporočila o napakah prikažejo za neveljavne vnose.
Testiranje API-jev: Generirajte veljavne podatkovne pakete za API končne točke, ki zahtevajo številke CUIT/CUIL, in tako zagotovite, da vaši integracijski testi uporabljajo veljavne podatke.
Avtomatizacija QA: Vključite generiranje CUIT/CUIL v avtomatizirane testne skripte, da ustvarite dinamične testne primere namesto uporabe statičnih testnih podatkov.
Učenje algoritmov validacije: Razumite, kako algoritmi preverjanja delujejo v praksi, tako da vidite postopek preverjanja CUIT/CUIL v akciji.
Poučevanje validacije podatkov: Uporabite kot izobraževalni primer pri poučevanju tehnik validacije obrazcev novim razvijalcem.
Razumevanje argentinskih poslovnih zahtev: Spoznajte sistem identifikacije, ki se uporablja v Argentini za mednarodni poslovni razvoj.
Medtem ko naše orodje ponuja preprost način za generiranje in preverjanje številk CUIT/CUIL, obstajajo alternativni pristopi, ki jih lahko upoštevate:
Uradna vladna validacija: Za produkcijska okolja vedno preverite številke CUIT/CUIL proti uradni bazi podatkov AFIP (Administración Federal de Ingresos Públicos), kadar je to mogoče.
Knjižnice in paketi: Večina programskih jezikov ima knjižnice, posebej zasnovane za validacijo argentinskih davčnih ID-jev:
validar-cuit
npm paketafip-php
knjižnicapy-cuit
paketRočni izračun: Za izobraževalne namene lahko ročno izračunate verifikacijsko številko z uporabo zgoraj opisanega algoritma.
Obsežne storitve validacije podjetij: Za podjetniške aplikacije razmislite o uporabi obsežnih storitev validacije, ki ne le preverjajo formata, ampak tudi preverjajo obstoj in status subjekta, povezanega s CUIT/CUIL.
Sistem identifikacije CUIT/CUIL v Argentini se je od svojega nastanka znatno razvil:
CUIT (Clave Única de Identificación Tributaria) je bil prvič uveden v Argentini v 70. letih kot del prizadevanj za modernizacijo sistema zbiranja davkov. Zvezna uprava za javne prihodke (AFIP) je ta edinstveni identifikator uvedla za učinkovitejše sledenje davkoplačevalcem in zmanjšanje davčne utaje.
CUIL (Clave Única de Identificación Laboral) je bil kasneje uveden za specifično identifikacijo delavcev v sistemu socialne varnosti, kar je ustvarilo ločnico med davčno identifikacijo in delovno identifikacijo, hkrati pa ohranilo dosledno obliko.
V 90. letih, ko je Argentina doživela pomembne gospodarske reforme, je sistem CUIT/CUIL postal vse pomembnejši za sledenje gospodarskim dejavnostim. Sistem je bil dodatno digitaliziran in uvedeni so bili sistemi za preverjanje na spletu.
Začetek 2000-ih je prinesel integracijo sistema CUIT/CUIL z različnimi digitalnimi vladnimi storitvami, kar je postalo bistvena komponenta argentinskih pobud e-vlade. To obdobje je prav tako prineslo standardizacijo algoritma preverjanja in formata, ki ostaja v uporabi še danes.
V zadnjih letih je AFIP izboljšal varnostne in preverjalne procese za številke CUIT/CUIL, uvedel bolj sofisticirane sisteme validacije in jih integriral z drugimi vladnimi bazami podatkov. Sistem zdaj igra ključno vlogo v argentinskih prizadevanjih za boj proti davčni utaji in formalizacijo gospodarstva.
Danes se CUIT/CUIL uporablja ne le za davčne in zaposlitvene namene, temveč tudi za širok spekter dejavnosti, vključno z bančništvom, transakcijami z nepremičninami, storitvami komunalnih podjetij in spletnimi nakupi, kar ga dela bistvenega za posameznike in podjetja, ki delujejo v Argentini.
1def calculate_verification_digit(type_code, dni):
2 # Pretvori v niz in zagotovi, da je DNI 8 številk z vodilnimi ničlami
3 type_code_str = str(type_code)
4 dni_str = str(dni).zfill(8)
5
6 # Združi kodo tipa in DNI
7 digits = type_code_str + dni_str
8
9 # Teže za vsak položaj
10 weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
11
12 # Izračunaj vsoto produktov
13 sum_products = sum(int(digits[i]) * weights[i] for i in range(10))
14
15 # Izračunaj verifikacijsko številko
16 verification_digit = 11 - (sum_products % 11)
17
18 # Posebni primeri
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 # Veljavne kode tipov
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"Neveljavna koda tipa. Mora biti ena od: {valid_type_codes}")
34
35 # Generiraj naključno DNI, če ni podano
36 if dni is None:
37 dni = random.randint(10000000, 99999999)
38
39 # Izračunaj verifikacijsko številko
40 verification_digit = calculate_verification_digit(type_code, dni)
41
42 # Oblikuj CUIT/CUIL
43 return f"{type_code}-{str(dni).zfill(8)}-{verification_digit}"
44
45def validate_cuit_cuil(cuit_cuil):
46 # Odstrani vezaje, če so prisotni
47 cuit_cuil_clean = cuit_cuil.replace("-", "")
48
49 # Preveri osnovno obliko
50 if not cuit_cuil_clean.isdigit() or len(cuit_cuil_clean) != 11:
51 return False, "Neveljavna oblika"
52
53 # Izvleči dele
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 # Preveri veljavnost kode tipa
59 valid_type_codes = [20, 23, 24, 27, 30, 33, 34]
60 if type_code not in valid_type_codes:
61 return False, "Neveljavna koda tipa"
62
63 # Izračunaj in primerjaj verifikacijsko številko
64 calculated_digit = calculate_verification_digit(type_code, dni)
65 if calculated_digit != verification_digit:
66 return False, "Neveljavna verifikacijska številka"
67
68 return True, "Veljavna CUIT/CUIL"
69
70# Primer uporabe
71print(generate_cuit_cuil(20, 12345678)) # Generiraj za specifično DNI
72print(generate_cuit_cuil(27)) # Generiraj z naključno DNI
73print(validate_cuit_cuil("20-12345678-9")) # Preveri CUIT/CUIL
74
1function calculateVerificationDigit(typeCode, dni) {
2 // Pretvori v niz in zagotovi, da je DNI 8 številk z vodilnimi ničlami
3 const typeCodeStr = typeCode.toString();
4 const dniStr = dni.toString().padStart(8, '0');
5
6 // Združi kodo tipa in DNI
7 const digits = typeCodeStr + dniStr;
8
9 // Teže za vsak položaj
10 const weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
11
12 // Izračunaj vsoto produktov
13 let sumProducts = 0;
14 for (let i = 0; i < 10; i++) {
15 sumProducts += parseInt(digits[i]) * weights[i];
16 }
17
18 // Izračunaj verifikacijsko številko
19 let verificationDigit = 11 - (sumProducts % 11);
20
21 // Posebni primeri
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 // Veljavne kode tipov
33 const validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
34
35 if (!validTypeCodes.includes(typeCode)) {
36 throw new Error(`Neveljavna koda tipa. Mora biti ena od: ${validTypeCodes.join(', ')}`);
37 }
38
39 // Generiraj naključno DNI, če ni podano
40 if (dni === undefined) {
41 dni = Math.floor(Math.random() * 90000000) + 10000000;
42 }
43
44 // Izračunaj verifikacijsko številko
45 const verificationDigit = calculateVerificationDigit(typeCode, dni);
46
47 // Oblikuj CUIT/CUIL
48 return `${typeCode}-${dni.toString().padStart(8, '0')}-${verificationDigit}`;
49}
50
51function validateCuitCuil(cuitCuil) {
52 // Odstrani vezaje, če so prisotni
53 const cuitCuilClean = cuitCuil.replace(/-/g, '');
54
55 // Preveri osnovno obliko
56 if (!/^\d{11}$/.test(cuitCuilClean)) {
57 return { isValid: false, errorMessage: 'Neveljavna oblika' };
58 }
59
60 // Izvleči dele
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 // Preveri veljavnost kode tipa
66 const validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
67 if (!validTypeCodes.includes(typeCode)) {
68 return { isValid: false, errorMessage: 'Neveljavna koda tipa' };
69 }
70
71 // Izračunaj in primerjaj verifikacijsko številko
72 const calculatedDigit = calculateVerificationDigit(typeCode, dni);
73 if (calculatedDigit !== verificationDigit) {
74 return { isValid: false, errorMessage: 'Neveljavna verifikacijska številka' };
75 }
76
77 return { isValid: true };
78}
79
80// Primer uporabe
81console.log(generateCuitCuil(20, 12345678)); // Generiraj za specifično DNI
82console.log(generateCuitCuil(27)); // Generiraj z naključno DNI
83console.log(validateCuitCuil("20-12345678-9")); // Preveri 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 v niz in zagotovi, da je DNI 8 številk z vodilnimi ničlami
11 String typeCodeStr = String.valueOf(typeCode);
12 String dniStr = String.format("%08d", dni);
13
14 // Združi kodo tipa in DNI
15 String digits = typeCodeStr + dniStr;
16
17 // Izračunaj vsoto produktov
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 verifikacijsko številko
24 int verificationDigit = 11 - (sumProducts % 11);
25
26 // Posebni primeri
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("Neveljavna koda tipa. Mora biti ena od: " + VALID_TYPE_CODES);
39 }
40
41 // Generiraj naključno DNI, če ni podano
42 if (dni == null) {
43 Random random = new Random();
44 dni = 10000000 + random.nextInt(90000000);
45 }
46
47 // Izračunaj verifikacijsko številko
48 int verificationDigit = calculateVerificationDigit(typeCode, dni);
49
50 // Oblikuj CUIT/CUIL
51 return String.format("%d-%08d-%d", typeCode, dni, verificationDigit);
52 }
53
54 public static ValidationResult validateCuitCuil(String cuitCuil) {
55 // Odstrani vezaje, če so prisotni
56 String cuitCuilClean = cuitCuil.replace("-", "");
57
58 // Preveri osnovno obliko
59 if (!cuitCuilClean.matches("\\d{11}")) {
60 return new ValidationResult(false, "Neveljavna oblika");
61 }
62
63 // Izvleči dele
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 // Preveri veljavnost kode tipa
69 if (!VALID_TYPE_CODES.contains(typeCode)) {
70 return new ValidationResult(false, "Neveljavna koda tipa");
71 }
72
73 // Izračunaj in primerjaj verifikacijsko številko
74 int calculatedDigit = calculateVerificationDigit(typeCode, dni);
75 if (calculatedDigit != verificationDigit) {
76 return new ValidationResult(false, "Neveljavna verifikacijska številka");
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 uporabe
102 System.out.println(generateCuitCuil(20, 12345678)); // Generiraj za specifično DNI
103 System.out.println(generateCuitCuil(27, null)); // Generiraj z naključno DNI
104 System.out.println(validateCuitCuil("20-12345678-9").isValid()); // Preveri CUIT/CUIL
105 }
106}
107
1<?php
2
3function calculateVerificationDigit($typeCode, $dni) {
4 // Pretvori v niz in zagotovi, da je DNI 8 številk z vodilnimi ničlami
5 $typeCodeStr = (string)$typeCode;
6 $dniStr = str_pad((string)$dni, 8, '0', STR_PAD_LEFT);
7
8 // Združi kodo tipa in DNI
9 $digits = $typeCodeStr . $dniStr;
10
11 // Teže za vsak položaj
12 $weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
13
14 // Izračunaj vsoto produktov
15 $sumProducts = 0;
16 for ($i = 0; $i < 10; $i++) {
17 $sumProducts += (int)$digits[$i] * $weights[$i];
18 }
19
20 // Izračunaj verifikacijsko številko
21 $verificationDigit = 11 - ($sumProducts % 11);
22
23 // Posebni primeri
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 // Veljavne kode tipov
35 $validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
36
37 if (!in_array($typeCode, $validTypeCodes)) {
38 throw new Exception("Neveljavna koda tipa. Mora biti ena od: " . implode(', ', $validTypeCodes));
39 }
40
41 // Generiraj naključno DNI, če ni podano
42 if ($dni === null) {
43 $dni = rand(10000000, 99999999);
44 }
45
46 // Izračunaj verifikacijsko številko
47 $verificationDigit = calculateVerificationDigit($typeCode, $dni);
48
49 // Oblikuj CUIT/CUIL
50 return sprintf("%d-%08d-%d", $typeCode, $dni, $verificationDigit);
51}
52
53function validateCuitCuil($cuitCuil) {
54 // Odstrani vezaje, če so prisotni
55 $cuitCuilClean = str_replace('-', '', $cuitCuil);
56
57 // Preveri osnovno obliko
58 if (!preg_match('/^\d{11}$/', $cuitCuilClean)) {
59 return ['isValid' => false, 'errorMessage' => 'Neveljavna oblika'];
60 }
61
62 // Izvleči dele
63 $typeCode = (int)substr($cuitCuilClean, 0, 2);
64 $dni = (int)substr($cuitCuilClean, 2, 8);
65 $verificationDigit = (int)substr($cuitCuilClean, 10, 1);
66
67 // Preveri veljavnost kode tipa
68 $validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
69 if (!in_array($typeCode, $validTypeCodes)) {
70 return ['isValid' => false, 'errorMessage' => 'Neveljavna koda tipa'];
71 }
72
73 // Izračunaj in primerjaj verifikacijsko številko
74 $calculatedDigit = calculateVerificationDigit($typeCode, $dni);
75 if ($calculatedDigit !== $verificationDigit) {
76 return ['isValid' => false, 'errorMessage' => 'Neveljavna verifikacijska številka'];
77 }
78
79 return ['isValid' => true];
80}
81
82// Primer uporabe
83echo generateCuitCuil(20, 12345678) . "\n"; // Generiraj za specifično DNI
84echo generateCuitCuil(27) . "\n"; // Generiraj z naključno DNI
85var_dump(validateCuitCuil("20-12345678-9")); // Preveri CUIT/CUIL
86?>
87
CUIT (Clave Única de Identificación Tributaria) se uporablja za davčno identifikacijo in je dodeljen tako posameznikom kot pravnim osebam, ki morajo plačevati davke v Argentini. CUIL (Clave Única de Identificación Laboral) je specifično za delavce in se uporablja za delovne in socialne varnostne namene. Čeprav imata enak format in algoritem izračuna, služita različnim administrativnim namenom.
Za posameznike:
Za podjetja in organizacije:
Verifikacijska številka se izračuna z algoritmom, ki temelji na uteženi vsoti. Vsaka od prvih 10 številk se pomnoži z ustrezno težo (5, 4, 3, 2, 7, 6, 5, 4, 3, 2), rezultati pa se seštejejo. Verifikacijska številka je 11 minus ostanek, ko se ta vsota deli z 11. Posebni primeri: če je rezultat 11, je verifikacijska številka 0; če je rezultat 10, je verifikacijska številka 9.
Ne, to orodje je zasnovano za testne in izobraževalne namene. Generirane številke so matematično veljavne v skladu z algoritmom CUIT/CUIL, vendar niso uradno registrirane pri argentinskih davčnih organih (AFIP). Za uradno registracijo CUIT/CUIL morajo posamezniki in podjetja slediti ustreznim pravnim postopkom preko AFIP.
Validacija lahko ne uspe iz več razlogov:
Čeprav so številke CUIT/CUIL običajno zapisane in prikazane z vezaji (XX-XXXXXXXX-X), vezaji niso del dejanske številke za namene izračuna. Naš validator sprejema oba formata (s vezaji ali brez) in bo ustrezno preveril oba formata.
Ne, del DNI mora vedno imeti natančno 8 številk. Če ima dejanska DNI manj številk, jo je treba dopolniti z vodilnimi ničlami, da doseže 8 številk. Na primer, če je nekdo DNI 1234567, bo v CUIT/CUIL predstavljena kot 01234567.
Da preverite, ali je CUIT/CUIL uradno registriran in aktiven, bi morali uporabiti uradno spletno stran ali storitve AFIP (Administración Federal de Ingresos Públicos). Naše orodje le preverja matematično veljavnost številke, ne pa njenega uradnega statusa registracije.
Da, lahko integrirate algoritem in logiko, prikazano v tem orodju, v svoje komercialne aplikacije. Algoritem validacije CUIT/CUIL je javni standard. Vendar pa priporočamo, da za produkcijska okolja implementirate ustrezno obravnavo napak in razmislite o dodatni validaciji proti uradnim virom, kadar je to potrebno.
Ne, to orodje ne shranjuje nobenih informacij, ki jih vnesete ali generirate. Vse obdelave potekajo na strani odjemalca v vašem brskalniku in nobeni podatki se ne pošiljajo ali shranjujejo na naših strežnikih. To zagotavlja zasebnost in varnost vseh informacij, ki jih vnesete.
AFIP (Administración Federal de Ingresos Públicos). "CUIT/CUIL/CDI." Uradna spletna stran. https://www.afip.gob.ar/
Ministrstvo za delo, zaposlovanje in socialno varnost. "CUIL - Clave Única de Identificación Laboral." https://www.argentina.gob.ar/trabajo
ANSES (Administración Nacional de la Seguridad Social). "Pridobite svoj CUIL." https://www.anses.gob.ar/
Uradni bilten Republike Argentina. "Resolución General AFIP 2854/2010: Postopek. Clave Única de Identificación Tributaria (C.U.I.T.)."
Davčni zakonik Republike Argentina. "Identifikacija in registracija davkoplačevalcev."
Ste pripravljeni generirati ali preveriti argentinske številke CUIT/CUIL? Preizkusite naše orodje zdaj in poenostavite svoj postopek testiranja!
Odkrijte več orodij, ki bi lahko bila koristna za vaš delovni proces