เครื่องมือสร้างและตรวจสอบ 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:
-
รหัสประเภท (สองหลักแรก): ระบุประเภทของหน่วยงาน
- 20, 23, 24: บุคคลชาย (CUIL)
- 27: บุคคลหญิง (CUIL)
- 30, 33, 34: บริษัทและองค์กร (CUIT)
-
หมายเลข DNI (8 หลักกลาง): สำหรับบุคคล หมายเลขนี้คือหมายเลขเอกสารประจำตัวประชาชนของพวกเขา (DNI) โดยจะมีการเติมศูนย์นำหน้าหากจำเป็นเพื่อให้มี 8 หลัก สำหรับบริษัท หมายเลขนี้คือหมายเลขที่กำหนดเฉพาะ
-
หลักการตรวจสอบ (หลักสุดท้าย): หลักการตรวจสอบที่คำนวณโดยใช้อัลกอริธึมเฉพาะเพื่อยืนยันหมายเลขทั้งหมด
การคำนวณหลักการตรวจสอบ
หลักการตรวจสอบจะคำนวณโดยใช้อัลกอริธึมต่อไปนี้:
- นำ 10 หลักแรกของ CUIT/CUIL (รหัสประเภท + DNI)
- คูณแต่ละหลักด้วยน้ำหนักที่สอดคล้องกันจากลำดับนี้: 5, 4, 3, 2, 7, 6, 5, 4, 3, 2
- รวมผลิตภัณฑ์ทั้งหมดที่ได้
- คำนวณ 11 ลบเศษของผลรวมที่หารด้วย 11
- หากผลลัพธ์คือ 11 หลักการตรวจสอบคือ 0
- หากผลลัพธ์คือ 10 หลักการตรวจสอบคือ 9
- มิฉะนั้น ผลลัพธ์คือหลักการตรวจสอบ
ทางคณิตศาสตร์สามารถแสดงได้ดังนี้:
โดยที่:
- คือหลักการตรวจสอบ
- คือหลักที่ ของ 10 หลักแรก
- คือ น้ำหนักที่สอดคล้องกันจากลำดับ [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
- กรณีพิเศษ: หาก ให้ หาก ให้
คู่มือทีละขั้นตอน
การใช้เครื่องมือสร้าง
-
เลือกแท็บ "Generator" ที่ด้านบนของอินเทอร์เฟซเครื่องมือ
-
เลือก รหัสประเภท จากเมนูแบบดรอปดาวน์:
- 20: ชาย (CUIL)
- 23: ธุรกิจ (CUIT)
- 24: ธุรกิจชั่วคราว (CUIT)
- 27: หญิง (CUIL)
- 30: บริษัท (CUIT)
- 33: สมาคมพลเมือง (CUIT)
- 34: มูลนิธิ (CUIT)
-
กรอกหมายเลข DNI (ไม่บังคับ):
- ป้อนหมายเลข DNI 8 หลักในช่องที่กำหนด
- หากไม่กรอก เครื่องมือจะใช้หมายเลข DNI ที่สร้างแบบสุ่ม
- หากคุณป้อนน้อยกว่า 8 หลัก ระบบจะเติมด้วยศูนย์นำหน้า
-
สร้าง DNI แบบสุ่ม (ไม่บังคับ):
- คลิกปุ่ม "Random" เพื่อสร้างหมายเลข DNI 8 หลักแบบสุ่ม
-
ดู CUIT/CUIL ที่สร้างขึ้น:
- เครื่องมือจะแสดง CUIT/CUIL ที่ถูกต้องตามข้อมูลที่คุณป้อนโดยอัตโนมัติ
- รูปแบบจะเป็น XX-XXXXXXXX-X พร้อมหลักการตรวจสอบที่ถูกต้อง
-
คัดลอกผลลัพธ์:
- คลิกที่ไอคอนคัดลอกเพื่อคัดลอก CUIT/CUIL ที่สร้างขึ้นไปยังคลิปบอร์ดของคุณ
- ข้อความยืนยันจะปรากฏขึ้นเมื่อคัดลอกสำเร็จ
การใช้เครื่องมือตรวจสอบ
-
เลือกแท็บ "Validator" ที่ด้านบนของอินเทอร์เฟซเครื่องมือ
-
กรอก CUIT/CUIL ที่ต้องการตรวจสอบ:
- ป้อน CUIT/CUIL ในรูปแบบ XX-XXXXXXXX-X
- เครื่องมือจะจัดรูปแบบข้อมูลที่คุณป้อนโดยอัตโนมัติด้วยขีดกลางเมื่อคุณพิมพ์
- คุณยังสามารถป้อนหมายเลขโดยไม่มีขีดกลาง (XXXXXXXXXXX)
-
คลิกปุ่ม "Validate":
- เครื่องมือจะตรวจสอบรูปแบบ รหัสประเภท และหลักการตรวจสอบ
-
ดูผลลัพธ์การตรวจสอบ:
- สำหรับหมายเลข CUIT/CUIL ที่ถูกต้อง ข้อความยืนยันสีเขียวจะปรากฏขึ้น
- สำหรับหมายเลขที่ไม่ถูกต้อง ข้อความแสดงข้อผิดพลาดสีแดงจะอธิบายปัญหา:
- รูปแบบไม่ถูกต้อง (ต้องเป็น XX-XXXXXXXX-X)
- รหัสประเภทไม่ถูกต้อง (ต้องเป็นหนึ่งใน: 20, 23, 24, 27, 30, 33, 34)
- หลักการตรวจสอบไม่ถูกต้อง
-
ข้อมูลเพิ่มเติม:
- สำหรับหมายเลขที่ถูกต้อง เครื่องมือจะแสดงการแบ่งส่วนประกอบ:
- รหัสประเภทและความหมายของมัน
- หมายเลข DNI
- หลักการตรวจสอบ
- สำหรับหมายเลขที่ถูกต้อง เครื่องมือจะแสดงการแบ่งส่วนประกอบ:
กรณีการใช้งาน
การพัฒนาและการทดสอบ
-
การพัฒนา Software: สร้างหมายเลข CUIT/CUIL ที่ถูกต้องเพื่อตรวจสอบแอปพลิเคชันที่จัดการหมายเลขประจำตัวภาษีของอาร์เจนตินา เช่น:
- แพลตฟอร์มอีคอมเมิร์ซ
- ซอฟต์แวร์บัญชี
- ระบบการจัดการทรัพยากรบุคคล
- พอร์ทัลบริการของรัฐบาล
- แอปพลิเคชันธนาคาร
-
การเติมฐานข้อมูล: สร้างข้อมูลทดสอบที่สมจริงสำหรับระบบที่จัดเก็บข้อมูลผู้ใช้ของอาร์เจนตินา เพื่อให้แน่ใจว่าข้อจำกัดและกฎการตรวจสอบของฐานข้อมูลทำงานอย่างถูกต้อง
-
การทดสอบการตรวจสอบแบบฟอร์ม: ทดสอบการตรวจสอบข้อมูลสำหรับแบบฟอร์มเว็บที่เก็บข้อมูล CUIT/CUIL โดยยืนยันว่าข้อความแสดงข้อผิดพลาดที่เหมาะสมปรากฏขึ้นสำหรับการป้อนข้อมูลที่ไม่ถูกต้อง
-
การทดสอบ API: สร้างข้อมูลที่ถูกต้องสำหรับ payload ของ API ที่ต้องการหมายเลข CUIT/CUIL เพื่อให้แน่ใจว่าการทดสอบการรวมระบบของคุณใช้ข้อมูลที่ถูกต้อง
-
การตรวจสอบ QA อัตโนมัติ: รวมการสร้าง CUIT/CUIL ในสคริปต์ทดสอบอัตโนมัติเพื่อสร้างกรณีทดสอบที่มีพลศาสตร์แทนที่จะใช้ข้อมูลทดสอบแบบคงที่
วัตถุประสงค์ทางการศึกษา
-
เรียนรู้เกี่ยวกับอัลกอริธึมการตรวจสอบ: เข้าใจว่าอัลกอริธึมการตรวจสอบทำงานอย่างไรในทางปฏิบัติ โดยการดูขั้นตอนการตรวจสอบ CUIT/CUIL
-
การสอนการตรวจสอบข้อมูล: ใช้เป็นตัวอย่างการศึกษาเมื่อสอนเทคนิคการตรวจสอบแบบฟอร์มให้กับนักพัฒนารายใหม่
-
เข้าใจข้อกำหนดทางธุรกิจของอาร์เจนตินา: เรียนรู้เกี่ยวกับระบบการระบุที่ใช้ในอาร์เจนตินาสำหรับการพัฒนาธุรกิจระหว่างประเทศ
ทางเลือก
ในขณะที่เครื่องมือของเราให้วิธีที่ตรงไปตรงมาในการสร้างและตรวจสอบหมายเลข CUIT/CUIL แต่ยังมีวิธีการทางเลือกที่คุณอาจพิจารณา:
-
การตรวจสอบอย่างเป็นทางการจากรัฐบาล: สำหรับสภาพแวดล้อมการผลิต ควรตรวจสอบหมายเลข CUIT/CUIL กับฐานข้อมูลอย่างเป็นทางการของ AFIP (Administración Federal de Ingresos Públicos) เมื่อเป็นไปได้
-
ไลบรารีและแพ็คเกจ: ภาษาโปรแกรมหลายภาษาได้มีไลบรารีที่ออกแบบมาเฉพาะสำหรับการตรวจสอบหมายเลขประจำตัวภาษีของอาร์เจนตินา:
- JavaScript: แพ็คเกจ npm
validar-cuit
- PHP: ไลบรารี
afip-php
- Python: แพ็คเกจ
py-cuit
- JavaScript: แพ็คเกจ npm
-
การคำนวณด้วยตนเอง: สำหรับวัตถุประสงค์ทางการศึกษา คุณอาจคำนวณหลักการตรวจสอบด้วยตนเองโดยใช้อัลกอริธึมที่อธิบายไว้ข้างต้น
-
บริการตรวจสอบธุรกิจที่ครอบคลุม: สำหรับแอปพลิเคชันองค์กร พิจารณาใช้บริการตรวจสอบที่ครอบคลุมซึ่งไม่เพียงแต่ตรวจสอบรูปแบบ แต่ยังตรวจสอบการมีอยู่และสถานะของหน่วยงานที่เกี่ยวข้องกับ 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 ของฉันถึงล้มเหลวแม้ว่ารูปแบบจะดูถูกต้อง?
การตรวจสอบอาจล้มเหลวได้จากหลายสาเหตุ:
- รหัสประเภทไม่ใช่หนึ่งในรหัสที่ถูกต้อง (20, 23, 24, 27, 30, 33, 34)
- หลักการตรวจสอบไม่ตรงกับค่าที่คำนวณได้ตามอัลกอริธึม
- รูปแบบไม่ถูกต้อง (ควรเป็น XX-XXXXXXXX-X)
- มีตัวอักษรที่ไม่ใช่ตัวเลขในข้อมูลที่ป้อน (นอกเหนือจากขีดกลาง)
ขีดกลางจำเป็นต้องมีในหมายเลข 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 ที่สร้างขึ้นหรือได้รับการตรวจสอบไว้หรือไม่?
ไม่ เครื่องมือนี้ไม่ได้เก็บข้อมูลใด ๆ ที่ป้อนหรือสร้างขึ้น ข้อมูลทั้งหมดจะถูกประมวลผลในฝั่งลูกค้าในเบราว์เซอร์ของคุณ และไม่มีข้อมูลใดถูกส่งไปยังหรือเก็บไว้ในเซิร์ฟเวอร์ของเรา สิ่งนี้ช่วยให้มั่นใจในความเป็นส่วนตัวและความปลอดภัยของข้อมูลใด ๆ ที่คุณป้อน
อ้างอิง
-
AFIP (Administración Federal de Ingresos Públicos). "CUIT/CUIL/CDI." เว็บไซต์ทางการ. https://www.afip.gob.ar/
-
กระทรวงการทำงาน การจ้างงาน และความมั่นคงทางสังคม. "CUIL - Clave Única de Identificación Laboral." https://www.argentina.gob.ar/trabajo
-
ANSES (Administración Nacional de la Seguridad Social). "รับ CUIL ของฉัน." https://www.anses.gob.ar/
-
โบลาตินทางการของสาธารณรัฐอาร์เจนตินา. "Resolución General AFIP 2854/2010: Procedimiento. Clave Única de Identificación Tributaria (C.U.I.T.)."
-
รหัสภาษีของสาธารณรัฐอาร์เจนตินา. "การระบุและการลงทะเบียนผู้เสียภาษี."
พร้อมที่จะสร้างหรือตรวจสอบหมายเลข CUIT/CUIL ของอาร์เจนตินาแล้วหรือยัง? ลองใช้เครื่องมือของเราเดี๋ยวนี้และทำให้กระบวนการทดสอบของคุณง่ายขึ้น!
ข้อเสนอแนะแสดงความคิดเห็น
คลิกที่ข้อเสนอแนะแสดงความคิดเห็นเพื่อเริ่มให้ข้อเสนอแนะแก่เครื่องมือนี้
เครื่องมือที่เกี่ยวข้อง
ค้นพบเครื่องมือเพิ่มเติมที่อาจมีประโยชน์สำหรับการทำงานของคุณ