Генерируйте действительные номера CNPJ Бразилии и проверяйте существующие с помощью этого простого инструмента, предназначенного для разработчиков и тестировщиков, работающих с идентификаторами бизнеса в Бразилии.
Сгенерируйте действительный номер CNPJ Бразилии для тестирования.
Проверьте, действителен ли номер CNPJ Бразилии.
CNPJ (Cadastro Nacional da Pessoa Jurídica) — это уникальный идентификационный номер, присваиваемый предприятиям и юридическим лицам в Бразилии. Этот инструмент генерации и валидации CNPJ Бразилии предоставляет простой и эффективный способ генерировать действительные номера CNPJ для тестирования и проверять существующие номера CNPJ в соответствии с официальным бразильским алгоритмом. Независимо от того, являетесь ли вы разработчиком, тестирующим приложения, которые обрабатывают данные бразильских компаний, профессионалом по контролю качества, создающим тестовые случаи, или любым другим, работающим с информацией о бразильских компаниях, этот инструмент упрощает процесс работы с номерами CNPJ.
В отличие от реальных номеров CNPJ, которые официально выдаются Федеральной налоговой службой Бразилии (Receita Federal), CNPJ, сгенерированные этим инструментом, математически действительны, но не зарегистрированы за реальными компаниями. Это делает их идеальными для сценариев тестирования, образцов данных и сред разработки, где вам нужны правильно отформатированные и действительные номера CNPJ без использования реальных идентификаторов бизнеса.
CNPJ (Cadastro Nacional da Pessoa Jurídica) — это 14-значный идентификационный номер, присваиваемый предприятиям и юридическим лицам Федеральной налоговой службой Бразилии. Он служит бразильским аналогом номера регистрации компании или налогового идентификатора. Каждое законно действующее предприятие в Бразилии должно иметь CNPJ, который используется для:
CNPJ является важным идентификатором в бизнес-экосистеме Бразилии и появляется на официальных документах, контрактах и финансовых записях.
Бразильский CNPJ состоит из 14 цифр, обычно форматируется как: XX.XXX.XXX/YYYY-ZZ
Структура разбивается следующим образом:
Например, правильно отформатированный CNPJ может выглядеть так: 12.345.678/0001-95
Контрольные цифры (последние две цифры) рассчитываются с использованием специфического математического алгоритма, который валидирует подлинность CNPJ. Этот алгоритм гарантирует, что случайно сгенерированные номера не могут пройти валидацию без соблюдения правильного метода расчета.
Алгоритм валидации CNPJ использует взвешенное вычисление для определения контрольных цифр. Вот как это работает:
Чтобы CNPJ был действителен, обе контрольные цифры должны совпадать с рассчитанными значениями.
Наш инструмент генерации и валидации CNPJ Бразилии предлагает две основные функции: генерацию действительных CNPJ и валидацию существующих номеров CNPJ.
Чтобы сгенерировать действительный CNPJ для тестирования:
Сгенерированный CNPJ будет следовать всем математическим правилам валидации реального CNPJ, но не зарегистрирован в Федеральной налоговой службе Бразилии.
Чтобы проверить, является ли CNPJ математически действительным:
Валидатор проверяет, соответствует ли CNPJ правильному формату и совпадают ли контрольные цифры с ожидаемыми значениями в соответствии с алгоритмом валидации.
Этот инструмент генерации и валидации CNPJ Бразилии особенно полезен в следующих сценариях:
Хотя наш инструмент предоставляет простое решение для генерации и валидации CNPJ в браузере, существует несколько альтернатив в зависимости от ваших конкретных потребностей:
Для разработчиков, интегрирующих валидацию CNPJ непосредственно в приложения, доступны несколько библиотек для конкретных языков:
cpf_cnpj.js
, validator.js
python-cnpj
, validate-docbr
brazilianutils
, respect/validation
caelum-stella
, commons-validator
cpf_cnpj
, brazilian-rails
Эти библиотеки часто предоставляют дополнительную функциональность, такую как форматирование, парсинг и валидация других бразильских документов.
Для приложений, требующих валидации без реализации алгоритма:
Для образовательных целей или одноразовых валидаций вы можете вручную применить алгоритм:
Тем не менее, ручной расчет подвержен ошибкам и неэффективен для регулярного использования.
Генератор и валидатор CNPJ в этом инструменте реализованы с использованием JavaScript, что делает его быстрым и способным работать полностью в вашем браузере без отправки ваших данных на сервер. Вот как работают основные функции:
1function generateCNPJ() {
2 // Генерируем первые 12 цифр случайным образом
3 const digits = Array.from({ length: 12 }, () => Math.floor(Math.random() * 10));
4
5 // Рассчитываем первую контрольную цифру
6 const firstCheckDigit = calculateCheckDigit(digits);
7 digits.push(firstCheckDigit);
8
9 // Рассчитываем вторую контрольную цифру
10 const secondCheckDigit = calculateCheckDigit(digits);
11 digits.push(secondCheckDigit);
12
13 // Форматируем CNPJ
14 return formatCNPJ(digits.join(''));
15}
16
17function calculateCheckDigit(digits) {
18 const weights = digits.length < 13
19 ? [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
20 : [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
21
22 const sum = digits.reduce((acc, digit, index) => {
23 return acc + digit * weights[index];
24 }, 0);
25
26 const remainder = sum % 11;
27 return remainder < 2 ? 0 : 11 - remainder;
28}
29
1function validateCNPJ(cnpj) {
2 // Убираем нечисловые символы
3 const cleanCNPJ = cnpj.replace(/\D/g, '');
4
5 // Проверяем, имеет ли он правильную длину
6 if (cleanCNPJ.length !== 14) return false;
7
8 // Проверяем известные недействительные шаблоны (все одинаковые цифры)
9 if (/^(\d)\1+$/.test(cleanCNPJ)) return false;
10
11 // Преобразуем в массив цифр
12 const digits = cleanCNPJ.split('').map(Number);
13
14 // Проверяем первую контрольную цифру
15 const expectedFirstDigit = calculateCheckDigit(digits.slice(0, 12));
16 if (digits[12] !== expectedFirstDigit) return false;
17
18 // Проверяем вторую контрольную цифру
19 const expectedSecondDigit = calculateCheckDigit(digits.slice(0, 13));
20 if (digits[13] !== expectedSecondDigit) return false;
21
22 return true;
23}
24
1function formatCNPJ(cnpj) {
2 // Убираем нечисловые символы
3 const cleanCNPJ = cnpj.replace(/\D/g, '');
4
5 // Форматируем в зависимости от длины
6 if (cleanCNPJ.length <= 2) {
7 return cleanCNPJ;
8 } else if (cleanCNPJ.length <= 5) {
9 return `${cleanCNPJ.slice(0, 2)}.${cleanCNPJ.slice(2)}`;
10 } else if (cleanCNPJ.length <= 8) {
11 return `${cleanCNPJ.slice(0, 2)}.${cleanCNPJ.slice(2, 5)}.${cleanCNPJ.slice(5)}`;
12 } else if (cleanCNPJ.length <= 12) {
13 return `${cleanCNPJ.slice(0, 2)}.${cleanCNPJ.slice(2, 5)}.${cleanCNPJ.slice(5, 8)}/${cleanCNPJ.slice(8)}`;
14 } else {
15 return `${cleanCNPJ.slice(0, 2)}.${cleanCNPJ.slice(2, 5)}.${cleanCNPJ.slice(5, 8)}/${cleanCNPJ.slice(8, 12)}-${cleanCNPJ.slice(12, 14)}`;
16 }
17}
18
Эти основные функции могут быть реализованы на других языках программирования, следуя той же логике. Вот примеры на Python и Java:
1import random
2
3def calculate_check_digit(digits):
4 weights = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] if len(digits) < 13 else [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
5
6 total = 0
7 for i in range(len(digits)):
8 total += digits[i] * weights[i]
9
10 remainder = total % 11
11 return 0 if remainder < 2 else 11 - remainder
12
13def generate_cnpj():
14 # Генерируем первые 12 цифр случайным образом
15 digits = [random.randint(0, 9) for _ in range(12)]
16
17 # Рассчитываем первую контрольную цифру
18 first_check = calculate_check_digit(digits)
19 digits.append(first_check)
20
21 # Рассчитываем вторую контрольную цифру
22 second_check = calculate_check_digit(digits)
23 digits.append(second_check)
24
25 # Форматируем CNPJ
26 cnpj = ''.join(map(str, digits))
27 return f"{cnpj[:2]}.{cnpj[2:5]}.{cnpj[5:8]}/{cnpj[8:12]}-{cnpj[12:]}"
28
29def validate_cnpj(cnpj):
30 # Убираем нечисловые символы
31 cnpj = ''.join(filter(str.isdigit, cnpj))
32
33 # Проверяем длину
34 if len(cnpj) != 14:
35 return False
36
37 # Проверяем, все ли цифры одинаковые
38 if len(set(cnpj)) == 1:
39 return False
40
41 # Преобразуем в список целых чисел
42 digits = [int(d) for d in cnpj]
43
44 # Валидируем первую контрольную цифру
45 first_check = calculate_check_digit(digits[:12])
46 if digits[12] != first_check:
47 return False
48
49 # Валидируем вторую контрольную цифру
50 second_check = calculate_check_digit(digits[:13])
51 if digits[13] != second_check:
52 return False
53
54 return True
55
1import java.util.Random;
2
3public class CNPJUtils {
4
5 public static String generateCNPJ() {
6 Random random = new Random();
7 int[] digits = new int[14];
8
9 // Генерируем первые 12 цифр случайным образом
10 for (int i = 0; i < 12; i++) {
11 digits[i] = random.nextInt(10);
12 }
13
14 // Рассчитываем первую контрольную цифру
15 digits[12] = calculateCheckDigit(digits, 12);
16
17 // Рассчитываем вторую контрольную цифру
18 digits[13] = calculateCheckDigit(digits, 13);
19
20 // Форматируем CNPJ
21 return String.format("%02d.%03d.%03d/%04d-%02d",
22 digits[0] * 10 + digits[1],
23 digits[2] * 100 + digits[3] * 10 + digits[4],
24 digits[5] * 100 + digits[6] * 10 + digits[7],
25 digits[8] * 1000 + digits[9] * 100 + digits[10] * 10 + digits[11],
26 digits[12] * 10 + digits[13]);
27 }
28
29 private static int calculateCheckDigit(int[] digits, int length) {
30 int[] weights = length < 13
31 ? new int[]{5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2}
32 : new int[]{6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2};
33
34 int sum = 0;
35 for (int i = 0; i < length; i++) {
36 sum += digits[i] * weights[i];
37 }
38
39 int remainder = sum % 11;
40 return remainder < 2 ? 0 : 11 - remainder;
41 }
42
43 public static boolean validateCNPJ(String cnpj) {
44 // Убираем нечисловые символы
45 cnpj = cnpj.replaceAll("\\D", "");
46
47 // Проверяем длину
48 if (cnpj.length() != 14) {
49 return false;
50 }
51
52 // Проверяем, все ли цифры одинаковые
53 boolean allDigitsSame = true;
54 for (int i = 1; i < cnpj.length(); i++) {
55 if (cnpj.charAt(i) != cnpj.charAt(0)) {
56 allDigitsSame = false;
57 break;
58 }
59 }
60 if (allDigitsSame) {
61 return false;
62 }
63
64 // Преобразуем в массив целых чисел
65 int[] digits = new int[14];
66 for (int i = 0; i < 14; i++) {
67 digits[i] = Character.getNumericValue(cnpj.charAt(i));
68 }
69
70 // Валидируем первую контрольную цифру
71 int firstCheck = calculateCheckDigit(digits, 12);
72 if (digits[12] != firstCheck) {
73 return false;
74 }
75
76 // Валидируем вторую контрольную цифру
77 int secondCheck = calculateCheckDigit(digits, 13);
78 if (digits[13] != secondCheck) {
79 return false;
80 }
81
82 return true;
83 }
84}
85
При использовании этого инструмента генерации и валидации CNPJ имейте в виду следующие соображения:
CNPJ — это национальный регистрационный номер для предприятий и юридических лиц в Бразилии. Он используется для налоговых целей, регистрации бизнеса, открытия банковских счетов и идентификации компаний в официальных сделках.
Нет. CNPJ, сгенерированные этим инструментом, математически действительны в соответствии с алгоритмом контрольных цифр, но они не зарегистрированы в Федеральной налоговой службе Бразилии и не принадлежат реальным компаниям.
Нет. Чтобы получить законный CNPJ для бизнеса, вы должны зарегистрироваться в Федеральной налоговой службе Бразилии (Receita Federal) в соответствии с официальным процессом. Сгенерированные CNPJ предназначены только для тестирования.
Чтобы проверить, зарегистрирован ли CNPJ за фактической компанией, вам необходимо обратиться к базе данных Федеральной налоговой службы Бразилии. Наш инструмент проверяет только математическую действительность CNPJ, но не его официальную регистрацию.
CNPJ с одинаковыми цифрами (например, 11.111.111/1111-11) автоматически считаются недействительными, даже если они математически проходят алгоритм контрольных цифр. Это правило установлено Федеральной налоговой службой Бразилии.
Нет. Вся обработка происходит в вашем браузере, и мы не храним и не передаем никакие CNPJ, которые вы генерируете или валидируете.
Текущая версия инструмента генерирует один CNPJ за раз. Для массовой генерации вы можете рассмотреть возможность использования одной из библиотек программирования, упомянутых в разделе Альтернативы.
Это официальный формат, требуемый бразильскими органами. Специфическая группировка помогает идентифицировать разные компоненты CNPJ, такие как базовый номер и идентификатор филиала.
Вы можете реализовать алгоритм валидации на предпочитаемом вами языке программирования, используя примеры кода, предоставленные в разделе Техническая реализация, или использовать одну из библиотек, упомянутых в разделе Альтернативы.
Да. Государственные учреждения в Бразилии имеют специфические шаблоны CNPJ. Например, федеральные государственные учреждения часто начинаются с определенных цифр. Наш генератор создает случайные CNPJ и не генерирует специально CNPJ для государственных учреждений.
Наш инструмент генерации и валидации CNPJ Бразилии делает работу с этими идентификационными номерами простой и эффективной. Независимо от того, тестируете ли вы приложения, готовите образцы данных или валидируете существующие CNPJ, этот инструмент предоставляет простое решение без сложности интеграции API или продвинутых конфигураций.
Сгенерируйте свой первый действительный CNPJ сейчас или проверьте существующий с помощью нашего простого интерфейса!
Откройте больше инструментов, которые могут быть полезны для вашего рабочего процесса