Генеруйте дійсні номери CUIT/CUIL Аргентини для тестування або перевіряйте існуючі. Простий інструмент для розробників, які працюють з податковими та трудовими ідентифікаційними номерами Аргентини.
Введіть 8-значний номер DNI або скористайтеся генератором
Аргентинський CUIT (Clave Única de Identificación Tributaria) та CUIL (Clave Única de Identificación Laboral) — це унікальні ідентифікаційні номери, які використовуються в Аргентині для податкових та трудових цілей відповідно. Ці 11-значні коди є необхідними для осіб та підприємств, щоб легально функціонувати в аргентинській економічній системі. Наш інструмент генерації та валідатора CUIT/CUIL забезпечує простий та ефективний спосіб генерувати дійсні номери CUIT/CUIL для тестування та перевіряти існуючі номери, щоб впевнитися, що вони відповідають офіційному формату та алгоритму верифікації.
Чи ви розробник, який тестує програми, що обробляють аргентинські податкові ідентифікатори, спеціаліст з контролю якості, який перевіряє функціональність системи, чи просто вам потрібно зрозуміти, як працюють ці ідентифікаційні номери, цей інструмент пропонує просте рішення без зайвих ускладнень. Інструмент має дві основні функції: генератор, який створює дійсні номери CUIT/CUIL випадковим чином або на основі певних параметрів, та валідатор, який перевіряє, чи даний номер CUIT/CUIL відповідає правильному формату та правилам розрахунку.
Дійсний номер CUIT/CUIL складається з 11 цифр, які зазвичай відображаються у форматі XX-XXXXXXXX-X:
Код типу (перші 2 цифри): Вказує на тип суб'єкта
Номер DNI (середні 8 цифр): Для осіб це їх номер національного документа особи (DNI), доповнений нулями попереду, якщо це необхідно, щоб досягти 8 цифр. Для компаній це унікальний присвоєний номер.
Перевірочна цифра (остання цифра): Цифра перевірки, розрахована за допомогою специфічного алгоритму для верифікації всього номера.
Перевірочна цифра розраховується за наступним алгоритмом:
Математично це можна виразити як:
Де:
Виберіть вкладку "Генератор" у верхній частині інтерфейсу інструмента.
Виберіть код типу з випадаючого меню:
Введіть номер DNI (необов'язково):
Згенерувати випадковий DNI (необов'язково):
Перегляньте згенерований CUIT/CUIL:
Скопіюйте результат:
Виберіть вкладку "Валідатор" у верхній частині інтерфейсу інструмента.
Введіть CUIT/CUIL для перевірки:
Натисніть кнопку "Валідувати":
Перегляньте результат валідації:
Додаткова інформація:
Розробка програмного забезпечення: Генеруйте дійсні номери CUIT/CUIL для тестування програм, які обробляють аргентинські податкові ідентифікатори, такі як:
Заповнення бази даних: Створіть реалістичні тестові дані для систем, які зберігають інформацію про аргентинських користувачів, забезпечуючи правильну роботу обмежень бази даних та правил валідації.
Тестування валідації форм: Тестуйте валідацію вводу для веб-форм, які збирають інформацію про CUIT/CUIL, перевіряючи, що правильні повідомлення про помилки з'являються для недійсних записів.
Тестування API: Генеруйте дійсні дані для API-інтерфейсів, які вимагають номерів CUIT/CUIL, забезпечуючи, щоб ваші інтеграційні тести використовували дійсні дані.
Автоматизація QA: Включайте генерацію CUIT/CUIL у автоматизовані тестові сценарії, щоб створювати динамічні тестові випадки замість використання статичних тестових даних.
Вивчення алгоритмів валідації: Зрозумійте, як працюють алгоритми перевірки цифр на практиці, спостерігаючи за процесом верифікації CUIT/CUIL.
Навчання валідації даних: Використовуйте як навчальний приклад під час навчання нових розробників технікам валідації форм.
Розуміння вимог бізнесу Аргентини: Досліджуйте ідентифікаційну систему, що використовується в Аргентині, для міжнародного розвитку бізнесу.
Хоча наш інструмент забезпечує простий спосіб генерувати та валідувати номери CUIT/CUIL, ви можете розглянути альтернативні підходи:
Офіційна валідація урядом: Для виробничих середовищ завжди перевіряйте номери CUIT/CUIL проти офіційної бази даних AFIP (Administración Federal de Ingresos Públicos), коли це можливо.
Бібліотеки та пакети: Декілька мов програмування мають бібліотеки, спеціально призначені для валідації аргентинських податкових ідентифікаторів:
validar-cuit
afip-php
py-cuit
Ручний розрахунок: Для навчальних цілей ви можете вручну обчислити перевірочну цифру, використовуючи описаний раніше алгоритм.
Комплексні сервіси валідації бізнесу: Для корпоративних застосунків розгляньте можливість використання комплексних сервісів валідації, які не лише перевіряють формат, а й підтверджують існування та статус суб'єкта, пов'язаного з 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 використовується не лише для податкових та трудових цілей, але й для широкого спектру діяльності, включаючи банківські операції, угоди з нерухомістю, комунальні послуги та онлайн-покупки, що робить його важливим ідентифікатором як для осіб, так і для підприємств, що функціонують в Аргентині.
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
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
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
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 (Clave Única de Identificación Tributaria) використовується для податкової ідентифікації і призначається як фізичним, так і юридичним особам, які повинні сплачувати податки в Аргентині. CUIL (Clave Única de Identificación Laboral) спеціально призначений для працівників і використовується для трудових та соціальних цілей. Хоча вони мають однаковий формат та алгоритм верифікації, вони слугують різним адміністративним цілям.
Для осіб:
Для компаній та організацій:
Перевірочна цифра розраховується за допомогою алгоритму зваженої суми. Кожна з перших 10 цифр множиться на відповідню вагу (5, 4, 3, 2, 7, 6, 5, 4, 3, 2), а результати сумуються. Перевірочна цифра дорівнює 11 мінус залишок від ділення цієї суми на 11. Спеціальні випадки: якщо результат дорівнює 11, перевірочна цифра дорівнює 0; якщо результат дорівнює 10, перевірочна цифра дорівнює 9.
Ні, цей інструмент призначений лише для тестування та освітніх цілей. Згенеровані номери є математично дійсними відповідно до алгоритму CUIT/CUIL, але не зареєстровані офіційно в аргентинських податкових органах (AFIP). Для офіційної реєстрації CUIT/CUIL фізичні та юридичні особи повинні дотримуватися належних юридичних процедур через AFIP.
Валідація може не проходити з кількох причин:
Хоча номери CUIT/CUIL зазвичай пишуться та відображаються з дефісами (XX-XXXXXXXX-X), дефіси не є частиною фактичного номера для цілей розрахунку. Наш валідатор приймає обидва формати (з або без дефісів) і правильно перевіряє будь-який формат.
Ні, частина DNI завжди повинна бути точною 8 цифрами. Якщо фактичний DNI має менше цифр, його потрібно доповнити нулями попереду, щоб досягти 8 цифр. Наприклад, якщо номер DNI особи 1234567, то в CUIT/CUIL він буде представлений як 01234567.
Щоб перевірити, чи CUIT/CUIL офіційно зареєстрований та активний, вам слід використовувати офіційний веб-сайт або сервіси AFIP (Administración Federal de Ingresos Públicos). Наш інструмент лише перевіряє математичну дійсність номера, а не його офіційний статус реєстрації.
Так, ви можете інтегрувати алгоритм і логіку, продемонстровані в цьому інструменті, у свої комерційні застосунки. Алгоритм валідації 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/
Офіційний бюлетень Республіки Аргентина. "Розпорядження генеральної AFIP 2854/2010: Процедура. Clave Única de Identificación Tributaria (C.U.I.T.)."
Податковий кодекс Республіки Аргентина. "Ідентифікація та реєстрація платників податків."
Готові генерувати або перевіряти аргентинські номери CUIT/CUIL? Спробуйте наш інструмент зараз і спростіть свій процес тестування!
Відкрийте більше інструментів, які можуть бути корисними для вашого робочого процесу