🛠️

Whiz Tools

Build • Create • Innovate

Argentiinalainen CUIT/CUIL-generaattori ja -validoija

Generoi voimassa olevia argentiinalaisia CUIT/CUIL-numeroita testaukseen tai validoi olemassa olevia. Yksinkertainen työkalu kehittäjille, jotka työskentelevät argentiinalaisten verotunnisten ja työvoimatunnisten parissa.

CUIT/CUIL Generaattori

Syötä 8-numeroisen DNI tai käytä satunnaista generaattoria

Luotu CUIT/CUIL

📚

Dokumentaatio

Argentiinalainen CUIT/CUIL-generaattori ja -validaattori

Johdanto

Argentiinalainen CUIT (Clave Única de Identificación Tributaria) ja CUIL (Clave Única de Identificación Laboral) ovat ainutlaatuisia tunnistenumeroita, joita käytetään Argentiinassa verotukseen ja työhön liittyvissä asioissa. Nämä 11-numeroiset koodit ovat välttämättömiä yksilöille ja yrityksille, jotta ne voivat toimia laillisesti Argentiinan talousjärjestelmässä. CUIT/CUIL-generaattori- ja -validaattorityökalumme tarjoaa yksinkertaisen ja tehokkaan tavan luoda voimassa olevia CUIT/CUIL-numeroita testaus tarkoituksiin ja validoida olemassa olevia numeroita varmistaakseen, että ne noudattavat virallista muotoa ja tarkistusalgoritmia.

Olitpa kehittäjä, joka testaa sovelluksia, jotka käsittelevät argentiinalaisia verotunnuksia, QA-asiantuntija, joka tarkistaa järjestelmän toimivuutta, tai tarvitset vain ymmärtääksesi, miten nämä tunnistenumerot toimivat, tämä työkalu tarjoaa yksinkertaisen ratkaisun ilman tarpeettomia monimutkaisuuksia. Työkalussa on kaksi päätoimintoa: generaattori, joka luo voimassa olevia CUIT/CUIL-numeroita satunnaisesti tai tiettyjen parametrien perusteella, ja validaattori, joka tarkistaa, noudattaako annettu CUIT/CUIL-numero oikeaa muotoa ja laskentaa sääntöjä.

CUIT/CUIL-rakenne ja laskenta

Muodon ymmärtäminen

Voimassa oleva CUIT/CUIL-numero koostuu 11 numerosta, jotka esitetään tyypillisesti muodossa XX-XXXXXXXX-X:

  1. Tyyppikoodi (ensimmäiset 2 numeroa): Ilmaisee entiteetin tyypin

    • 20, 23, 24: Miehet (CUIL)
    • 27: Naiset (CUIL)
    • 30, 33, 34: Yritykset ja organisaatiot (CUIT)
  2. DNI-numero (keskimmäiset 8 numeroa): Yksilöiden osalta tämä on heidän kansallinen henkilötunnusnumeronsa (DNI), jota täydennetään tarvittaessa etunollilla, jotta se saavuttaa 8 numeroa. Yrityksille tämä on ainutkertainen määrätty numero.

  3. Tarkistusnumero (viimeinen numero): Tarkistusnumero, joka lasketaan tietyn algoritmin avulla koko numeron validoimiseksi.

Tarkistusnumeron laskenta

Tarkistusnumero lasketaan seuraavalla algoritmilla:

  1. Ota CUIT/CUIL:n ensimmäiset 10 numeroa (tyyppikoodi + DNI)
  2. Kerro jokainen numero vastaavalla painolla seuraavasta sekvenssistä: 5, 4, 3, 2, 7, 6, 5, 4, 3, 2
  3. Laske kaikkien tulosten summa
  4. Laske 11 miinus summan jakojäännös 11:llä
  5. Jos tulos on 11, tarkistusnumero on 0
  6. Jos tulos on 10, tarkistusnumero on 9
  7. Muuten tulos on tarkistusnumero

Matemaattisesti tämä voidaan ilmaista seuraavasti:

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

Missä:

  • VDVD on tarkistusnumero
  • did_i on ii:n numero ensimmäisistä 10 numerosta
  • wiw_i on vastaava paino sekvenssistä [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
  • Erityistapaukset: jos VD=11VD = 11, niin VD=0VD = 0, jos VD=10VD = 10, niin VD=9VD = 9

Vaiheittainen opas

Generaattorin käyttäminen

  1. Valitse "Generaattori" välilehti työkalun käyttöliittymän yläosasta.

  2. Valitse Tyyppikoodi pudotusvalikosta:

    • 20: Mies (CUIL)
    • 23: Yritys (CUIT)
    • 24: Tilapäinen yritys (CUIT)
    • 27: Nainen (CUIL)
    • 30: Osakeyhtiö (CUIT)
    • 33: Yhdistys (CUIT)
    • 34: Säätiö (CUIT)
  3. Syötä DNI-numero (valinnainen):

    • Syötä 8-numeroista DNI-numeroa varten annettuun kenttään
    • Jos jätät sen tyhjäksi, työkalu käyttää satunnaisesti luotua DNI:tä
    • Jos syötät alle 8 numeroa, järjestelmä täyttää etunollilla
  4. Generoi satunnainen DNI (valinnainen):

    • Napsauta "Satunnainen" painiketta luodaksesi satunnaisen 8-numeroisen DNI-numeron
  5. Näe luotu CUIT/CUIL:

    • Työkalu näyttää automaattisesti voimassa olevan CUIT/CUIL:n syötteidesi perusteella
    • Muoto on XX-XXXXXXXX-X oikealla tarkistusnumerolla
  6. Kopioi tulos:

    • Napsauta kopio-ikonia kopioidaksesi luodun CUIT/CUIL:n leikepöydälle
    • Vahvistusviesti ilmestyy, kun kopiointi onnistuu

Validaattorin käyttäminen

  1. Valitse "Validaattori" välilehti työkalun käyttöliittymän yläosasta.

  2. Syötä validoitava CUIT/CUIL:

    • Syötä CUIT/CUIL muodossa XX-XXXXXXXX-X
    • Työkalu muotoilee syötteesi automaattisesti viivoilla kirjoittaessasi
    • Voit myös syöttää numeron ilman viivoja (XXXXXXXXXXX)
  3. Napsauta "Validoi" painiketta:

    • Työkalu tarkistaa muodon, tyyppikoodin ja tarkistusnumeron
  4. Näe validointitulokset:

    • Voimassa oleville CUIT/CUIL-numeroille ilmestyy vihreä onnistumisviesti
    • Virheellisille numeroille ilmestyy punainen virheviesti, joka selittää ongelman:
      • Virheellinen muoto (täytyy olla XX-XXXXXXXX-X)
      • Virheellinen tyyppikoodi (täytyy olla yksi: 20, 23, 24, 27, 30, 33, 34)
      • Virheellinen tarkistusnumero
  5. Lisätietoja:

    • Voimassa oleville numeroille työkalu näyttää komponenttien erittelyn:
      • Tyyppikoodi ja sen merkitys
      • DNI-numero
      • Tarkistusnumero

Käyttötapaukset

Kehitys ja testaus

  1. Ohjelmistokehitys: Luo voimassa olevia CUIT/CUIL-numeroita testataksesi sovelluksia, jotka käsittelevät argentiinalaisia verotunnuksia, kuten:

    • Verkkokauppapaikat
    • Kirjanpito-ohjelmistot
    • HR-hallintajärjestelmät
    • Valtion palveluportaalit
    • Pankkisovellukset
  2. Tietokannan täyttäminen: Luo realistista testidataa järjestelmille, jotka tallentavat argentiinalaisia käyttäjätietoja varmistaen, että tietokannan rajoitukset ja validointisäännöt toimivat oikein.

  3. Lomakevalidoinnin testaus: Testaa syöttövalidointia verkkolomakkeissa, jotka keräävät CUIT/CUIL-tietoja varmistaen, että oikeat virheviestit ilmestyvät virheellisille syötteille.

  4. API-testaus: Luo voimassa olevia kuormia API-päätteille, jotka vaativat CUIT/CUIL-numeroita varmistaen, että integraatiotestisi käyttävät voimassa olevaa dataa.

  5. QA-automaatiot: Sisällytä CUIT/CUIL-generaattori automatisoituihin testiskripteihin luodaksesi dynaamisia testitapauksia sen sijaan, että käyttäisit staattista testidataa.

Koulutustarkoitukset

  1. Validointialgoritmien oppiminen: Ymmärrä, miten tarkistusnumeroalgoritmit toimivat käytännössä näkemällä CUIT/CUIL-validointiprosessi toiminnassa.

  2. Tietojen validoinnin opettaminen: Käytä koulutusesimerkkinä, kun opetat lomakevalidointitekniikoita uusille kehittäjille.

  3. Argentiinalaisten liiketoimintavaatimusten ymmärtäminen: Opi tuntemaan Argentiinassa käytettävä tunnistusjärjestelmä kansainvälisen liiketoiminnan kehittämiseksi.

Vaihtoehdot

Vaikka työkalumme tarjoaa yksinkertaisen tavan luoda ja validoida CUIT/CUIL-numeroita, voit harkita vaihtoehtoisia lähestymistapoja:

  1. Virallinen hallituksen validointi: Tuotantoympäristöissä tarkista aina CUIT/CUIL-numerot virallisen AFIP (Administración Federal de Ingresos Públicos) tietokannan avulla, kun se on mahdollista.

  2. Kirjastot ja paketit: Useilla ohjelmointikielillä on erityisesti argentiinalaisten verotunnusten validointiin suunniteltuja kirjastoja:

    • JavaScript: validar-cuit npm-paketti
    • PHP: afip-php kirjasto
    • Python: py-cuit paketti
  3. Manuaalinen laskenta: Koulutustarkoituksiin voit laskea tarkistusnumeron manuaalisesti aiemmin kuvattua algoritmia käyttäen.

  4. Kattavat liiketoimintavalidointipalvelut: Yrityssovelluksille harkitse kattavien validointipalveluiden käyttöä, jotka eivät vain tarkista muotoa, vaan myös varmistavat, että CUIT/CUIL:iin liittyvä entiteetti on olemassa ja aktiivinen.

CUIT/CUIL-järjestelmän historia

CUIT/CUIL-tunnistusjärjestelmä Argentiinassa on kehittynyt merkittävästi sen käyttöönotosta lähtien:

Alkuperä ja käyttöönotto

CUIT (Clave Única de Identificación Tributaria) otettiin ensimmäisen kerran käyttöön Argentiinassa 1970-luvulla osana pyrkimyksiä modernisoida verokokoelmajärjestelmää. Liittovaltion verohallinto (AFIP) otti tämän ainutlaatuisen tunnisteen käyttöön verovelvollisten tehokkaampaa seurantaa ja veronkierron vähentämistä varten.

CUIL (Clave Única de Identificación Laboral) otettiin myöhemmin käyttöön erityisesti työntekijöiden tunnistamiseksi sosiaaliturvajärjestelmässä, luoden eron verotunnistuksen ja työvoimatunnistuksen välillä säilyttäen samalla yhdenmukaisen muodon.

Kehitys ja digitalisointi

1990-luvulla, kun Argentiina koki merkittäviä talousuudistuksia, CUIT/CUIL-järjestelmästä tuli yhä tärkeämpi taloudellisen toiminnan seuraamisessa. Järjestelmä digitalisoitiin edelleen, ja verkkotarkistusjärjestelmiä otettiin käyttöön.

2000-luvun alussa CUIT/CUIL-järjestelmä integroitiin useisiin digitaalisiin hallintopalveluihin, mikä teki siitä olennaisen osan Argentiinan e-hallintoinitiatiiveja. Tänä aikana myös tarkistusalgoritmin ja muodon standardointi, joka on edelleen käytössä tänään, toteutettiin.

Viimeisimmät kehitykset

Viime vuosina AFIP on parantanut CUIT/CUIL-numeroiden turvallisuus- ja validointiprosesseja, toteuttaen kehittyneempiä validointijärjestelmiä ja integroimalla ne muihin hallituksen tietokantoihin. Järjestelmä näyttelee nyt keskeistä roolia Argentiinan pyrkimyksissä torjua veronkiertoa ja virallistaa taloutta.

Nykyään CUIT/CUIL:ia käytetään paitsi verotukseen ja työhön liittyvissä asioissa, myös laajalla valikoimalla toimintoja, mukaan lukien pankkitoiminta, kiinteistökaupat, palveluiden käyttö ja verkkohankinnat, mikä tekee siitä olennaisen tunnisteen sekä yksilöille että yrityksille, jotka toimivat Argentiinassa.

Koodiesimerkit

Python

1def calculate_verification_digit(type_code, dni):
2    # Muuta merkkijonoksi ja varmista, että DNI on 8 numeroa etunollilla
3    type_code_str = str(type_code)
4    dni_str = str(dni).zfill(8)
5    
6    # Yhdistä tyyppikoodi ja DNI
7    digits = type_code_str + dni_str
8    
9    # Painot jokaiselle sijainnille
10    weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
11    
12    # Laske tuotteiden summa
13    sum_products = sum(int(digits[i]) * weights[i] for i in range(10))
14    
15    # Laske tarkistusnumero
16    verification_digit = 11 - (sum_products % 11)
17    
18    # Erityistapaukset
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    # Voimassa olevat tyyppikoodit
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"Virheellinen tyyppikoodi. Sen on oltava yksi: {valid_type_codes}")
34    
35    # Generoi satunnainen DNI, jos ei ole annettu
36    if dni is None:
37        dni = random.randint(10000000, 99999999)
38    
39    # Laske tarkistusnumero
40    verification_digit = calculate_verification_digit(type_code, dni)
41    
42    # Muotoile CUIT/CUIL
43    return f"{type_code}-{str(dni).zfill(8)}-{verification_digit}"
44
45def validate_cuit_cuil(cuit_cuil):
46    # Poista viivat, jos ne ovat läsnä
47    cuit_cuil_clean = cuit_cuil.replace("-", "")
48    
49    # Tarkista perusmuoto
50    if not cuit_cuil_clean.isdigit() or len(cuit_cuil_clean) != 11:
51        return False, "Virheellinen muoto"
52    
53    # Erota osat
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    # Vahvista tyyppikoodi
59    valid_type_codes = [20, 23, 24, 27, 30, 33, 34]
60    if type_code not in valid_type_codes:
61        return False, "Virheellinen tyyppikoodi"
62    
63    # Laske ja vertaa tarkistusnumeroa
64    calculated_digit = calculate_verification_digit(type_code, dni)
65    if calculated_digit != verification_digit:
66        return False, "Virheellinen tarkistusnumero"
67    
68    return True, "Voimassa oleva CUIT/CUIL"
69
70# Esimerkkikäyttö
71print(generate_cuit_cuil(20, 12345678))  # Generoi tietylle DNI:lle
72print(generate_cuit_cuil(27))  # Generoi satunnaiselle DNI:lle
73print(validate_cuit_cuil("20-12345678-9"))  # Validoi CUIT/CUIL
74

JavaScript

1function calculateVerificationDigit(typeCode, dni) {
2  // Muuta merkkijonoksi ja varmista, että DNI on 8 numeroa etunollilla
3  const typeCodeStr = typeCode.toString();
4  const dniStr = dni.toString().padStart(8, '0');
5  
6  // Yhdistä tyyppikoodi ja DNI
7  const digits = typeCodeStr + dniStr;
8  
9  // Painot jokaiselle sijainnille
10  const weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
11  
12  // Laske tuotteiden summa
13  let sumProducts = 0;
14  for (let i = 0; i < 10; i++) {
15    sumProducts += parseInt(digits[i]) * weights[i];
16  }
17  
18  // Laske tarkistusnumero
19  let verificationDigit = 11 - (sumProducts % 11);
20  
21  // Erityistapaukset
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  // Voimassa olevat tyyppikoodit
33  const validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
34  
35  if (!validTypeCodes.includes(typeCode)) {
36    throw new Error(`Virheellinen tyyppikoodi. Sen on oltava yksi: ${validTypeCodes.join(', ')}`);
37  }
38  
39  // Generoi satunnainen DNI, jos ei ole annettu
40  if (dni === undefined) {
41    dni = Math.floor(Math.random() * 90000000) + 10000000;
42  }
43  
44  // Laske tarkistusnumero
45  const verificationDigit = calculateVerificationDigit(typeCode, dni);
46  
47  // Muotoile CUIT/CUIL
48  return `${typeCode}-${dni.toString().padStart(8, '0')}-${verificationDigit}`;
49}
50
51function validateCuitCuil(cuitCuil) {
52  // Poista viivat, jos ne ovat läsnä
53  const cuitCuilClean = cuitCuil.replace(/-/g, '');
54  
55  // Tarkista perusmuoto
56  if (!/^\d{11}$/.test(cuitCuilClean)) {
57    return { isValid: false, errorMessage: 'Virheellinen muoto' };
58  }
59  
60  // Erota osat
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  // Vahvista tyyppikoodi
66  const validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
67  if (!validTypeCodes.includes(typeCode)) {
68    return { isValid: false, errorMessage: 'Virheellinen tyyppikoodi' };
69  }
70  
71  // Laske ja vertaa tarkistusnumeroa
72  const calculatedDigit = calculateVerificationDigit(typeCode, dni);
73  if (calculatedDigit !== verificationDigit) {
74    return { isValid: false, errorMessage: 'Virheellinen tarkistusnumero' };
75  }
76  
77  return { isValid: true };
78}
79
80// Esimerkkikäyttö
81console.log(generateCuitCuil(20, 12345678)); // Generoi tietylle DNI:lle
82console.log(generateCuitCuil(27)); // Generoi satunnaiselle DNI:lle
83console.log(validateCuitCuil("20-12345678-9")); // Validoi 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        // Muuta merkkijonoksi ja varmista, että DNI on 8 numeroa etunollilla
11        String typeCodeStr = String.valueOf(typeCode);
12        String dniStr = String.format("%08d", dni);
13        
14        // Yhdistä tyyppikoodi ja DNI
15        String digits = typeCodeStr + dniStr;
16        
17        // Laske tuotteiden summa
18        int sumProducts = 0;
19        for (int i = 0; i < 10; i++) {
20            sumProducts += Character.getNumericValue(digits.charAt(i)) * WEIGHTS[i];
21        }
22        
23        // Laske tarkistusnumero
24        int verificationDigit = 11 - (sumProducts % 11);
25        
26        // Erityistapaukset
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("Virheellinen tyyppikoodi. Sen on oltava yksi: " + VALID_TYPE_CODES);
39        }
40        
41        // Generoi satunnainen DNI, jos ei ole annettu
42        if (dni == null) {
43            Random random = new Random();
44            dni = 10000000 + random.nextInt(90000000);
45        }
46        
47        // Laske tarkistusnumero
48        int verificationDigit = calculateVerificationDigit(typeCode, dni);
49        
50        // Muotoile CUIT/CUIL
51        return String.format("%d-%08d-%d", typeCode, dni, verificationDigit);
52    }
53    
54    public static ValidationResult validateCuitCuil(String cuitCuil) {
55        // Poista viivat, jos ne ovat läsnä
56        String cuitCuilClean = cuitCuil.replace("-", "");
57        
58        // Tarkista perusmuoto
59        if (!cuitCuilClean.matches("\\d{11}")) {
60            return new ValidationResult(false, "Virheellinen muoto");
61        }
62        
63        // Erota osat
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        // Vahvista tyyppikoodi
69        if (!VALID_TYPE_CODES.contains(typeCode)) {
70            return new ValidationResult(false, "Virheellinen tyyppikoodi");
71        }
72        
73        // Laske ja vertaa tarkistusnumeroa
74        int calculatedDigit = calculateVerificationDigit(typeCode, dni);
75        if (calculatedDigit != verificationDigit) {
76            return new ValidationResult(false, "Virheellinen tarkistusnumero");
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        // Esimerkkikäyttö
102        System.out.println(generateCuitCuil(20, 12345678)); // Generoi tietylle DNI:lle
103        System.out.println(generateCuitCuil(27, null)); // Generoi satunnaiselle DNI:lle
104        System.out.println(validateCuitCuil("20-12345678-9").isValid()); // Validoi CUIT/CUIL
105    }
106}
107

PHP

1<?php
2
3function calculateVerificationDigit($typeCode, $dni) {
4    // Muuta merkkijonoksi ja varmista, että DNI on 8 numeroa etunollilla
5    $typeCodeStr = (string)$typeCode;
6    $dniStr = str_pad((string)$dni, 8, '0', STR_PAD_LEFT);
7    
8    // Yhdistä tyyppikoodi ja DNI
9    $digits = $typeCodeStr . $dniStr;
10    
11    // Painot jokaiselle sijainnille
12    $weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
13    
14    // Laske tuotteiden summa
15    $sumProducts = 0;
16    for ($i = 0; $i < 10; $i++) {
17        $sumProducts += (int)$digits[$i] * $weights[$i];
18    }
19    
20    // Laske tarkistusnumero
21    $verificationDigit = 11 - ($sumProducts % 11);
22    
23    // Erityistapaukset
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    // Voimassa olevat tyyppikoodit
35    $validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
36    
37    if (!in_array($typeCode, $validTypeCodes)) {
38        throw new Exception("Virheellinen tyyppikoodi. Sen on oltava yksi: " . implode(', ', $validTypeCodes));
39    }
40    
41    // Generoi satunnainen DNI, jos ei ole annettu
42    if ($dni === null) {
43        $dni = rand(10000000, 99999999);
44    }
45    
46    // Laske tarkistusnumero
47    $verificationDigit = calculateVerificationDigit($typeCode, $dni);
48    
49    // Muotoile CUIT/CUIL
50    return sprintf("%d-%08d-%d", $typeCode, $dni, $verificationDigit);
51}
52
53function validateCuitCuil($cuitCuil) {
54    // Poista viivat, jos ne ovat läsnä
55    $cuitCuilClean = str_replace('-', '', $cuitCuil);
56    
57    // Tarkista perusmuoto
58    if (!preg_match('/^\d{11}$/', $cuitCuilClean)) {
59        return ['isValid' => false, 'errorMessage' => 'Virheellinen muoto'];
60    }
61    
62    // Erota osat
63    $typeCode = (int)substr($cuitCuilClean, 0, 2);
64    $dni = (int)substr($cuitCuilClean, 2, 8);
65    $verificationDigit = (int)substr($cuitCuilClean, 10, 1);
66    
67    // Vahvista tyyppikoodi
68    $validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
69    if (!in_array($typeCode, $validTypeCodes)) {
70        return ['isValid' => false, 'errorMessage' => 'Virheellinen tyyppikoodi'];
71    }
72    
73    // Laske ja vertaa tarkistusnumeroa
74    $calculatedDigit = calculateVerificationDigit($typeCode, $dni);
75    if ($calculatedDigit !== $verificationDigit) {
76        return ['isValid' => false, 'errorMessage' => 'Virheellinen tarkistusnumero'];
77    }
78    
79    return ['isValid' => true];
80}
81
82// Esimerkkikäyttö
83echo generateCuitCuil(20, 12345678) . "\n"; // Generoi tietylle DNI:lle
84echo generateCuitCuil(27) . "\n"; // Generoi satunnaiselle DNI:lle
85var_dump(validateCuitCuil("20-12345678-9")); // Validoi CUIT/CUIL
86?>
87

Usein kysyttyjä kysymyksiä

Mikä on ero CUIT:n ja CUIL:n välillä?

CUIT (Clave Única de Identificación Tributaria) käytetään verotustarkoituksiin ja se annetaan sekä yksilöille että oikeushenkilöille, jotka tarvitsevat maksaa veroja Argentiinassa. CUIL (Clave Única de Identificación Laboral) on erityisesti työntekijöiden tunnistamiseen ja sitä käytetään työ- ja sosiaaliturvatarkoituksiin. Vaikka niillä on sama muoto ja laskentalgoritmi, ne palvelevat eri hallinnollisia tarkoituksia.

Mitkä tyyppikoodit ovat käytössä yksilöille ja mitkä yrityksille?

Yksilöille:

  • 20, 23, 24: Miehet (CUIL)
  • 27: Naiset (CUIL)

Yrityksille ja organisaatioille:

  • 30: Osakeyhtiöt (CUIT)
  • 33: Yhdistykset (CUIT)
  • 34: Säätiöt (CUIT)

Miten tarkistusnumero lasketaan?

Tarkistusnumero lasketaan painotetun summan algoritmilla. Jokainen ensimmäisistä 10 numerosta kerrotaan vastaavalla painolla (5, 4, 3, 2, 7, 6, 5, 4, 3, 2), ja tulokset summataan. Tarkistusnumero on 11 miinus tämän summan jakojäännös 11:llä. Erityistapauksia: jos tulos on 11, tarkistusnumero on 0; jos tulos on 10, tarkistusnumero on 9.

Voinko käyttää tätä työkalua luodakseni oikeita, virallisia CUIT/CUIL-numeroita?

Ei, tämä työkalu on suunniteltu vain testaus- ja koulutustarkoituksiin. Luodut numerot ovat matemaattisesti voimassa CUIT/CUIL-algoritmin mukaan, mutta niitä ei ole virallisesti rekisteröity Argentiinan veroviranomaisille (AFIP). Virallista CUIT/CUIL-rekisteröintiä varten yksilöiden ja yritysten on noudatettava asianmukaisia oikeudellisia menettelyjä AFIP:n kautta.

Miksi CUIT/CUIL-validointi epäonnistuu, vaikka muoto näyttää oikealta?

Validointi voi epäonnistua useista syistä:

  1. Tyyppikoodi ei ole yksi voimassa olevista koodeista (20, 23, 24, 27, 30, 33, 34)
  2. Tarkistusnumero ei vastaa algoritmin mukaan laskettua arvoa
  3. Muoto on virheellinen (sen tulee olla XX-XXXXXXXX-X)
  4. Syötteessä on ei-numeerisia merkkejä (paitsi viivoja)

Onko viivat pakollisia CUIT/CUIL-numeroissa?

Vaikka CUIT/CUIL-numeroita käytetään yleisesti viivoilla (XX-XXXXXXXX-X), viivat eivät ole osa varsinaista numeroa laskentatarkoituksiin. Validointityökalumme hyväksyy molemmat muodot (viivoilla tai ilman) ja validoi asianmukaisesti kummankin muodon.

Voiko CUIT/CUIL-numero sisältää vähemmän kuin 8 numeroa DNI-osassa?

Ei, DNI-osan on aina oltava tarkalleen 8 numeroa. Jos todellinen DNI sisältää vähemmän numeroita, se on täydennettävä etunollilla saavuttaakseen 8 numeroa. Esimerkiksi, jos jonkun DNI on 1234567, CUIT/CUIL:ssa se esitetään muodossa 01234567.

Miten voin tarkistaa, onko CUIT/CUIL virallisesti rekisteröity Argentiinassa?

Voit tarkistaa, onko CUIT/CUIL virallisesti rekisteröity ja aktiivinen, käyttämällä virallista AFIP (Administración Federal de Ingresos Públicos) verkkosivustoa tai palveluja. Työkalumme vain tarkistaa numeron matemaattisen voimassaolon, ei sen virallista rekisteröintitilaa.

Voinko käyttää tätä työkalua kaupallisessa sovelluksessani?

Kyllä, voit integroida tässä työkalussa esitetyt algoritmit ja logiikan kaupallisiin sovelluksiisi. CUIT/CUIL-validointialgoritmi on julkinen standardi. Suosittelemme kuitenkin toteuttamaan asianmukaisen virheenkäsittelyn ja harkitsemaan lisävalidointia virallisista lähteistä tarvittaessa tuotantoympäristöissä.

Tallentaako työkalu mitään luotuja tai validoituja CUIT/CUIL-numeroita?

Ei, tämä työkalu ei tallenna mitään syötettyä tai luotua tietoa. Kaikki käsittely tapahtuu asiakaspuolella selaimessasi, eikä tietoja lähetetä tai tallenneta palvelimillemme. Tämä varmistaa syötteen yksityisyyden ja turvallisuuden.

Viitteet

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

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

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

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

  5. Código Fiscal de la República Argentina. "Verovelvollisten tunnistus ja rekisteröinti."


Valmis luomaan tai validoimaan argentiinalaisia CUIT/CUIL-numeroita? Kokeile työkalua nyt ja yksinkertaista testausprosessiasi!