Генерирайте валидни бразилски CNPJ номера и валидирайте съществуващи с този прост инструмент, проектиран за разработчици и тестери, работещи с бразилски бизнес идентификатори.
Генерирайте валиден бразилски CNPJ номер за тестови цели.
Проверете дали бразилският CNPJ номер е валиден.
Бразилският CNPJ (Cadastro Nacional da Pessoa Jurídica) е уникален идентификационен номер, присвоен на бизнеси и юридически лица в Бразилия. Този инструмент за генериране и валидиране на бразилски CNPJ предоставя прост и ефективен начин за генериране на валидни CNPJ номера за тестови цели и валидиране на съществуващи CNPJ номера съгласно официалния бразилски алгоритъм. Независимо дали сте разработчик, който тества приложения, обработващи бразилски бизнес данни, QA професионалист, създаващ тестови случаи, или всеки, който работи с информация за бразилски компании, този инструмент опростява процеса на работа с 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 сега или валидирайте съществуващ такъв, използвайки нашия прост интерфейс!
Открийте още инструменти, които може да бъдат полезни за вашия работен процес