🛠️

Whiz Tools

Build • Create • Innovate

เครื่องมือสร้างและตรวจสอบ CUIT/CUIL ของอาร์เจนตินา

สร้างหมายเลข CUIT/CUIL ของอาร์เจนตินาที่ถูกต้องสำหรับการทดสอบหรือยืนยันหมายเลขที่มีอยู่ เครื่องมือที่ง่ายสำหรับนักพัฒนาที่ทำงานกับหมายเลขประจำตัวทางภาษีและแรงงานของอาร์เจนตินา

เครื่องกำเนิด CUIT/CUIL

กรอกหมายเลข DNI 8 หลัก หรือใช้เครื่องกำเนิดแบบสุ่ม

CUIT/CUIL ที่สร้างขึ้น

📚

เอกสารประกอบ

เครื่องมือสร้างและตรวจสอบ CUIT/CUIL ของอาร์เจนตินา

บทนำ

หมายเลข CUIT (Clave Única de Identificación Tributaria) และ CUIL (Clave Única de Identificación Laboral) ของอาร์เจนตินา เป็นหมายเลขประจำตัวที่ไม่ซ้ำกันซึ่งใช้ในอาร์เจนตินาสำหรับวัตถุประสงค์ด้านภาษีและการจ้างงานตามลำดับ หมายเลข 11 หลักเหล่านี้มีความสำคัญสำหรับบุคคลและธุรกิจในการดำเนินการอย่างถูกต้องตามกฎหมายภายในระบบเศรษฐกิจของอาร์เจนตินา เครื่องมือสร้างและตรวจสอบ CUIT/CUIL ของเราให้วิธีที่ง่ายและมีประสิทธิภาพในการสร้างหมายเลข CUIT/CUIL ที่ถูกต้องสำหรับวัตถุประสงค์ในการทดสอบและตรวจสอบหมายเลขที่มีอยู่เพื่อให้แน่ใจว่าตรงตามรูปแบบอย่างเป็นทางการและอัลกอริธึมการตรวจสอบ

ไม่ว่าคุณจะเป็นนักพัฒนาที่ทดสอบแอปพลิเคชันที่จัดการหมายเลขประจำตัวภาษีของอาร์เจนตินา ผู้เชี่ยวชาญด้าน QA ที่ตรวจสอบฟังก์ชันการทำงานของระบบ หรือเพียงแค่ต้องการเข้าใจว่าหมายเลขประจำตัวเหล่านี้ทำงานอย่างไร เครื่องมือนี้มีวิธีแก้ปัญหาที่ตรงไปตรงมาโดยไม่มีความซับซ้อนที่ไม่จำเป็น เครื่องมือนี้มีฟังก์ชันหลักสองอย่าง: เครื่องมือสร้างที่สร้างหมายเลข CUIT/CUIL ที่ถูกต้องแบบสุ่มหรือโดยอิงจากพารามิเตอร์เฉพาะ และเครื่องมือที่ตรวจสอบว่าหมายเลข CUIT/CUIL ที่กำหนดปฏิบัติตามรูปแบบและกฎการคำนวณที่ถูกต้อง

โครงสร้างและการคำนวณ CUIT/CUIL

ทำความเข้าใจกับรูปแบบ

หมายเลข CUIT/CUIL ที่ถูกต้องจะประกอบด้วย 11 หลักซึ่งโดยทั่วไปจะแสดงในรูปแบบ XX-XXXXXXXX-X:

  1. รหัสประเภท (สองหลักแรก): ระบุประเภทของหน่วยงาน

    • 20, 23, 24: บุคคลชาย (CUIL)
    • 27: บุคคลหญิง (CUIL)
    • 30, 33, 34: บริษัทและองค์กร (CUIT)
  2. หมายเลข DNI (8 หลักกลาง): สำหรับบุคคล หมายเลขนี้คือหมายเลขเอกสารประจำตัวประชาชนของพวกเขา (DNI) โดยจะมีการเติมศูนย์นำหน้าหากจำเป็นเพื่อให้มี 8 หลัก สำหรับบริษัท หมายเลขนี้คือหมายเลขที่กำหนดเฉพาะ

  3. หลักการตรวจสอบ (หลักสุดท้าย): หลักการตรวจสอบที่คำนวณโดยใช้อัลกอริธึมเฉพาะเพื่อยืนยันหมายเลขทั้งหมด

การคำนวณหลักการตรวจสอบ

หลักการตรวจสอบจะคำนวณโดยใช้อัลกอริธึมต่อไปนี้:

  1. นำ 10 หลักแรกของ CUIT/CUIL (รหัสประเภท + 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 คือหลักที่ ii ของ 10 หลักแรก
  • 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. เลือกแท็บ "Generator" ที่ด้านบนของอินเทอร์เฟซเครื่องมือ

  2. เลือก รหัสประเภท จากเมนูแบบดรอปดาวน์:

    • 20: ชาย (CUIL)
    • 23: ธุรกิจ (CUIT)
    • 24: ธุรกิจชั่วคราว (CUIT)
    • 27: หญิง (CUIL)
    • 30: บริษัท (CUIT)
    • 33: สมาคมพลเมือง (CUIT)
    • 34: มูลนิธิ (CUIT)
  3. กรอกหมายเลข DNI (ไม่บังคับ):

    • ป้อนหมายเลข DNI 8 หลักในช่องที่กำหนด
    • หากไม่กรอก เครื่องมือจะใช้หมายเลข DNI ที่สร้างแบบสุ่ม
    • หากคุณป้อนน้อยกว่า 8 หลัก ระบบจะเติมด้วยศูนย์นำหน้า
  4. สร้าง DNI แบบสุ่ม (ไม่บังคับ):

    • คลิกปุ่ม "Random" เพื่อสร้างหมายเลข DNI 8 หลักแบบสุ่ม
  5. ดู CUIT/CUIL ที่สร้างขึ้น:

    • เครื่องมือจะแสดง CUIT/CUIL ที่ถูกต้องตามข้อมูลที่คุณป้อนโดยอัตโนมัติ
    • รูปแบบจะเป็น XX-XXXXXXXX-X พร้อมหลักการตรวจสอบที่ถูกต้อง
  6. คัดลอกผลลัพธ์:

    • คลิกที่ไอคอนคัดลอกเพื่อคัดลอก CUIT/CUIL ที่สร้างขึ้นไปยังคลิปบอร์ดของคุณ
    • ข้อความยืนยันจะปรากฏขึ้นเมื่อคัดลอกสำเร็จ

การใช้เครื่องมือตรวจสอบ

  1. เลือกแท็บ "Validator" ที่ด้านบนของอินเทอร์เฟซเครื่องมือ

  2. กรอก CUIT/CUIL ที่ต้องการตรวจสอบ:

    • ป้อน CUIT/CUIL ในรูปแบบ XX-XXXXXXXX-X
    • เครื่องมือจะจัดรูปแบบข้อมูลที่คุณป้อนโดยอัตโนมัติด้วยขีดกลางเมื่อคุณพิมพ์
    • คุณยังสามารถป้อนหมายเลขโดยไม่มีขีดกลาง (XXXXXXXXXXX)
  3. คลิกปุ่ม "Validate":

    • เครื่องมือจะตรวจสอบรูปแบบ รหัสประเภท และหลักการตรวจสอบ
  4. ดูผลลัพธ์การตรวจสอบ:

    • สำหรับหมายเลข CUIT/CUIL ที่ถูกต้อง ข้อความยืนยันสีเขียวจะปรากฏขึ้น
    • สำหรับหมายเลขที่ไม่ถูกต้อง ข้อความแสดงข้อผิดพลาดสีแดงจะอธิบายปัญหา:
      • รูปแบบไม่ถูกต้อง (ต้องเป็น XX-XXXXXXXX-X)
      • รหัสประเภทไม่ถูกต้อง (ต้องเป็นหนึ่งใน: 20, 23, 24, 27, 30, 33, 34)
      • หลักการตรวจสอบไม่ถูกต้อง
  5. ข้อมูลเพิ่มเติม:

    • สำหรับหมายเลขที่ถูกต้อง เครื่องมือจะแสดงการแบ่งส่วนประกอบ:
      • รหัสประเภทและความหมายของมัน
      • หมายเลข DNI
      • หลักการตรวจสอบ

กรณีการใช้งาน

การพัฒนาและการทดสอบ

  1. การพัฒนา Software: สร้างหมายเลข CUIT/CUIL ที่ถูกต้องเพื่อตรวจสอบแอปพลิเคชันที่จัดการหมายเลขประจำตัวภาษีของอาร์เจนตินา เช่น:

    • แพลตฟอร์มอีคอมเมิร์ซ
    • ซอฟต์แวร์บัญชี
    • ระบบการจัดการทรัพยากรบุคคล
    • พอร์ทัลบริการของรัฐบาล
    • แอปพลิเคชันธนาคาร
  2. การเติมฐานข้อมูล: สร้างข้อมูลทดสอบที่สมจริงสำหรับระบบที่จัดเก็บข้อมูลผู้ใช้ของอาร์เจนตินา เพื่อให้แน่ใจว่าข้อจำกัดและกฎการตรวจสอบของฐานข้อมูลทำงานอย่างถูกต้อง

  3. การทดสอบการตรวจสอบแบบฟอร์ม: ทดสอบการตรวจสอบข้อมูลสำหรับแบบฟอร์มเว็บที่เก็บข้อมูล CUIT/CUIL โดยยืนยันว่าข้อความแสดงข้อผิดพลาดที่เหมาะสมปรากฏขึ้นสำหรับการป้อนข้อมูลที่ไม่ถูกต้อง

  4. การทดสอบ API: สร้างข้อมูลที่ถูกต้องสำหรับ payload ของ API ที่ต้องการหมายเลข CUIT/CUIL เพื่อให้แน่ใจว่าการทดสอบการรวมระบบของคุณใช้ข้อมูลที่ถูกต้อง

  5. การตรวจสอบ QA อัตโนมัติ: รวมการสร้าง CUIT/CUIL ในสคริปต์ทดสอบอัตโนมัติเพื่อสร้างกรณีทดสอบที่มีพลศาสตร์แทนที่จะใช้ข้อมูลทดสอบแบบคงที่

วัตถุประสงค์ทางการศึกษา

  1. เรียนรู้เกี่ยวกับอัลกอริธึมการตรวจสอบ: เข้าใจว่าอัลกอริธึมการตรวจสอบทำงานอย่างไรในทางปฏิบัติ โดยการดูขั้นตอนการตรวจสอบ CUIT/CUIL

  2. การสอนการตรวจสอบข้อมูล: ใช้เป็นตัวอย่างการศึกษาเมื่อสอนเทคนิคการตรวจสอบแบบฟอร์มให้กับนักพัฒนารายใหม่

  3. เข้าใจข้อกำหนดทางธุรกิจของอาร์เจนตินา: เรียนรู้เกี่ยวกับระบบการระบุที่ใช้ในอาร์เจนตินาสำหรับการพัฒนาธุรกิจระหว่างประเทศ

ทางเลือก

ในขณะที่เครื่องมือของเราให้วิธีที่ตรงไปตรงมาในการสร้างและตรวจสอบหมายเลข CUIT/CUIL แต่ยังมีวิธีการทางเลือกที่คุณอาจพิจารณา:

  1. การตรวจสอบอย่างเป็นทางการจากรัฐบาล: สำหรับสภาพแวดล้อมการผลิต ควรตรวจสอบหมายเลข CUIT/CUIL กับฐานข้อมูลอย่างเป็นทางการของ AFIP (Administración Federal de Ingresos Públicos) เมื่อเป็นไปได้

  2. ไลบรารีและแพ็คเกจ: ภาษาโปรแกรมหลายภาษาได้มีไลบรารีที่ออกแบบมาเฉพาะสำหรับการตรวจสอบหมายเลขประจำตัวภาษีของอาร์เจนตินา:

    • JavaScript: แพ็คเกจ npm validar-cuit
    • 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 หลักด้วยศูนย์นำหน้า
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 หลักด้วยศูนย์นำหน้า
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 หลักด้วยศูนย์นำหน้า
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 หลักด้วยศูนย์นำหน้า
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 กรณีพิเศษ: หากผลลัพธ์คือ 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 หลัก ตัวอย่างเช่น หากหมายเลข 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. โบลาตินทางการของสาธารณรัฐอาร์เจนตินา. "Resolución General AFIP 2854/2010: Procedimiento. Clave Única de Identificación Tributaria (C.U.I.T.)."

  5. รหัสภาษีของสาธารณรัฐอาร์เจนตินา. "การระบุและการลงทะเบียนผู้เสียภาษี."


พร้อมที่จะสร้างหรือตรวจสอบหมายเลข CUIT/CUIL ของอาร์เจนตินาแล้วหรือยัง? ลองใช้เครื่องมือของเราเดี๋ยวนี้และทำให้กระบวนการทดสอบของคุณง่ายขึ้น!

🔗

เครื่องมือที่เกี่ยวข้อง

ค้นพบเครื่องมือเพิ่มเติมที่อาจมีประโยชน์สำหรับการทำงานของคุณ

เครื่องมือสร้างและตรวจสอบ CUIT ของอาร์เจนตินาสำหรับการทดสอบ

ลองเครื่องมือนี้

เครื่องมือสร้างและตรวจสอบ CBU ของอาร์เจนตินา | รหัสธนาคาร

ลองเครื่องมือนี้

เครื่องมือสร้างและตรวจสอบ IBAN สำหรับการทดสอบและการตรวจสอบ

ลองเครื่องมือนี้

เครื่องมือสร้างและตรวจสอบ CNPJ ของบราซิลสำหรับการทดสอบ

ลองเครื่องมือนี้

เครื่องมือสร้างและตรวจสอบ CLABE ของเม็กซิโกสำหรับการทดสอบซอฟต์แวร์

ลองเครื่องมือนี้

เครื่องคำนวณเส้นรอบวงที่เปียกสำหรับรูปทรงต่างๆ

ลองเครื่องมือนี้

เครื่องสร้างหมายเลข CPF สำหรับการทดสอบและพัฒนา

ลองเครื่องมือนี้

เครื่องมือสร้าง CUID ที่ไม่ซ้ำและสามารถขยายได้

ลองเครื่องมือนี้

เครื่องมือสร้าง RFC เม็กซิกันสำหรับการทดสอบ | สร้างรหัสประจำตัวผู้เสียภาษีที่ถูกต้อง

ลองเครื่องมือนี้