🛠️

Whiz Tools

Build • Create • Innovate

Arjantin CUIT/CUIL Üretici ve Doğrulayıcı Aracı

Test için geçerli Arjantin CUIT/CUIL numaraları oluşturun veya mevcut olanları doğrulayın. Arjantin vergi ve iş tanımlama numaralarıyla çalışan geliştiriciler için basit bir araç.

CUIT/CUIL Üretici

8 haneli bir DNI numarası girin veya rastgele üreticiyi kullanın

Üretilen CUIT/CUIL

📚

Dokümantasyon

Arjantin CUIT/CUIL Üretici ve Doğrulayıcı

Giriş

Arjantin CUIT (Clave Única de Identificación Tributaria) ve CUIL (Clave Única de Identificación Laboral), sırasıyla vergi ve istihdam amaçları için Arjantin'de kullanılan benzersiz kimlik numaralarıdır. Bu 11 haneli kodlar, bireylerin ve işletmelerin Arjantin ekonomik sisteminde yasal olarak faaliyet göstermeleri için gereklidir. CUIT/CUIL Üretici ve Doğrulayıcı aracımız, geçerli CUIT/CUIL numaralarını test amaçları için oluşturmanın ve mevcut numaraları doğrulamanın basit ve etkili bir yolunu sunar; böylece resmi format ve doğrulama algoritmasına uygun olduklarından emin olabilirsiniz.

Geliştirici, Arjantin vergi kimliklerini işleyen uygulamaları test eden bir QA uzmanı veya bu kimlik numaralarının nasıl çalıştığını anlamak isteyen biri olsanız da, bu araç gereksiz karmaşıklıklar olmadan basit bir çözüm sunar. Araç, rastgele veya belirli parametrelere dayalı olarak geçerli CUIT/CUIL numaraları oluşturan bir üretici ve verilen bir CUIT/CUIL numarasının doğru format ve hesaplama kurallarına uygun olup olmadığını doğrulayan bir doğrulayıcı olmak üzere iki ana işlev içerir.

CUIT/CUIL Yapısı ve Hesaplama

Formatı Anlamak

Geçerli bir CUIT/CUIL numarası, genellikle XX-XXXXXXXX-X formatında gösterilen 11 haneli bir sayıdan oluşur:

  1. Tür Kodu (ilk 2 hane): Varlık türünü belirtir

    • 20, 23, 24: Erkek bireyler (CUIL)
    • 27: Kadın bireyler (CUIL)
    • 30, 33, 34: Şirketler ve organizasyonlar (CUIT)
  2. DNI Numarası (orta 8 hane): Bireyler için bu, ulusal kimlik belgesi numarasıdır (DNI), gerekli olduğunda 8 haneli sayıya ulaşmak için baştaki sıfırlarla doldurulur. Şirketler için bu, kendilerine atanmış benzersiz bir numaradır.

  3. Doğrulama Haneli (son hane): Tüm numaranın doğruluğunu doğrulamak için belirli bir algoritma kullanılarak hesaplanan kontrol hanelidir.

Doğrulama Haneli Hesaplama

Doğrulama haneli, aşağıdaki algoritma kullanılarak hesaplanır:

  1. CUIT/CUIL'in ilk 10 hanesini (tip kodu + DNI) alın
  2. Her bir hane için bu sıradaki ağırlıklarla çarpın: 5, 4, 3, 2, 7, 6, 5, 4, 3, 2
  3. Elde edilen tüm çarpımların toplamını hesaplayın
  4. Toplamın 11'e bölümünden kalan ile 11'i çıkarın
  5. Sonuç 11 ise, doğrulama haneli 0'dır
  6. Sonuç 10 ise, doğrulama haneli 9'dur
  7. Aksi takdirde, sonuç doğrulama hanelidir

Matematiksel olarak bu şu şekilde ifade edilebilir:

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

Burada:

  • VDVD doğrulama hanelidir
  • did_i ilk 10 hanenin ii-inci hanesidir
  • wiw_i bu sıradaki ağırlıktır [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
  • Özel durumlar: Eğer VD=11VD = 11 ise VD=0VD = 0, eğer VD=10VD = 10 ise VD=9VD = 9

Adım Adım Kılavuz

Üreticiyi Kullanma

  1. Araç arayüzünün üst kısmındaki "Üretici" sekmesini seçin.

  2. Açılır menüden bir Tür Kodu seçin:

    • 20: Erkek (CUIL)
    • 23: İşletme (CUIT)
    • 24: Geçici İşletme (CUIT)
    • 27: Kadın (CUIL)
    • 30: Şirket (CUIT)
    • 33: Sivil Toplum Kuruluşu (CUIT)
    • 34: Vakıf (CUIT)
  3. Bir DNI Numarası girin (isteğe bağlı):

    • Verilen alana 8 haneli bir DNI numarası girin
    • Boş bırakılırsa, araç rastgele oluşturulmuş bir DNI kullanacaktır
    • 8 haneli sayıya ulaşmak için daha az hane girerseniz, sistem baştaki sıfırlarla dolduracaktır
  4. Rastgele DNI Oluşturun (isteğe bağlı):

    • Rastgele 8 haneli bir DNI numarası oluşturmak için "Rastgele" butonuna tıklayın
  5. Oluşturulan CUIT/CUIL'i Görüntüleyin:

    • Araç, girdilerinize dayanarak geçerli bir CUIT/CUIL'i otomatik olarak görüntüler
    • Format, XX-XXXXXXXX-X olacak şekilde doğrulama haneli ile birlikte gösterilecektir
  6. Sonucu Kopyalayın:

    • Oluşturulan CUIT/CUIL'i panonuza kopyalamak için kopyalama simgesine tıklayın
    • Başarıyla kopyalandığında bir onay mesajı görüntülenecektir

Doğrulayıcıyı Kullanma

  1. Araç arayüzünün üst kısmındaki "Doğrulayıcı" sekmesini seçin.

  2. Doğrulamak için CUIT/CUIL girin:

    • CUIT/CUIL'i XX-XXXXXXXX-X formatında girin
    • Araç, yazarken girişinizi otomatik olarak tirelerle formatlayacaktır
    • Ayrıca numarayı tire olmadan da girebilirsiniz (XXXXXXXXXXX)
  3. "Doğrula" Butonuna Tıklayın:

    • Araç, formatı, tür kodunu ve doğrulama hanelisini kontrol edecektir
  4. Doğrulama Sonucunu Görüntüleyin:

    • Geçerli CUIT/CUIL numaraları için yeşil bir başarı mesajı görüntülenecektir
    • Geçersiz numaralar için, sorunu açıklayan kırmızı bir hata mesajı görüntülenecektir:
      • Geçersiz format (XX-XXXXXXXX-X olmalıdır)
      • Geçersiz tür kodu (şunlardan biri olmalıdır: 20, 23, 24, 27, 30, 33, 34)
      • Geçersiz doğrulama hanelisi
  5. Ek Bilgiler:

    • Geçerli numaralar için, aracın bileşenlerin bir dökümünü görüntülemesi:
      • Tür kodu ve anlamı
      • DNI numarası
      • Doğrulama hanelisi

Kullanım Senaryoları

Geliştirme ve Test

  1. Yazılım Geliştirme: Arjantin vergi kimliklerini işleyen uygulamaları test etmek için geçerli CUIT/CUIL numaraları oluşturun, örneğin:

    • E-ticaret platformları
    • Muhasebe yazılımları
    • İK yönetim sistemleri
    • Devlet hizmet portalları
    • Bankacılık uygulamaları
  2. Veritabanı Doldurma: Arjantinli kullanıcı bilgilerini depolayan sistemler için gerçekçi test verileri oluşturun, böylece veritabanı kısıtlamaları ve doğrulama kurallarının doğru çalıştığından emin olun.

  3. Form Doğrulama Testi: CUIT/CUIL bilgilerini toplayan web formlarının giriş doğrulamasını test edin, geçersiz girişler için uygun hata mesajlarının göründüğünden emin olun.

  4. API Testi: Geçerli yükler oluşturmak için API uç noktaları için geçerli CUIT/CUIL numaraları oluşturun, böylece entegrasyon testleriniz geçerli veriler kullanır.

  5. QA Otomasyonu: Statik test verileri yerine dinamik test senaryoları oluşturmak için otomatik test betiklerine CUIT/CUIL üretimini entegre edin.

Eğitim Amaçları

  1. Doğrulama Algoritmalarını Öğrenme: CUIT/CUIL doğrulama sürecini uygulamada görerek kontrol haneli algoritmaların nasıl çalıştığını anlayın.

  2. Veri Doğrulama Öğretimi: Yeni geliştiricilere form doğrulama tekniklerini öğretirken eğitim örneği olarak kullanın.

  3. Arjantin İş Gereksinimlerini Anlama: Uluslararası iş geliştirme için Arjantin'de kullanılan kimlik sistemini öğrenin.

Alternatifler

Araç, geçerli CUIT/CUIL numaralarını oluşturmak ve doğrulamak için basit bir yol sunarken, dikkate alabileceğiniz alternatif yaklaşımlar vardır:

  1. Resmi Hükümet Doğrulaması: Üretim ortamları için, her zaman mümkünse CUIT/CUIL numaralarını resmi AFIP (Administración Federal de Ingresos Públicos) veritabanına karşı doğrulayın.

  2. Kütüphaneler ve Paketler: Birçok programlama dili, Arjantin vergi kimlik doğrulaması için özel olarak tasarlanmış kütüphanelere sahiptir:

    • JavaScript: validar-cuit npm paketi
    • PHP: afip-php kütüphanesi
    • Python: py-cuit paketi
  3. Manuel Hesaplama: Eğitim amaçları için, daha önce açıklanan algoritmayı kullanarak doğrulama hanelisini manuel olarak hesaplayabilirsiniz.

  4. Kapsamlı İş Doğrulama Hizmetleri: Kurumsal uygulamalar için, formatı kontrol etmenin yanı sıra CUIT/CUIL ile ilişkili varlığın varlığını ve durumunu doğrulayan kapsamlı doğrulama hizmetlerini kullanmayı düşünün.

CUIT/CUIL Sistemi Tarihçesi

Arjantin'deki CUIT/CUIL kimlik sistemi, başlangıcından bu yana önemli ölçüde evrim geçirmiştir:

Kökenler ve Uygulama

CUIT (Clave Única de Identificación Tributaria), Arjantin'de 1970'lerde vergi toplama sistemini modernize etme çabalarının bir parçası olarak ilk kez tanıtılmıştır. Federal Gelir İdaresi (AFIP), vergi mükelleflerini daha verimli bir şekilde takip etmek ve vergi kaçakçılığını azaltmak için bu benzersiz tanımlayıcıyı uygulamıştır.

CUIL (Clave Única de Identificación Laboral), sosyal güvenlik sisteminde işçileri özel olarak tanımlamak için daha sonra tanıtılmıştır ve vergi kimliği ile iş kimliği arasında bir ayrım yaratırken tutarlı bir formatı korumuştur.

Evrim ve Dijitalleşme

1990'larda, Arjantin önemli ekonomik reformlar geçirirken, CUIT/CUIL sistemi ekonomik faaliyetleri takip etmek için giderek daha önemli hale gelmiştir. Sistem daha da dijitalleştirilmiş ve çevrimiçi doğrulama sistemleri uygulanmıştır.

2000'lerin başında, CUIT/CUIL sistemi çeşitli dijital devlet hizmetleriyle entegre edilmiştir ve Arjantin'in e-devlet girişimlerinin temel bir bileşeni haline gelmiştir. Bu dönemde, günümüzde kullanılan doğrulama algoritması ve formatının standartlaştırılması da sağlanmıştır.

Son Gelişmeler

Son yıllarda, AFIP, CUIT/CUIL numaralarının güvenlik ve doğrulama süreçlerini geliştirmiştir ve daha sofistike doğrulama sistemleri uygulamış ve diğer devlet veritabanlarıyla entegre etmiştir. Sistem, Arjantin'in vergi kaçakçılığıyla mücadele ve ekonomiyi resmileştirme çabalarında kritik bir rol oynamaktadır.

Bugün, CUIT/CUIL sadece vergi ve istihdam amaçları için değil, aynı zamanda banka işlemleri, mülk işlemleri, kamu hizmetleri ve çevrimiçi satın alımlar gibi çok çeşitli faaliyetler için de kullanılmakta olup, Arjantin'de faaliyet gösteren bireyler ve işletmeler için temel bir tanımlayıcı haline gelmiştir.

Kod Örnekleri

Python

1def calculate_verification_digit(type_code, dni):
2    # String'e çevirin ve DNI'nin 8 haneli olduğundan emin olun
3    type_code_str = str(type_code)
4    dni_str = str(dni).zfill(8)
5    
6    # Tür kodu ve DNI'yi birleştirin
7    digits = type_code_str + dni_str
8    
9    # Her pozisyon için ağırlıklar
10    weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
11    
12    # Çarpımların toplamını hesaplayın
13    sum_products = sum(int(digits[i]) * weights[i] for i in range(10))
14    
15    # Doğrulama hanelisini hesaplayın
16    verification_digit = 11 - (sum_products % 11)
17    
18    # Özel durumlar
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    # Geçerli tür kodları
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"Geçersiz tür kodu. Şunlardan biri olmalıdır: {valid_type_codes}")
34    
35    # Verilmemişse rastgele DNI oluşturun
36    if dni is None:
37        dni = random.randint(10000000, 99999999)
38    
39    # Doğrulama hanelisini hesaplayın
40    verification_digit = calculate_verification_digit(type_code, dni)
41    
42    # CUIT/CUIL formatlayın
43    return f"{type_code}-{str(dni).zfill(8)}-{verification_digit}"
44
45def validate_cuit_cuil(cuit_cuil):
46    # Tireleri kaldırın
47    cuit_cuil_clean = cuit_cuil.replace("-", "")
48    
49    # Temel formatı kontrol edin
50    if not cuit_cuil_clean.isdigit() or len(cuit_cuil_clean) != 11:
51        return False, "Geçersiz format"
52    
53    # Parçaları ayırın
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    # Tür kodunu doğrulayın
59    valid_type_codes = [20, 23, 24, 27, 30, 33, 34]
60    if type_code not in valid_type_codes:
61        return False, "Geçersiz tür kodu"
62    
63    # Hesaplanan doğrulama hanelisi ile karşılaştırın
64    calculated_digit = calculate_verification_digit(type_code, dni)
65    if calculated_digit != verification_digit:
66        return False, "Geçersiz doğrulama hanelisi"
67    
68    return True, "Geçerli CUIT/CUIL"
69
70# Örnek kullanım
71print(generate_cuit_cuil(20, 12345678))  # Belirli DNI için oluştur
72print(generate_cuit_cuil(27))  # Rastgele DNI ile oluştur
73print(validate_cuit_cuil("20-12345678-9"))  # Bir CUIT/CUIL'i doğrula
74

JavaScript

1function calculateVerificationDigit(typeCode, dni) {
2  // String'e çevirin ve DNI'nin 8 haneli olduğundan emin olun
3  const typeCodeStr = typeCode.toString();
4  const dniStr = dni.toString().padStart(8, '0');
5  
6  // Tür kodu ve DNI'yi birleştirin
7  const digits = typeCodeStr + dniStr;
8  
9  // Her pozisyon için ağırlıklar
10  const weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
11  
12  // Çarpımların toplamını hesaplayın
13  let sumProducts = 0;
14  for (let i = 0; i < 10; i++) {
15    sumProducts += parseInt(digits[i]) * weights[i];
16  }
17  
18  // Doğrulama hanelisini hesaplayın
19  let verificationDigit = 11 - (sumProducts % 11);
20  
21  // Özel durumlar
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  // Geçerli tür kodları
33  const validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
34  
35  if (!validTypeCodes.includes(typeCode)) {
36    throw new Error(`Geçersiz tür kodu. Şunlardan biri olmalıdır: ${validTypeCodes.join(', ')}`);
37  }
38  
39  // Verilmemişse rastgele DNI oluşturun
40  if (dni === undefined) {
41    dni = Math.floor(Math.random() * 90000000) + 10000000;
42  }
43  
44  // Doğrulama hanelisini hesaplayın
45  const verificationDigit = calculateVerificationDigit(typeCode, dni);
46  
47  // CUIT/CUIL formatlayın
48  return `${typeCode}-${dni.toString().padStart(8, '0')}-${verificationDigit}`;
49}
50
51function validateCuitCuil(cuitCuil) {
52  // Tireleri kaldırın
53  const cuitCuilClean = cuitCuil.replace(/-/g, '');
54  
55  // Temel formatı kontrol edin
56  if (!/^\d{11}$/.test(cuitCuilClean)) {
57    return { isValid: false, errorMessage: 'Geçersiz format' };
58  }
59  
60  // Parçaları ayırın
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  // Tür kodunu doğrulayın
66  const validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
67  if (!validTypeCodes.includes(typeCode)) {
68    return { isValid: false, errorMessage: 'Geçersiz tür kodu' };
69  }
70  
71  // Hesaplanan doğrulama hanelisi ile karşılaştırın
72  const calculatedDigit = calculateVerificationDigit(typeCode, dni);
73  if (calculatedDigit !== verificationDigit) {
74    return { isValid: false, errorMessage: 'Geçersiz doğrulama hanelisi' };
75  }
76  
77  return { isValid: true };
78}
79
80// Örnek kullanım
81console.log(generateCuitCuil(20, 12345678)); // Belirli DNI için oluştur
82console.log(generateCuitCuil(27)); // Rastgele DNI ile oluştur
83console.log(validateCuitCuil("20-12345678-9")); // Bir CUIT/CUIL'i doğrula
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        // String'e çevirin ve DNI'nin 8 haneli olduğundan emin olun
11        String typeCodeStr = String.valueOf(typeCode);
12        String dniStr = String.format("%08d", dni);
13        
14        // Tür kodu ve DNI'yi birleştirin
15        String digits = typeCodeStr + dniStr;
16        
17        // Çarpımların toplamını hesaplayın
18        int sumProducts = 0;
19        for (int i = 0; i < 10; i++) {
20            sumProducts += Character.getNumericValue(digits.charAt(i)) * WEIGHTS[i];
21        }
22        
23        // Doğrulama hanelisini hesaplayın
24        int verificationDigit = 11 - (sumProducts % 11);
25        
26        // Özel durumlar
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("Geçersiz tür kodu. Şunlardan biri olmalıdır: " + VALID_TYPE_CODES);
39        }
40        
41        // Verilmemişse rastgele DNI oluşturun
42        if (dni == null) {
43            Random random = new Random();
44            dni = 10000000 + random.nextInt(90000000);
45        }
46        
47        // Doğrulama hanelisini hesaplayın
48        int verificationDigit = calculateVerificationDigit(typeCode, dni);
49        
50        // CUIT/CUIL formatlayın
51        return String.format("%d-%08d-%d", typeCode, dni, verificationDigit);
52    }
53    
54    public static ValidationResult validateCuitCuil(String cuitCuil) {
55        // Tireleri kaldırın
56        String cuitCuilClean = cuitCuil.replace("-", "");
57        
58        // Temel formatı kontrol edin
59        if (!cuitCuilClean.matches("\\d{11}")) {
60            return new ValidationResult(false, "Geçersiz format");
61        }
62        
63        // Parçaları ayırın
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        // Tür kodunu doğrulayın
69        if (!VALID_TYPE_CODES.contains(typeCode)) {
70            return new ValidationResult(false, "Geçersiz tür kodu");
71        }
72        
73        // Hesaplanan doğrulama hanelisi ile karşılaştırın
74        int calculatedDigit = calculateVerificationDigit(typeCode, dni);
75        if (calculatedDigit != verificationDigit) {
76            return new ValidationResult(false, "Geçersiz doğrulama hanelisi");
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        // Örnek kullanım
102        System.out.println(generateCuitCuil(20, 12345678)); // Belirli DNI için oluştur
103        System.out.println(generateCuitCuil(27, null)); // Rastgele DNI ile oluştur
104        System.out.println(validateCuitCuil("20-12345678-9").isValid()); // Bir CUIT/CUIL'i doğrula
105    }
106}
107

PHP

1<?php
2
3function calculateVerificationDigit($typeCode, $dni) {
4    // String'e çevirin ve DNI'nin 8 haneli olduğundan emin olun
5    $typeCodeStr = (string)$typeCode;
6    $dniStr = str_pad((string)$dni, 8, '0', STR_PAD_LEFT);
7    
8    // Tür kodu ve DNI'yi birleştirin
9    $digits = $typeCodeStr . $dniStr;
10    
11    // Her pozisyon için ağırlıklar
12    $weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
13    
14    // Çarpımların toplamını hesaplayın
15    $sumProducts = 0;
16    for ($i = 0; $i < 10; $i++) {
17        $sumProducts += (int)$digits[$i] * $weights[$i];
18    }
19    
20    // Doğrulama hanelisini hesaplayın
21    $verificationDigit = 11 - ($sumProducts % 11);
22    
23    // Özel durumlar
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    // Geçerli tür kodları
35    $validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
36    
37    if (!in_array($typeCode, $validTypeCodes)) {
38        throw new Exception("Geçersiz tür kodu. Şunlardan biri olmalıdır: " . implode(', ', $validTypeCodes));
39    }
40    
41    // Verilmemişse rastgele DNI oluşturun
42    if ($dni === null) {
43        $dni = rand(10000000, 99999999);
44    }
45    
46    // Doğrulama hanelisini hesaplayın
47    $verificationDigit = calculateVerificationDigit($typeCode, $dni);
48    
49    // CUIT/CUIL formatlayın
50    return sprintf("%d-%08d-%d", $typeCode, $dni, $verificationDigit);
51}
52
53function validateCuitCuil($cuitCuil) {
54    // Tireleri kaldırın
55    $cuitCuilClean = str_replace('-', '', $cuitCuil);
56    
57    // Temel formatı kontrol edin
58    if (!preg_match('/^\d{11}$/', $cuitCuilClean)) {
59        return ['isValid' => false, 'errorMessage' => 'Geçersiz format'];
60    }
61    
62    // Parçaları ayırın
63    $typeCode = (int)substr($cuitCuilClean, 0, 2);
64    $dni = (int)substr($cuitCuilClean, 2, 8);
65    $verificationDigit = (int)substr($cuitCuilClean, 10, 1);
66    
67    // Tür kodunu doğrulayın
68    $validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
69    if (!in_array($typeCode, $validTypeCodes)) {
70        return ['isValid' => false, 'errorMessage' => 'Geçersiz tür kodu'];
71    }
72    
73    // Hesaplanan doğrulama hanelisi ile karşılaştırın
74    $calculatedDigit = calculateVerificationDigit($typeCode, $dni);
75    if ($calculatedDigit !== $verificationDigit) {
76        return ['isValid' => false, 'errorMessage' => 'Geçersiz doğrulama hanelisi'];
77    }
78    
79    return ['isValid' => true];
80}
81
82// Örnek kullanım
83echo generateCuitCuil(20, 12345678) . "\n"; // Belirli DNI için oluştur
84echo generateCuitCuil(27) . "\n"; // Rastgele DNI ile oluştur
85var_dump(validateCuitCuil("20-12345678-9")); // Bir CUIT/CUIL'i doğrula
86?>
87

Sıkça Sorulan Sorular

CUIT ile CUIL arasındaki fark nedir?

CUIT (Clave Única de Identificación Tributaria) vergi kimlikleri için kullanılır ve Arjantin'de vergi ödemesi gereken bireyler ve tüzel kişiler için atanır. CUIL (Clave Única de Identificación Laboral) ise işçiler için özel olarak kullanılır ve iş ve sosyal güvenlik amaçları için kullanılır. Her ne kadar aynı format ve hesaplama algoritmasına sahip olsalar da, farklı idari amaçlar için hizmet ederler.

Hangi tür kodları bireyler için, hangileri şirketler için kullanılır?

Bireyler için:

  • 20, 23, 24: Erkek bireyler (CUIL)
  • 27: Kadın bireyler (CUIL)

Şirketler ve organizasyonlar için:

  • 30: Şirketler (CUIT)
  • 33: Sivil Toplum Kuruluşları (CUIT)
  • 34: Vakıflar (CUIT)

Doğrulama hanelisi nasıl hesaplanır?

Doğrulama hanelisi, ağırlıklı toplam algoritması kullanılarak hesaplanır. İlk 10 hane, karşılık gelen ağırlıklarla (5, 4, 3, 2, 7, 6, 5, 4, 3, 2) çarpılır ve sonuçlar toplanır. Doğrulama hanelisi, bu toplamın 11'e bölümünden kalan ile 11'in çıkarılmasıyla bulunur. Özel durumlar: Eğer sonuç 11 ise, doğrulama hanelisi 0'dır; eğer sonuç 10 ise, doğrulama hanelisi 9'dur.

Bu aracı gerçek, resmi CUIT/CUIL numaraları oluşturmak için kullanabilir miyim?

Hayır, bu araç test ve eğitim amaçları için tasarlanmıştır. Oluşturulan numaralar, CUIT/CUIL algoritmasına göre matematiksel olarak geçerli olsa da, Arjantin vergi otoriteleri (AFIP) ile resmi olarak kaydedilmemiştir. Resmi CUIT/CUIL kaydı için bireyler ve şirketler, AFIP aracılığıyla uygun yasal prosedürleri izlemelidir.

CUIT/CUIL doğrulama neden başarısız oluyor, format doğru görünmesine rağmen?

Doğrulama birkaç nedenle başarısız olabilir:

  1. Tür kodu geçerli kodlardan biri değil (20, 23, 24, 27, 30, 33, 34)
  2. Doğrulama hanelisi, algoritmaya göre hesaplanan değerle eşleşmiyor
  3. Format yanlış (XX-XXXXXXXX-X olmalıdır)
  4. Girişte sayısal olmayan karakterler var (tireler dışında)

CUIT/CUIL numaralarında tireler zorunlu mu?

CUIT/CUIL numaraları genellikle tirelerle (XX-XXXXXXXX-X) yazılır ve gösterilir, ancak tireler hesaplama amaçları için gerçek numaranın bir parçası değildir. Doğrulayıcımız, her iki formatı (tireli veya tiresiz) kabul eder ve her iki formatı da düzgün bir şekilde doğrular.

CUIT/CUIL numarası DNI bölümünde 8 haneli olmaktan daha az hane içerebilir mi?

Hayır, DNI bölümü her zaman tam olarak 8 haneli olmalıdır. Gerçek DNI daha az haneli ise, 8 haneli sayıya ulaşmak için baştaki sıfırlarla doldurulmalıdır. Örneğin, birinin DNI'si 1234567 ise, CUIT/CUIL'de 01234567 olarak temsil edilecektir.

Bir CUIT/CUIL'in Arjantin'de resmi olarak kaydedilip kaydedilmediğini nasıl doğrulayabilirim?

Bir CUIT/CUIL'in resmi olarak kaydedilip kaydedilmediğini ve aktif olup olmadığını doğrulamak için resmi AFIP (Administración Federal de Ingresos Públicos) web sitesini veya hizmetlerini kullanmalısınız. Araç yalnızca numaranın matematiksel geçerliliğini doğrular, resmi kaydı hakkında bilgi vermez.

Bu aracı ticari uygulamamda kullanabilir miyim?

Evet, bu araçta gösterilen algoritmayı ve mantığı ticari uygulamalarınıza entegre edebilirsiniz. CUIT/CUIL doğrulama algoritması kamuya açık bir standarttır. Ancak, üretim ortamları için uygun hata işleme uygulamanızı ve gerektiğinde resmi kaynaklara karşı ek doğrulama yapmayı düşünmenizi öneririz.

Araç, oluşturulan veya doğrulanan CUIT/CUIL numaralarının herhangi birini saklar mı?

Hayır, bu araç, girilen veya oluşturulan bilgileri saklamaz. Tüm işlemler, tarayıcınızda istemci tarafında gerçekleştirilir ve hiçbir veri sunucularımıza gönderilmez veya saklanmaz. Bu, girdiğiniz bilgilerin gizliliğini ve güvenliğini sağlar.

Referanslar

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

  2. Çalışma, İstihdam ve Sosyal Güvenlik Bakanlığı. "CUIL - Clave Única de Identificación Laboral." https://www.argentina.gob.ar/trabajo

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

  4. Arjantin Cumhuriyeti Resmi Gazetesi. "AFIP 2854/2010 Genel Karar: Prosedür. Clave Única de Identificación Tributaria (C.U.I.T.)."

  5. Arjantin Cumhuriyeti Vergi Kanunu. "Mükelleflerin Tanımlanması ve Kaydı."


Arjantin CUIT/CUIL numaralarını oluşturmak veya doğrulamak için hazır mısınız? Araçlarımızı şimdi deneyin ve test sürecinizi basitleştirin!