Generator i Walidator Argentyńskiego Numeru CUIT/CUIL

Generuj ważne argentyńskie numery CUIT/CUIL do testowania lub waliduj istniejące. Proste narzędzie dla deweloperów pracujących z argentyńskimi numerami identyfikacji podatkowej i pracy.

Generator CUIT/CUIL

Wprowadź 8-cyfrowy numer DNI lub użyj generatora losowego

Wygenerowany CUIT/CUIL

📚

Dokumentacja

Argentyński generator i walidator CUIT/CUIL

Wprowadzenie

Argentyński CUIT (Clave Única de Identificación Tributaria) i CUIL (Clave Única de Identificación Laboral) to unikalne numery identyfikacyjne używane w Argentynie do celów podatkowych i zatrudnienia, odpowiednio. Te 11-cyfrowe kody są niezbędne dla osób fizycznych i firm do legalnego funkcjonowania w argentyńskim systemie gospodarczym. Nasze narzędzie do generowania i walidacji CUIT/CUIL oferuje prosty i efektywny sposób generowania ważnych numerów CUIT/CUIL do celów testowych oraz walidacji istniejących numerów, aby upewnić się, że są zgodne z oficjalnym formatem i algorytmem weryfikacyjnym.

Niezależnie od tego, czy jesteś programistą testującym aplikacje obsługujące argentyńskie identyfikatory podatkowe, specjalistą QA weryfikującym funkcjonalność systemu, czy po prostu potrzebujesz zrozumieć, jak działają te numery identyfikacyjne, to narzędzie oferuje proste rozwiązanie bez zbędnych komplikacji. Narzędzie ma dwie główne funkcje: generator, który losowo tworzy ważne numery CUIT/CUIL lub na podstawie określonych parametrów, oraz walidator, który weryfikuje, czy dany numer CUIT/CUIL jest zgodny z poprawnym formatem i zasadami obliczeń.

Struktura i obliczenia CUIT/CUIL

Zrozumienie formatu

Ważny numer CUIT/CUIL składa się z 11 cyfr, zazwyczaj wyświetlanych w formacie XX-XXXXXXXX-X:

  1. Kod typu (pierwsze 2 cyfry): Wskazuje typ podmiotu

    • 20, 23, 24: Mężczyźni (CUIL)
    • 27: Kobiety (CUIL)
    • 30, 33, 34: Firmy i organizacje (CUIT)
  2. Numer DNI (środkowe 8 cyfr): Dla osób fizycznych jest to ich numer dowodu osobistego (DNI), uzupełniony zerami wiodącymi, jeśli to konieczne, aby osiągnąć 8 cyfr. Dla firm jest to unikalny przypisany numer.

  3. Cyfra weryfikacyjna (ostatnia cyfra): Cyfra kontrolna obliczana za pomocą określonego algorytmu, aby zweryfikować cały numer.

Obliczanie cyfry weryfikacyjnej

Cyfra weryfikacyjna obliczana jest za pomocą następującego algorytmu:

  1. Weź pierwsze 10 cyfr CUIT/CUIL (kod typu + DNI)
  2. Pomnóż każdą cyfrę przez odpowiadającą wagę z tej sekwencji: 5, 4, 3, 2, 7, 6, 5, 4, 3, 2
  3. Zsumuj wszystkie uzyskane iloczyny
  4. Oblicz 11 minus resztę z dzielenia sumy przez 11
  5. Jeśli wynik to 11, cyfra weryfikacyjna to 0
  6. Jeśli wynik to 10, cyfra weryfikacyjna to 9
  7. W przeciwnym razie wynik to cyfra weryfikacyjna

Matematycznie można to wyrazić jako:

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

Gdzie:

  • VDVD to cyfra weryfikacyjna
  • did_i to ii-ta cyfra z pierwszych 10 cyfr
  • wiw_i to odpowiadająca waga z sekwencji [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
  • Przypadki szczególne: jeśli VD=11VD = 11, to VD=0VD = 0, jeśli VD=10VD = 10, to VD=9VD = 9

Przewodnik krok po kroku

Korzystanie z generatora

  1. Wybierz zakładkę "Generator" na górze interfejsu narzędzia.

  2. Wybierz kod typu z menu rozwijanego:

    • 20: Mężczyzna (CUIL)
    • 23: Firma (CUIT)
    • 24: Tymczasowa firma (CUIT)
    • 27: Kobieta (CUIL)
    • 30: Korporacja (CUIT)
    • 33: Stowarzyszenie cywilne (CUIT)
    • 34: Fundacja (CUIT)
  3. Wprowadź numer DNI (opcjonalnie):

    • Wprowadź 8-cyfrowy numer DNI w podanym polu
    • Jeśli pozostawisz puste, narzędzie użyje losowo wygenerowanego DNI
    • Jeśli wprowadzisz mniej niż 8 cyfr, system uzupełni zerami wiodącymi
  4. Generuj losowy DNI (opcjonalnie):

    • Kliknij przycisk "Losowy", aby wygenerować losowy 8-cyfrowy numer DNI
  5. Wyświetl wygenerowany CUIT/CUIL:

    • Narzędzie automatycznie wyświetla ważny CUIT/CUIL na podstawie twoich danych
    • Format będzie XX-XXXXXXXX-X z poprawną cyfrą weryfikacyjną
  6. Skopiuj wynik:

    • Kliknij ikonę kopiowania, aby skopiować wygenerowany CUIT/CUIL do schowka
    • Pojawi się komunikat potwierdzający, gdy skopiowanie zakończy się sukcesem

Korzystanie z walidatora

  1. Wybierz zakładkę "Walidator" na górze interfejsu narzędzia.

  2. Wprowadź CUIT/CUIL do walidacji:

    • Wprowadź CUIT/CUIL w formacie XX-XXXXXXXX-X
    • Narzędzie automatycznie sformatuje twój wpis z myślnikami podczas pisania
    • Możesz również wprowadzić numer bez myślników (XXXXXXXXXXX)
  3. Kliknij przycisk "Waliduj":

    • Narzędzie sprawdzi format, kod typu i cyfrę weryfikacyjną
  4. Wyświetl wynik walidacji:

    • Dla ważnych numerów CUIT/CUIL pojawi się zielony komunikat o sukcesie
    • Dla nieprawidłowych numerów pojawi się czerwony komunikat o błędzie wyjaśniający problem:
      • Nieprawidłowy format (musi być XX-XXXXXXXX-X)
      • Nieprawidłowy kod typu (musi być jednym z: 20, 23, 24, 27, 30, 33, 34)
      • Nieprawidłowa cyfra weryfikacyjna
  5. Dodatkowe informacje:

    • Dla ważnych numerów narzędzie wyświetla szczegółowy podział komponentów:
      • Kod typu i jego znaczenie
      • Numer DNI
      • Cyfra weryfikacyjna

Przykłady użycia

Rozwój i testowanie

  1. Rozwój oprogramowania: Generuj ważne numery CUIT/CUIL do testowania aplikacji obsługujących argentyńskie identyfikatory podatkowe, takie jak:

    • Platformy e-commerce
    • Oprogramowanie księgowe
    • Systemy zarządzania HR
    • Portale usług rządowych
    • Aplikacje bankowe
  2. Zapełnianie bazy danych: Twórz realistyczne dane testowe dla systemów przechowujących informacje o użytkownikach w Argentynie, zapewniając, że ograniczenia bazy danych i zasady walidacji działają poprawnie.

  3. Testowanie walidacji formularzy: Testuj walidację wejścia dla formularzy internetowych, które zbierają informacje o CUIT/CUIL, weryfikując, że odpowiednie komunikaty o błędach pojawiają się dla nieprawidłowych wpisów.

  4. Testowanie API: Generuj ważne ładunki dla punktów końcowych API, które wymagają numerów CUIT/CUIL, zapewniając, że twoje testy integracyjne używają ważnych danych.

  5. Automatyzacja QA: Włącz generowanie CUIT/CUIL do skryptów testów automatycznych, aby tworzyć dynamiczne przypadki testowe zamiast używać statycznych danych testowych.

Cele edukacyjne

  1. Nauka algorytmów walidacji: Zrozum, jak działają algorytmy cyfr kontrolnych w praktyce, obserwując proces weryfikacji CUIT/CUIL w akcji.

  2. Nauczanie walidacji danych: Użyj jako przykładu edukacyjnego podczas nauczania technik walidacji formularzy nowym programistom.

  3. Zrozumienie wymagań biznesowych Argentyny: Dowiedz się o systemie identyfikacji używanym w Argentynie dla międzynarodowego rozwoju biznesu.

Alternatywy

Chociaż nasze narzędzie zapewnia prosty sposób generowania i walidacji numerów CUIT/CUIL, istnieją alternatywne podejścia, które możesz rozważyć:

  1. Oficjalna walidacja rządowa: W przypadku środowisk produkcyjnych zawsze waliduj numery CUIT/CUIL w oficjalnej bazie danych AFIP (Administración Federal de Ingresos Públicos), gdy to możliwe.

  2. Biblioteki i pakiety: Wiele języków programowania ma biblioteki specjalnie zaprojektowane do walidacji argentyńskich identyfikatorów podatkowych:

    • JavaScript: pakiet npm validar-cuit
    • PHP: biblioteka afip-php
    • Python: pakiet py-cuit
  3. Ręczne obliczenia: Dla celów edukacyjnych możesz obliczyć cyfrę weryfikacyjną ręcznie, korzystając z opisanego wcześniej algorytmu.

  4. Kompleksowe usługi walidacji biznesowej: Dla aplikacji przedsiębiorstw rozważ korzystanie z kompleksowych usług walidacji, które nie tylko sprawdzają format, ale także weryfikują istnienie i status podmiotu związanego z CUIT/CUIL.

Historia systemu CUIT/CUIL

System identyfikacji CUIT/CUIL w Argentynie przeszedł znaczny rozwój od momentu jego powstania:

Początki i wdrożenie

CUIT (Clave Única de Identificación Tributaria) został po raz pierwszy wprowadzony w Argentynie w latach 70. XX wieku w ramach wysiłków na rzecz modernizacji systemu poboru podatków. Federalna Administracja Dochodów Publicznych (AFIP) wdrożyła ten unikalny identyfikator, aby skuteczniej śledzić podatników i zmniejszyć unikanie opodatkowania.

CUIL (Clave Única de Identificación Laboral) został później wprowadzony, aby szczególnie identyfikować pracowników w systemie zabezpieczeń społecznych, tworząc rozróżnienie między identyfikacją podatkową a identyfikacją pracy, zachowując jednocześnie spójny format.

Ewolucja i cyfryzacja

W latach 90. XX wieku, gdy Argentyna przeszła znaczące reformy gospodarcze, system CUIT/CUIL stał się coraz ważniejszy dla śledzenia działalności gospodarczej. System został dalej zdigitalizowany, a wdrożono systemy weryfikacji online.

Początek lat 2000 to czas integracji systemu CUIT/CUIL z różnymi cyfrowymi usługami rządowymi, co uczyniło go istotnym elementem argentyńskich inicjatyw e-rządu. W tym okresie ustandaryzowano również algorytm weryfikacji i format, który pozostaje w użyciu do dziś.

Ostatnie wydarzenia

W ostatnich latach AFIP poprawiła procesy bezpieczeństwa i weryfikacji dla numerów CUIT/CUIL, wdrażając bardziej zaawansowane systemy walidacji i integrując je z innymi bazami danych rządowymi. System odgrywa teraz kluczową rolę w wysiłkach Argentyny na rzecz walki z unikaniem opodatkowania i formalizacji gospodarki.

Dziś CUIT/CUIL jest używany nie tylko do celów podatkowych i zatrudnienia, ale także do szerokiego zakresu działań, w tym transakcji bankowych, transakcji nieruchomości, usług komunalnych i zakupów online, co czyni go niezbędnym identyfikatorem zarówno dla osób, jak i firm działających w Argentynie.

Przykłady kodu

Python

1def calculate_verification_digit(type_code, dni):
2    # Konwertuj na string i upewnij się, że DNI ma 8 cyfr z zerami wiodącymi
3    type_code_str = str(type_code)
4    dni_str = str(dni).zfill(8)
5    
6    # Połącz kod typu i DNI
7    digits = type_code_str + dni_str
8    
9    # Wagi dla każdej pozycji
10    weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
11    
12    # Oblicz sumę iloczynów
13    sum_products = sum(int(digits[i]) * weights[i] for i in range(10))
14    
15    # Oblicz cyfrę weryfikacyjną
16    verification_digit = 11 - (sum_products % 11)
17    
18    # Przypadki szczególne
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    # Ważne kody typu
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"Nieprawidłowy kod typu. Musi być jednym z: {valid_type_codes}")
34    
35    # Generuj losowy DNI, jeśli nie podano
36    if dni is None:
37        dni = random.randint(10000000, 99999999)
38    
39    # Oblicz cyfrę weryfikacyjną
40    verification_digit = calculate_verification_digit(type_code, dni)
41    
42    # Formatuj CUIT/CUIL
43    return f"{type_code}-{str(dni).zfill(8)}-{verification_digit}"
44
45def validate_cuit_cuil(cuit_cuil):
46    # Usuń myślniki, jeśli są obecne
47    cuit_cuil_clean = cuit_cuil.replace("-", "")
48    
49    # Sprawdź podstawowy format
50    if not cuit_cuil_clean.isdigit() or len(cuit_cuil_clean) != 11:
51        return False, "Nieprawidłowy format"
52    
53    # Wyodrębnij części
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    # Waliduj kod typu
59    valid_type_codes = [20, 23, 24, 27, 30, 33, 34]
60    if type_code not in valid_type_codes:
61        return False, "Nieprawidłowy kod typu"
62    
63    # Oblicz i porównaj cyfrę weryfikacyjną
64    calculated_digit = calculate_verification_digit(type_code, dni)
65    if calculated_digit != verification_digit:
66        return False, "Nieprawidłowa cyfra weryfikacyjna"
67    
68    return True, "Ważny CUIT/CUIL"
69
70# Przykład użycia
71print(generate_cuit_cuil(20, 12345678))  # Generuj dla konkretnego DNI
72print(generate_cuit_cuil(27))  # Generuj z losowym DNI
73print(validate_cuit_cuil("20-12345678-9"))  # Waliduj CUIT/CUIL
74

JavaScript

1function calculateVerificationDigit(typeCode, dni) {
2  // Konwertuj na string i upewnij się, że DNI ma 8 cyfr z zerami wiodącymi
3  const typeCodeStr = typeCode.toString();
4  const dniStr = dni.toString().padStart(8, '0');
5  
6  // Połącz kod typu i DNI
7  const digits = typeCodeStr + dniStr;
8  
9  // Wagi dla każdej pozycji
10  const weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
11  
12  // Oblicz sumę iloczynów
13  let sumProducts = 0;
14  for (let i = 0; i < 10; i++) {
15    sumProducts += parseInt(digits[i]) * weights[i];
16  }
17  
18  // Oblicz cyfrę weryfikacyjną
19  let verificationDigit = 11 - (sumProducts % 11);
20  
21  // Przypadki szczególne
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  // Ważne kody typu
33  const validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
34  
35  if (!validTypeCodes.includes(typeCode)) {
36    throw new Error(`Nieprawidłowy kod typu. Musi być jednym z: ${validTypeCodes.join(', ')}`);
37  }
38  
39  // Generuj losowy DNI, jeśli nie podano
40  if (dni === undefined) {
41    dni = Math.floor(Math.random() * 90000000) + 10000000;
42  }
43  
44  // Oblicz cyfrę weryfikacyjną
45  const verificationDigit = calculateVerificationDigit(typeCode, dni);
46  
47  // Formatuj CUIT/CUIL
48  return `${typeCode}-${dni.toString().padStart(8, '0')}-${verificationDigit}`;
49}
50
51function validateCuitCuil(cuitCuil) {
52  // Usuń myślniki, jeśli są obecne
53  const cuitCuilClean = cuitCuil.replace(/-/g, '');
54  
55  // Sprawdź podstawowy format
56  if (!/^\d{11}$/.test(cuitCuilClean)) {
57    return { isValid: false, errorMessage: 'Nieprawidłowy format' };
58  }
59  
60  // Wyodrębnij części
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  // Waliduj kod typu
66  const validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
67  if (!validTypeCodes.includes(typeCode)) {
68    return { isValid: false, errorMessage: 'Nieprawidłowy kod typu' };
69  }
70  
71  // Oblicz i porównaj cyfrę weryfikacyjną
72  const calculatedDigit = calculateVerificationDigit(typeCode, dni);
73  if (calculatedDigit !== verificationDigit) {
74    return { isValid: false, errorMessage: 'Nieprawidłowa cyfra weryfikacyjna' };
75  }
76  
77  return { isValid: true };
78}
79
80// Przykład użycia
81console.log(generateCuitCuil(20, 12345678)); // Generuj dla konkretnego DNI
82console.log(generateCuitCuil(27)); // Generuj z losowym DNI
83console.log(validateCuitCuil("20-12345678-9")); // Waliduj 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        // Konwertuj na string i upewnij się, że DNI ma 8 cyfr z zerami wiodącymi
11        String typeCodeStr = String.valueOf(typeCode);
12        String dniStr = String.format("%08d", dni);
13        
14        // Połącz kod typu i DNI
15        String digits = typeCodeStr + dniStr;
16        
17        // Oblicz sumę iloczynów
18        int sumProducts = 0;
19        for (int i = 0; i < 10; i++) {
20            sumProducts += Character.getNumericValue(digits.charAt(i)) * WEIGHTS[i];
21        }
22        
23        // Oblicz cyfrę weryfikacyjną
24        int verificationDigit = 11 - (sumProducts % 11);
25        
26        // Przypadki szczególne
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("Nieprawidłowy kod typu. Musi być jednym z: " + VALID_TYPE_CODES);
39        }
40        
41        // Generuj losowy DNI, jeśli nie podano
42        if (dni == null) {
43            Random random = new Random();
44            dni = 10000000 + random.nextInt(90000000);
45        }
46        
47        // Oblicz cyfrę weryfikacyjną
48        int verificationDigit = calculateVerificationDigit(typeCode, dni);
49        
50        // Formatuj CUIT/CUIL
51        return String.format("%d-%08d-%d", typeCode, dni, verificationDigit);
52    }
53    
54    public static ValidationResult validateCuitCuil(String cuitCuil) {
55        // Usuń myślniki, jeśli są obecne
56        String cuitCuilClean = cuitCuil.replace("-", "");
57        
58        // Sprawdź podstawowy format
59        if (!cuitCuilClean.matches("\\d{11}")) {
60            return new ValidationResult(false, "Nieprawidłowy format");
61        }
62        
63        // Wyodrębnij części
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        // Waliduj kod typu
69        if (!VALID_TYPE_CODES.contains(typeCode)) {
70            return new ValidationResult(false, "Nieprawidłowy kod typu");
71        }
72        
73        // Oblicz i porównaj cyfrę weryfikacyjną
74        int calculatedDigit = calculateVerificationDigit(typeCode, dni);
75        if (calculatedDigit != verificationDigit) {
76            return new ValidationResult(false, "Nieprawidłowa cyfra weryfikacyjna");
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        // Przykład użycia
102        System.out.println(generateCuitCuil(20, 12345678)); // Generuj dla konkretnego DNI
103        System.out.println(generateCuitCuil(27, null)); // Generuj z losowym DNI
104        System.out.println(validateCuitCuil("20-12345678-9").isValid()); // Waliduj CUIT/CUIL
105    }
106}
107

PHP

1<?php
2
3function calculateVerificationDigit($typeCode, $dni) {
4    // Konwertuj na string i upewnij się, że DNI ma 8 cyfr z zerami wiodącymi
5    $typeCodeStr = (string)$typeCode;
6    $dniStr = str_pad((string)$dni, 8, '0', STR_PAD_LEFT);
7    
8    // Połącz kod typu i DNI
9    $digits = $typeCodeStr . $dniStr;
10    
11    // Wagi dla każdej pozycji
12    $weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
13    
14    // Oblicz sumę iloczynów
15    $sumProducts = 0;
16    for ($i = 0; $i < 10; $i++) {
17        $sumProducts += (int)$digits[$i] * $weights[$i];
18    }
19    
20    // Oblicz cyfrę weryfikacyjną
21    $verificationDigit = 11 - ($sumProducts % 11);
22    
23    // Przypadki szczególne
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    // Ważne kody typu
35    $validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
36    
37    if (!in_array($typeCode, $validTypeCodes)) {
38        throw new Exception("Nieprawidłowy kod typu. Musi być jednym z: " . implode(', ', $validTypeCodes));
39    }
40    
41    // Generuj losowy DNI, jeśli nie podano
42    if ($dni === null) {
43        $dni = rand(10000000, 99999999);
44    }
45    
46    // Oblicz cyfrę weryfikacyjną
47    $verificationDigit = calculateVerificationDigit($typeCode, $dni);
48    
49    // Formatuj CUIT/CUIL
50    return sprintf("%d-%08d-%d", $typeCode, $dni, $verificationDigit);
51}
52
53function validateCuitCuil($cuitCuil) {
54    // Usuń myślniki, jeśli są obecne
55    $cuitCuilClean = str_replace('-', '', $cuitCuil);
56    
57    // Sprawdź podstawowy format
58    if (!preg_match('/^\d{11}$/', $cuitCuilClean)) {
59        return ['isValid' => false, 'errorMessage' => 'Nieprawidłowy format'];
60    }
61    
62    // Wyodrębnij części
63    $typeCode = (int)substr($cuitCuilClean, 0, 2);
64    $dni = (int)substr($cuitCuilClean, 2, 8);
65    $verificationDigit = (int)substr($cuitCuilClean, 10, 1);
66    
67    // Waliduj kod typu
68    $validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
69    if (!in_array($typeCode, $validTypeCodes)) {
70        return ['isValid' => false, 'errorMessage' => 'Nieprawidłowy kod typu'];
71    }
72    
73    // Oblicz i porównaj cyfrę weryfikacyjną
74    $calculatedDigit = calculateVerificationDigit($typeCode, $dni);
75    if ($calculatedDigit !== $verificationDigit) {
76        return ['isValid' => false, 'errorMessage' => 'Nieprawidłowa cyfra weryfikacyjna'];
77    }
78    
79    return ['isValid' => true];
80}
81
82// Przykład użycia
83echo generateCuitCuil(20, 12345678) . "\n"; // Generuj dla konkretnego DNI
84echo generateCuitCuil(27) . "\n"; // Generuj z losowym DNI
85var_dump(validateCuitCuil("20-12345678-9")); // Waliduj CUIT/CUIL
86?>
87

Najczęściej zadawane pytania

Jaka jest różnica między CUIT a CUIL?

CUIT (Clave Única de Identificación Tributaria) jest używany do celów identyfikacji podatkowej i jest przypisywany zarówno osobom fizycznym, jak i podmiotom prawnym, które muszą płacić podatki w Argentynie. CUIL (Clave Única de Identificación Laboral) jest specyficznie dla pracowników i jest używany do celów zatrudnienia i zabezpieczeń społecznych. Chociaż mają ten sam format i algorytm obliczeń, służą różnym celom administracyjnym.

Które kody typu są używane dla osób fizycznych, a które dla firm?

Dla osób fizycznych:

  • 20, 23, 24: Mężczyźni (CUIL)
  • 27: Kobiety (CUIL)

Dla firm i organizacji:

  • 30: Korporacje (CUIT)
  • 33: Stowarzyszenia cywilne (CUIT)
  • 34: Fundacje (CUIT)

Jak obliczana jest cyfra weryfikacyjna?

Cyfra weryfikacyjna jest obliczana za pomocą algorytmu opartego na wagach. Każda z pierwszych 10 cyfr jest mnożona przez odpowiadającą wagę (5, 4, 3, 2, 7, 6, 5, 4, 3, 2), a wyniki są sumowane. Cyfra weryfikacyjna to 11 minus reszta z dzielenia tej sumy przez 11. Przypadki szczególne: jeśli wynik to 11, cyfra weryfikacyjna to 0; jeśli wynik to 10, cyfra weryfikacyjna to 9.

Czy mogę użyć tego narzędzia do generowania prawdziwych, oficjalnych numerów CUIT/CUIL?

Nie, to narzędzie jest zaprojektowane wyłącznie do celów testowych i edukacyjnych. Wygenerowane numery są matematycznie ważne zgodnie z algorytmem CUIT/CUIL, ale nie są oficjalnie zarejestrowane w argentyńskich organach podatkowych (AFIP). Aby uzyskać oficjalny numer CUIT/CUIL, osoby fizyczne i firmy muszą postępować zgodnie z odpowiednimi procedurami prawnymi przez AFIP.

Dlaczego moja walidacja CUIT/CUIL nie powiodła się, mimo że format wygląda poprawnie?

Walidacja może nie powieść się z kilku powodów:

  1. Kod typu nie jest jednym z ważnych kodów (20, 23, 24, 27, 30, 33, 34)
  2. Cyfra weryfikacyjna nie zgadza się z obliczoną wartością na podstawie algorytmu
  3. Format jest nieprawidłowy (powinien być XX-XXXXXXXX-X)
  4. Wprowadzone są znaki nienumeryczne (oprócz myślników)

Czy myślniki są wymagane w numerach CUIT/CUIL?

Chociaż numery CUIT/CUIL są powszechnie pisane i wyświetlane z myślnikami (XX-XXXXXXXX-X), myślniki nie są częścią rzeczywistego numeru do celów obliczeniowych. Nasz walidator akceptuje oba formaty (z myślnikami lub bez) i poprawnie je weryfikuje.

Czy numer CUIT/CUIL może mieć mniej niż 8 cyfr w części DNI?

Nie, część DNI musi mieć zawsze dokładnie 8 cyfr. Jeśli rzeczywisty DNI ma mniej cyfr, musi być uzupełniony zerami wiodącymi, aby osiągnąć 8 cyfr. Na przykład, jeśli ktoś ma DNI 1234567, w CUIT/CUIL będzie reprezentowany jako 01234567.

Jak mogę zweryfikować, czy CUIT/CUIL jest oficjalnie zarejestrowany w Argentynie?

Aby zweryfikować, czy CUIT/CUIL jest oficjalnie zarejestrowany i aktywny, powinieneś skorzystać z oficjalnej strony internetowej AFIP (Administración Federal de Ingresos Públicos) lub usług. Nasze narzędzie tylko weryfikuje matematyczną ważność numeru, nie jego status oficjalnej rejestracji.

Czy mogę użyć tego narzędzia w mojej komercyjnej aplikacji?

Tak, możesz zintegrować algorytm i logikę przedstawioną w tym narzędziu w swoich komercyjnych aplikacjach. Algorytm walidacji CUIT/CUIL jest standardem publicznym. Jednak w przypadku środowisk produkcyjnych zalecamy wdrożenie odpowiedniego zarządzania błędami i rozważenie dodatkowej walidacji w stosunku do oficjalnych źródeł, gdy to konieczne.

Czy narzędzie przechowuje jakiekolwiek wygenerowane lub zwalidowane numery CUIT/CUIL?

Nie, to narzędzie nie przechowuje żadnych informacji wprowadzonych ani wygenerowanych. Wszystkie operacje są wykonywane po stronie klienta w twojej przeglądarce, a żadne dane nie są wysyłane ani przechowywane na naszych serwerach. Zapewnia to prywatność i bezpieczeństwo wszelkich informacji, które wprowadzasz.

Referencje

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

  2. Ministerstwo Pracy, Zatrudnienia i Zabezpieczenia Społecznego. "CUIL - Clave Única de Identificación Laboral." https://www.argentina.gob.ar/trabajo

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

  4. Biuletyn Oficjalny Republiki Argentyny. "Rozporządzenie Ogólne AFIP 2854/2010: Procedura. Clave Única de Identificación Tributaria (C.U.I.T.)."

  5. Kodeks Podatkowy Republiki Argentyny. "Identyfikacja i rejestracja podatników."


Gotowy do generowania lub walidacji argentyńskich numerów CUIT/CUIL? Wypróbuj nasze narzędzie teraz i uprość swój proces testowania!