🛠️

Whiz Tools

Build • Create • Innovate

아르헨티나 CUIT/CUIL 생성기 및 검증 도구

테스트를 위해 유효한 아르헨티나 CUIT/CUIL 번호를 생성하거나 기존 번호를 검증합니다. 아르헨티나의 세금 및 노동 식별 번호로 작업하는 개발자를 위한 간단한 도구입니다.

CUIT/CUIL 생성기

8자리 DNI 번호를 입력하거나 무작위 생성기를 사용하세요

생성된 CUIT/CUIL

📚

문서

아르헨티나 CUIT/CUIL 생성기 및 검증기

소개

아르헨티나의 CUIT(Clave Única de Identificación Tributaria) 및 CUIL(Clave Única de Identificación Laboral)은 각각 세금 및 고용 목적으로 아르헨티나에서 사용되는 고유 식별 번호입니다. 이 11자리 코드는 개인과 기업이 아르헨티나 경제 시스템 내에서 합법적으로 운영하기 위해 필수적입니다. 우리의 CUIT/CUIL 생성기 및 검증기 도구는 테스트 목적으로 유효한 CUIT/CUIL 번호를 생성하고 기존 번호가 공식 형식 및 검증 알고리즘에 부합하는지 확인하는 간단하고 효율적인 방법을 제공합니다.

당신이 아르헨티나 세금 ID를 처리하는 애플리케이션을 테스트하는 개발자이든, 시스템 기능을 검증하는 QA 전문가이든, 아니면 단순히 이러한 식별 번호가 어떻게 작동하는지 이해할 필요가 있든, 이 도구는 불필요한 복잡성 없이 간단한 솔루션을 제공합니다. 이 도구는 유효한 CUIT/CUIL 번호를 무작위로 또는 특정 매개변수에 따라 생성하는 생성기와 주어진 CUIT/CUIL 번호가 올바른 형식 및 계산 규칙을 따르는지 검증하는 검증기의 두 가지 주요 기능을 제공합니다.

CUIT/CUIL 구조 및 계산

형식 이해하기

유효한 CUIT/CUIL 번호는 일반적으로 XX-XXXXXXXX-X 형식으로 표시되는 11자리 숫자로 구성됩니다:

  1. 유형 코드(첫 2자리): 엔티티 유형을 나타냅니다.

    • 20, 23, 24: 남성 개인(CUIL)
    • 27: 여성 개인(CUIL)
    • 30, 33, 34: 기업 및 조직(CUIT)
  2. DNI 번호(중간 8자리): 개인의 경우, 이는 그들의 국가 신분증 번호(DNI)이며, 필요에 따라 8자리까지 선행 0으로 채워집니다. 기업의 경우, 이는 고유하게 할당된 번호입니다.

  3. 검증 숫자(마지막 숫자): 전체 번호를 검증하기 위해 특정 알고리즘을 사용하여 계산된 체크 숫자입니다.

검증 숫자 계산

검증 숫자는 다음 알고리즘을 사용하여 계산됩니다:

  1. CUIT/CUIL의 처음 10자리(유형 코드 + DNI)를 가져옵니다.
  2. 각 숫자를 다음 시퀀스의 가중치로 곱합니다: 5, 4, 3, 2, 7, 6, 5, 4, 3, 2
  3. 모든 결과 곱의 합을 구합니다.
  4. 합을 11로 나눈 나머지로 11을 뺍니다.
  5. 결과가 11인 경우, 검증 숫자는 0입니다.
  6. 결과가 10인 경우, 검증 숫자는 9입니다.
  7. 그렇지 않으면 결과가 검증 숫자입니다.

수학적으로 이는 다음과 같이 표현될 수 있습니다:

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

여기서:

  • VDVD는 검증 숫자입니다.
  • did_i는 처음 10자리의 ii번째 숫자입니다.
  • wiw_i는 시퀀스 [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]의 해당 가중치입니다.
  • 특수 사례: 만약 VD=11VD = 11이면 VD=0VD = 0, 만약 VD=10VD = 10이면 VD=9VD = 9입니다.

단계별 가이드

생성기 사용하기

  1. 도구 인터페이스 상단의 "생성기" 탭을 선택합니다.

  2. 드롭다운 메뉴에서 유형 코드를 선택합니다:

    • 20: 남성 (CUIL)
    • 23: 기업 (CUIT)
    • 24: 임시 기업 (CUIT)
    • 27: 여성 (CUIL)
    • 30: 법인 (CUIT)
    • 33: 시민 협회 (CUIT)
    • 34: 재단 (CUIT)
  3. DNI 번호 입력(선택 사항):

    • 제공된 필드에 8자리 DNI 번호를 입력합니다.
    • 비워두면 도구가 무작위로 생성된 DNI를 사용합니다.
    • 8자리 미만의 숫자를 입력하면 시스템이 선행 0으로 채웁니다.
  4. 무작위 DNI 생성(선택 사항):

    • "무작위" 버튼을 클릭하여 무작위 8자리 DNI 번호를 생성합니다.
  5. 생성된 CUIT/CUIL 보기:

    • 도구가 자동으로 입력에 따라 유효한 CUIT/CUIL을 표시합니다.
    • 형식은 XX-XXXXXXXX-X이며 올바른 검증 숫자가 포함됩니다.
  6. 결과 복사:

    • 생성된 CUIT/CUIL을 클립보드에 복사하려면 복사 아이콘을 클릭합니다.
    • 성공적으로 복사되면 확인 메시지가 표시됩니다.

검증기 사용하기

  1. 도구 인터페이스 상단의 "검증기" 탭을 선택합니다.

  2. 검증할 CUIT/CUIL 입력:

    • XX-XXXXXXXX-X 형식으로 CUIT/CUIL을 입력합니다.
    • 입력하는 동안 도구가 자동으로 하이픈으로 입력을 형식화합니다.
    • 하이픈 없이 숫자를 입력할 수도 있습니다(XXXXXXXXXXX).
  3. "검증" 버튼 클릭:

    • 도구가 형식, 유형 코드 및 검증 숫자를 확인합니다.
  4. 검증 결과 보기:

    • 유효한 CUIT/CUIL 번호의 경우, 녹색 성공 메시지가 나타납니다.
    • 유효하지 않은 번호의 경우, 문제를 설명하는 빨간 오류 메시지가 표시됩니다:
      • 잘못된 형식(XX-XXXXXXXX-X이어야 함)
      • 잘못된 유형 코드(20, 23, 24, 27, 30, 33, 34 중 하나여야 함)
      • 잘못된 검증 숫자
  5. 추가 정보:

    • 유효한 번호의 경우, 도구는 구성 요소의 세부 사항을 표시합니다:
      • 유형 코드 및 그 의미
      • DNI 번호
      • 검증 숫자

사용 사례

개발 및 테스트

  1. 소프트웨어 개발: 아르헨티나 세금 식별을 처리하는 애플리케이션을 테스트하기 위해 유효한 CUIT/CUIL 번호를 생성합니다. 예:

    • 전자상거래 플랫폼
    • 회계 소프트웨어
    • 인사 관리 시스템
    • 정부 서비스 포털
    • 은행 애플리케이션
  2. 데이터베이스 채우기: 아르헨티나 사용자 정보를 저장하는 시스템에 대한 현실적인 테스트 데이터를 생성하여 데이터베이스 제약 및 검증 규칙이 올바르게 작동하는지 확인합니다.

  3. 양식 검증 테스트: CUIT/CUIL 정보를 수집하는 웹 양식의 입력 검증을 테스트하여 잘못된 항목에 대해 적절한 오류 메시지가 표시되는지 확인합니다.

  4. API 테스트: CUIT/CUIL 번호가 필요한 API 엔드포인트에 대한 유효한 페이로드를 생성하여 통합 테스트가 유효한 데이터를 사용하도록 합니다.

  5. QA 자동화: 자동화된 테스트 스크립트에 CUIT/CUIL 생성을 통합하여 정적 테스트 데이터 대신 동적 테스트 사례를 생성합니다.

교육 목적

  1. 검증 알고리즘 학습: CUIT/CUIL 검증 프로세스를 통해 체크 숫자 알고리즘이 실제로 어떻게 작동하는지 이해합니다.

  2. 데이터 검증 교육: 새로운 개발자에게 양식 검증 기술을 가르칠 때 교육 예제로 사용합니다.

  3. 아르헨티나 비즈니스 요구 사항 이해: 국제 비즈니스 개발을 위해 아르헨티나에서 사용되는 식별 시스템에 대해 배웁니다.

대안

우리 도구는 CUIT/CUIL 번호를 생성하고 검증하는 간단한 방법을 제공하지만, 고려할 수 있는 대체 접근 방식이 있습니다:

  1. 공식 정부 검증: 생산 환경에서는 항상 가능한 경우 공식 AFIP(Administración Federal de Ingresos Públicos) 데이터베이스에 대해 CUIT/CUIL 번호를 검증하십시오.

  2. 라이브러리 및 패키지: 여러 프로그래밍 언어에는 아르헨티나 세금 ID 검증을 위해 특별히 설계된 라이브러리가 있습니다:

    • JavaScript: validar-cuit npm 패키지
    • PHP: afip-php 라이브러리
    • Python: py-cuit 패키지
  3. 수동 계산: 교육 목적으로, 앞서 설명한 알고리즘을 사용하여 검증 숫자를 수동으로 계산할 수 있습니다.

  4. 포괄적인 비즈니스 검증 서비스: 기업 애플리케이션의 경우, 형식만 확인하는 것이 아니라 CUIT/CUIL과 관련된 엔티티의 존재 및 상태를 검증하는 포괄적인 검증 서비스를 사용하는 것을 고려하십시오.

CUIT/CUIL 시스템의 역사

아르헨티나의 CUIT/CUIL 식별 시스템은 처음 도입 이후 상당히 발전했습니다:

기원 및 구현

CUIT(Clave Única de Identificación Tributaria)는 1970년대 아르헨티나에서 세금 징수 시스템을 현대화하기 위한 노력의 일환으로 처음 도입되었습니다. 아르헨티나 연방 세무청(AFIP)은 이 고유 식별자를 도입하여 납세자를 보다 효율적으로 추적하고 세금 회피를 줄이기 위해 노력했습니다.

CUIL(Clave Única de Identificación Laboral)은 나중에 사회 보장 시스템에서 근로자를 식별하기 위해 도입되어 세금 식별과 노동 식별 간의 구분을 생성하면서도 일관된 형식을 유지했습니다.

진화 및 디지털화

1990년대 아르헨티나가 중대한 경제 개혁을 겪으면서 CUIT/CUIL 시스템은 경제 활동을 추적하는 데 점점 더 중요해졌습니다. 이 시스템은 더욱 디지털화되었고, 온라인 검증 시스템이 구현되었습니다.

2000년대 초반에는 CUIT/CUIL 시스템이 다양한 디지털 정부 서비스와 통합되어 아르헨티나의 전자 정부 이니셔티브의 필수 요소가 되었습니다. 이 시기에는 현재 사용되고 있는 검증 알고리즘 및 형식의 표준화도 이루어졌습니다.

최근 발전

최근 몇 년 동안 AFIP는 CUIT/CUIL 번호에 대한 보안 및 검증 프로세스를 강화하여 보다 정교한 검증 시스템을 구현하고 이를 다른 정부 데이터베이스와 통합했습니다. 이 시스템은 이제 아르헨티나의 세금 회피 방지 및 경제 형성을 위한 노력에서 중요한 역할을 합니다.

오늘날 CUIT/CUIL은 세금 및 고용 목적뿐만 아니라 은행 거래, 재산 거래, 유틸리티 서비스 및 온라인 구매를 포함한 광범위한 활동에 사용되며, 아르헨티나에서 운영되는 개인 및 기업 모두에게 필수 식별자가 되고 있습니다.

코드 예제

Python

1def calculate_verification_digit(type_code, dni):
2    # 문자열로 변환하고 DNI가 8자리로 선행 0으로 채워져 있는지 확인
3    type_code_str = str(type_code)
4    dni_str = str(dni).zfill(8)
5    
6    # 유형 코드와 DNI 결합
7    digits = type_code_str + dni_str
8    
9    # 각 위치에 대한 가중치
10    weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
11    
12    # 곱의 합 계산
13    sum_products = sum(int(digits[i]) * weights[i] for i in range(10))
14    
15    # 검증 숫자 계산
16    verification_digit = 11 - (sum_products % 11)
17    
18    # 특수 사례
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    # 유효한 유형 코드
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"유효하지 않은 유형 코드입니다. 다음 중 하나여야 합니다: {valid_type_codes}")
34    
35    # 제공되지 않은 경우 무작위 DNI 생성
36    if dni is None:
37        dni = random.randint(10000000, 99999999)
38    
39    # 검증 숫자 계산
40    verification_digit = calculate_verification_digit(type_code, dni)
41    
42    # CUIT/CUIL 형식화
43    return f"{type_code}-{str(dni).zfill(8)}-{verification_digit}"
44
45def validate_cuit_cuil(cuit_cuil):
46    # 하이픈 제거
47    cuit_cuil_clean = cuit_cuil.replace("-", "")
48    
49    # 기본 형식 확인
50    if not cuit_cuil_clean.isdigit() or len(cuit_cuil_clean) != 11:
51        return False, "잘못된 형식"
52    
53    # 구성 요소 추출
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    # 유형 코드 검증
59    valid_type_codes = [20, 23, 24, 27, 30, 33, 34]
60    if type_code not in valid_type_codes:
61        return False, "잘못된 유형 코드"
62    
63    # 검증 숫자 계산 및 비교
64    calculated_digit = calculate_verification_digit(type_code, dni)
65    if calculated_digit != verification_digit:
66        return False, "잘못된 검증 숫자"
67    
68    return True, "유효한 CUIT/CUIL"
69
70# 사용 예
71print(generate_cuit_cuil(20, 12345678))  # 특정 DNI에 대해 생성
72print(generate_cuit_cuil(27))  # 무작위 DNI로 생성
73print(validate_cuit_cuil("20-12345678-9"))  # CUIT/CUIL 검증
74

JavaScript

1function calculateVerificationDigit(typeCode, dni) {
2  // 문자열로 변환하고 DNI가 8자리로 선행 0으로 채워져 있는지 확인
3  const typeCodeStr = typeCode.toString();
4  const dniStr = dni.toString().padStart(8, '0');
5  
6  // 유형 코드와 DNI 결합
7  const digits = typeCodeStr + dniStr;
8  
9  // 각 위치에 대한 가중치
10  const weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
11  
12  // 곱의 합 계산
13  let sumProducts = 0;
14  for (let i = 0; i < 10; i++) {
15    sumProducts += parseInt(digits[i]) * weights[i];
16  }
17  
18  // 검증 숫자 계산
19  let verificationDigit = 11 - (sumProducts % 11);
20  
21  // 특수 사례
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  // 유효한 유형 코드
33  const validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
34  
35  if (!validTypeCodes.includes(typeCode)) {
36    throw new Error(`유효하지 않은 유형 코드입니다. 다음 중 하나여야 합니다: ${validTypeCodes.join(', ')}`);
37  }
38  
39  // 제공되지 않은 경우 무작위 DNI 생성
40  if (dni === undefined) {
41    dni = Math.floor(Math.random() * 90000000) + 10000000;
42  }
43  
44  // 검증 숫자 계산
45  const verificationDigit = calculateVerificationDigit(typeCode, dni);
46  
47  // CUIT/CUIL 형식화
48  return `${typeCode}-${dni.toString().padStart(8, '0')}-${verificationDigit}`;
49}
50
51function validateCuitCuil(cuitCuil) {
52  // 하이픈 제거
53  const cuitCuilClean = cuitCuil.replace(/-/g, '');
54  
55  // 기본 형식 확인
56  if (!/^\d{11}$/.test(cuitCuilClean)) {
57    return { isValid: false, errorMessage: '잘못된 형식' };
58  }
59  
60  // 구성 요소 추출
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  // 유형 코드 검증
66  const validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
67  if (!validTypeCodes.includes(typeCode)) {
68    return { isValid: false, errorMessage: '잘못된 유형 코드' };
69  }
70  
71  // 검증 숫자 계산 및 비교
72  const calculatedDigit = calculateVerificationDigit(typeCode, dni);
73  if (calculatedDigit !== verificationDigit) {
74    return { isValid: false, errorMessage: '잘못된 검증 숫자' };
75  }
76  
77  return { isValid: true };
78}
79
80// 사용 예
81console.log(generateCuitCuil(20, 12345678)); // 특정 DNI에 대해 생성
82console.log(generateCuitCuil(27)); // 무작위 DNI로 생성
83console.log(validateCuitCuil("20-12345678-9")); // 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        // 문자열로 변환하고 DNI가 8자리로 선행 0으로 채워져 있는지 확인
11        String typeCodeStr = String.valueOf(typeCode);
12        String dniStr = String.format("%08d", dni);
13        
14        // 유형 코드와 DNI 결합
15        String digits = typeCodeStr + dniStr;
16        
17        // 곱의 합 계산
18        int sumProducts = 0;
19        for (int i = 0; i < 10; i++) {
20            sumProducts += Character.getNumericValue(digits.charAt(i)) * WEIGHTS[i];
21        }
22        
23        // 검증 숫자 계산
24        int verificationDigit = 11 - (sumProducts % 11);
25        
26        // 특수 사례
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("유효하지 않은 유형 코드입니다. 다음 중 하나여야 합니다: " + VALID_TYPE_CODES);
39        }
40        
41        // 제공되지 않은 경우 무작위 DNI 생성
42        if (dni == null) {
43            Random random = new Random();
44            dni = 10000000 + random.nextInt(90000000);
45        }
46        
47        // 검증 숫자 계산
48        int verificationDigit = calculateVerificationDigit(typeCode, dni);
49        
50        // CUIT/CUIL 형식화
51        return String.format("%d-%08d-%d", typeCode, dni, verificationDigit);
52    }
53    
54    public static ValidationResult validateCuitCuil(String cuitCuil) {
55        // 하이픈 제거
56        String cuitCuilClean = cuitCuil.replace("-", "");
57        
58        // 기본 형식 확인
59        if (!cuitCuilClean.matches("\\d{11}")) {
60            return new ValidationResult(false, "잘못된 형식");
61        }
62        
63        // 구성 요소 추출
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        // 유형 코드 검증
69        if (!VALID_TYPE_CODES.contains(typeCode)) {
70            return new ValidationResult(false, "잘못된 유형 코드");
71        }
72        
73        // 검증 숫자 계산 및 비교
74        int calculatedDigit = calculateVerificationDigit(typeCode, dni);
75        if (calculatedDigit != verificationDigit) {
76            return new ValidationResult(false, "잘못된 검증 숫자");
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        // 사용 예
102        System.out.println(generateCuitCuil(20, 12345678)); // 특정 DNI에 대해 생성
103        System.out.println(generateCuitCuil(27, null)); // 무작위 DNI로 생성
104        System.out.println(validateCuitCuil("20-12345678-9").isValid()); // CUIT/CUIL 검증
105    }
106}
107

PHP

1<?php
2
3function calculateVerificationDigit($typeCode, $dni) {
4    // 문자열로 변환하고 DNI가 8자리로 선행 0으로 채워져 있는지 확인
5    $typeCodeStr = (string)$typeCode;
6    $dniStr = str_pad((string)$dni, 8, '0', STR_PAD_LEFT);
7    
8    // 유형 코드와 DNI 결합
9    $digits = $typeCodeStr . $dniStr;
10    
11    // 각 위치에 대한 가중치
12    $weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
13    
14    // 곱의 합 계산
15    $sumProducts = 0;
16    for ($i = 0; $i < 10; $i++) {
17        $sumProducts += (int)$digits[$i] * $weights[$i];
18    }
19    
20    // 검증 숫자 계산
21    $verificationDigit = 11 - ($sumProducts % 11);
22    
23    // 특수 사례
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    // 유효한 유형 코드
35    $validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
36    
37    if (!in_array($typeCode, $validTypeCodes)) {
38        throw new Exception("유효하지 않은 유형 코드입니다. 다음 중 하나여야 합니다: " . implode(', ', $validTypeCodes));
39    }
40    
41    // 제공되지 않은 경우 무작위 DNI 생성
42    if ($dni === null) {
43        $dni = rand(10000000, 99999999);
44    }
45    
46    // 검증 숫자 계산
47    $verificationDigit = calculateVerificationDigit($typeCode, $dni);
48    
49    // CUIT/CUIL 형식화
50    return sprintf("%d-%08d-%d", $typeCode, $dni, $verificationDigit);
51}
52
53function validateCuitCuil($cuitCuil) {
54    // 하이픈 제거
55    $cuitCuilClean = str_replace('-', '', $cuitCuil);
56    
57    // 기본 형식 확인
58    if (!preg_match('/^\d{11}$/', $cuitCuilClean)) {
59        return ['isValid' => false, 'errorMessage' => '잘못된 형식'];
60    }
61    
62    // 구성 요소 추출
63    $typeCode = (int)substr($cuitCuilClean, 0, 2);
64    $dni = (int)substr($cuitCuilClean, 2, 8);
65    $verificationDigit = (int)substr($cuitCuilClean, 10, 1);
66    
67    // 유형 코드 검증
68    $validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
69    if (!in_array($typeCode, $validTypeCodes)) {
70        return ['isValid' => false, 'errorMessage' => '잘못된 유형 코드'];
71    }
72    
73    // 검증 숫자 계산 및 비교
74    $calculatedDigit = calculateVerificationDigit($typeCode, $dni);
75    if ($calculatedDigit !== $verificationDigit) {
76        return ['isValid' => false, 'errorMessage' => '잘못된 검증 숫자'];
77    }
78    
79    return ['isValid' => true];
80}
81
82// 사용 예
83echo generateCuitCuil(20, 12345678) . "\n"; // 특정 DNI에 대해 생성
84echo generateCuitCuil(27) . "\n"; // 무작위 DNI로 생성
85var_dump(validateCuitCuil("20-12345678-9")); // CUIT/CUIL 검증
86?>
87

자주 묻는 질문

CUIT와 CUIL의 차이는 무엇인가요?

CUIT(Clave Única de Identificación Tributaria)는 세금 식별 목적으로 사용되며, 아르헨티나에서 세금을 납부해야 하는 개인 및 법인에게 할당됩니다. CUIL(Clave Única de Identificación Laboral)은 근로자를 위해 특별히 사용되며 노동 및 사회 보장 목적으로 사용됩니다. 두 번호는 동일한 형식과 계산 알고리즘을 공유하지만, 서로 다른 행정적 목적을 가지고 있습니다.

개인에게 사용되는 유형 코드와 기업에게 사용되는 유형 코드는 무엇인가요?

개인에게:

  • 20, 23, 24: 남성 개인(CUIL)
  • 27: 여성 개인(CUIL)

기업 및 조직에게:

  • 30: 법인(CUIT)
  • 33: 시민 협회(CUIT)
  • 34: 재단(CUIT)

검증 숫자는 어떻게 계산되나요?

검증 숫자는 가중 합 알고리즘을 사용하여 계산됩니다. 처음 10자리 숫자는 각각의 가중치(5, 4, 3, 2, 7, 6, 5, 4, 3, 2)로 곱해지고, 결과가 합산됩니다. 검증 숫자는 이 합을 11로 나눈 나머지로 11을 뺀 값입니다. 특수 사례: 결과가 11이면 검증 숫자는 0이며, 결과가 10이면 검증 숫자는 9입니다.

이 도구를 사용하여 실제 공식 CUIT/CUIL 번호를 생성할 수 있나요?

아니요, 이 도구는 테스트 및 교육 목적으로만 설계되었습니다. 생성된 숫자는 CUIT/CUIL 알고리즘에 따라 수학적으로 유효하지만, 아르헨티나 세무 당국(AFIP)에 공식 등록되어 있지 않습니다. 공식 CUIT/CUIL 등록을 위해 개인 및 기업은 AFIP를 통해 적절한 법적 절차를 따라야 합니다.

CUIT/CUIL 검증이 올바른 형식처럼 보이는데도 실패하는 이유는 무엇인가요?

검증이 실패할 수 있는 여러 가지 이유가 있습니다:

  1. 유형 코드가 유효한 코드가 아닙니다(20, 23, 24, 27, 30, 33, 34 중 하나여야 함).
  2. 검증 숫자가 알고리즘에 따라 계산된 값과 일치하지 않습니다.
  3. 형식이 잘못되었습니다(XX-XXXXXXXX-X이어야 함).
  4. 입력에 숫자가 아닌 문자가 포함되어 있습니다(하이픈 제외).

CUIT/CUIL 번호에 하이픈이 필요합니까?

CUIT/CUIL 번호는 일반적으로 하이픈(XX-XXXXXXXX-X)으로 작성되고 표시되지만, 계산 목적으로 하이픈은 실제 번호의 일부가 아닙니다. 우리의 검증기는 두 형식(하이픈이 있는 형식 및 없는 형식)을 모두 수용하며, 어느 형식이든 적절하게 검증합니다.

CUIT/CUIL 번호의 DNI 부분이 8자리보다 적을 수 있나요?

아니요, DNI 부분은 항상 정확히 8자리여야 합니다. 실제 DNI가 8자리보다 적은 경우, 8자리에 도달하기 위해 선행 0으로 채워져야 합니다. 예를 들어, 누군가의 DNI가 1234567인 경우, CUIT/CUIL에서는 01234567로 표시됩니다.

CUIT/CUIL이 아르헨티나에서 공식적으로 등록되어 있는지 어떻게 확인할 수 있나요?

CUIT/CUIL이 공식적으로 등록되고 활성 상태인지 확인하려면 공식 AFIP(Administración Federal de Ingresos Públicos) 웹사이트 또는 서비스를 사용해야 합니다. 우리의 도구는 번호의 수학적 유효성만 검증하며, 공식 등록 상태는 검증하지 않습니다.

이 도구를 상업용 애플리케이션에서 사용할 수 있나요?

네, 이 도구에서 보여준 알고리즘과 로직을 상업용 애플리케이션에 통합할 수 있습니다. CUIT/CUIL 검증 알고리즘은 공개 표준입니다. 그러나 생산 환경에서는 적절한 오류 처리를 구현하고 필요할 경우 공식 출처에 대한 추가 검증을 고려하는 것이 좋습니다.

도구가 생성되거나 검증된 CUIT/CUIL 번호를 저장하나요?

아니요, 이 도구는 입력되거나 생성된 정보를 저장하지 않습니다. 모든 처리는 귀하의 브라우저에서 클라이언트 측에서 수행되며, 데이터가 우리의 서버에 전송되거나 저장되지 않습니다. 이는 입력한 정보의 프라이버시와 보안을 보장합니다.

참고 자료

  1. AFIP (Administración Federal de Ingresos Públicos). "CUIT/CUIL/CDI." 공식 웹사이트. https://www.afip.gob.ar/

  2. 노동부, 고용 및 사회 보장부. "CUIL - Clave Única de Identificación Laboral." https://www.argentina.gob.ar/trabajo

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

  4. 아르헨티나 공화국 관보. "AFIP 2854/2010 일반 규정: 절차. 고유 세금 식별 번호(C.U.I.T.)."

  5. 아르헨티나 공화국 세법. "납세자 식별 및 등록."


아르헨티나 CUIT/CUIL 번호를 생성하거나 검증할 준비가 되셨나요? 지금 도구를 사용해 보시고 테스트 프로세스를 간소화하세요!