Generirajte valjane brazilske CNPJ brojeve i validirajte postojeće pomoću ovog jednostavnog alata namijenjenog programerima i testerima koji rade s brazilski poslovnim identifikatorima.
Generirajte valjani brazilski CNPJ broj za testne svrhe.
Provjerite je li brazilski CNPJ broj valjan.
CNPJ (Cadastro Nacional da Pessoa Jurídica) je jedinstveni identifikacijski broj koji se dodjeljuje poslovnim subjektima i pravnim osobama u Brazilu. Ovaj alat za generiranje i validaciju brazilskog CNPJ-a pruža jednostavan i učinkovit način za generiranje valjanih CNPJ brojeva u svrhe testiranja i validaciju postojećih CNPJ brojeva prema službenoj brazilskog algoritmu. Bilo da ste programer koji testira aplikacije koje obrađuju podatke o brazilskim tvrtkama, QA stručnjak koji stvara testne slučajeve, ili bilo tko tko radi s informacijama o brazilskim tvrtkama, ovaj alat pojednostavljuje proces rada s CNPJ brojevima.
Za razliku od pravih CNPJ brojeva koji se službeno izdaju od strane brazilske Savezne porezne uprave (Receita Federal), CNPJ-ovi generirani ovim alatom su matematički valjani, ali nisu registrirani na stvarne tvrtke. To ih čini savršenima za testne scenarije, uzorke podataka i razvojna okruženja gdje su potrebni ispravno formatirani i valjani CNPJ brojevi bez korištenja stvarnih identifikatora tvrtki.
CNPJ (Cadastro Nacional da Pessoa Jurídica) je 14-cifreni identifikacijski broj koji dodjeljuje brazilska Savezna porezna uprava poslovnim subjektima i pravnim osobama. To je brazilski ekvivalent broju registracije tvrtke ili poreznom identifikacijskom broju. Svaka tvrtka koja legalno posluje u Brazilu mora imati CNPJ, koji se koristi za:
CNPJ je bitan identifikator u brazilskom poslovnom ekosustavu i pojavljuje se na službenim dokumentima, ugovorima i financijskim evidencijama.
Brazilski CNPJ sastoji se od 14 cifara, obično formatiranih kao: XX.XXX.XXX/YYYY-ZZ
Struktura se razlaže na sljedeći način:
Na primjer, ispravno formatirani CNPJ može izgledati ovako: 12.345.678/0001-95
Provjerne cifre (posljednje dvije cifre) izračunavaju se pomoću specifičnog matematičkog algoritma koji validira autentičnost CNPJ-a. Ovaj algoritam osigurava da nasumično generirani brojevi ne mogu proći validaciju bez pridržavanja pravilne metode izračuna.
Algoritam validacije CNPJ-a koristi ponderirano izračunavanje za određivanje provjernih cifara. Evo kako to funkcionira:
Da bi CNPJ bio valjan, obje provjerne cifre moraju odgovarati izračunatim vrijednostima.
Naš alat za generiranje i validaciju brazilskog CNPJ-a nudi dvije glavne funkcije: generiranje valjanih CNPJ-ova i validaciju postojećih CNPJ brojeva.
Za generiranje valjanog CNPJ-a u svrhe testiranja:
Generirani CNPJ će slijediti sva pravila matematičke validacije stvarnog CNPJ-a, ali nije registriran kod brazilske Savezne porezne uprave.
Da biste provjerili je li CNPJ matematički valjan:
Validator provjerava slijedi li CNPJ ispravan format i ako provjerne cifre odgovaraju očekivanim vrijednostima prema algoritmu validacije.
Ovaj alat za generiranje i validaciju brazilskog CNPJ-a posebno je koristan u sljedećim scenarijima:
Iako naš alat pruža jednostavno rješenje temeljen na pregledniku za generiranje i validaciju CNPJ-ova, postoji nekoliko alternativa ovisno o vašim specifičnim potrebama:
Za programere koji integriraju validaciju CNPJ-a izravno u aplikacije, dostupne su nekoliko biblioteka specifičnih za jezik:
cpf_cnpj.js
, validator.js
python-cnpj
, validate-docbr
brazilianutils
, respect/validation
caelum-stella
, commons-validator
cpf_cnpj
, brazilian-rails
Ove biblioteke često pružaju dodatnu funkcionalnost poput formatiranja, parsiranja i validacije drugih brazilskih dokumenata.
Za aplikacije koje zahtijevaju validaciju bez implementacije algoritma:
Za obrazovne svrhe ili jednokratne validacije, možete ručno primijeniti algoritam:
Međutim, ručni izračun je sklon greškama i neučinkovit za redovitu upotrebu.
Generator i validator CNPJ-a u ovom alatu implementirani su pomoću JavaScript-a, što ga čini brzim i sposobnim za rad isključivo u vašem pregledniku bez slanja vaših podataka na poslužitelj. Evo kako funkcioniraju osnovne funkcije:
1function generateCNPJ() {
2 // Generirajte prvih 12 cifara nasumično
3 const digits = Array.from({ length: 12 }, () => Math.floor(Math.random() * 10));
4
5 // Izračunajte prvu provjernu cifru
6 const firstCheckDigit = calculateCheckDigit(digits);
7 digits.push(firstCheckDigit);
8
9 // Izračunajte drugu provjernu cifru
10 const secondCheckDigit = calculateCheckDigit(digits);
11 digits.push(secondCheckDigit);
12
13 // Formatirajte 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 // Uklonite ne-numeričke znakove
3 const cleanCNPJ = cnpj.replace(/\D/g, '');
4
5 // Provjerite ima li ispravnu duljinu
6 if (cleanCNPJ.length !== 14) return false;
7
8 // Provjerite poznate nevaljane obrasce (svi isti brojevi)
9 if (/^(\d)\1+$/.test(cleanCNPJ)) return false;
10
11 // Pretvorite u niz cifara
12 const digits = cleanCNPJ.split('').map(Number);
13
14 // Provjerite prvu provjernu cifru
15 const expectedFirstDigit = calculateCheckDigit(digits.slice(0, 12));
16 if (digits[12] !== expectedFirstDigit) return false;
17
18 // Provjerite drugu provjernu cifru
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 // Uklonite ne-numeričke znakove
3 const cleanCNPJ = cnpj.replace(/\D/g, '');
4
5 // Formatirajte prema duljini
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
Ove osnovne funkcije mogu se implementirati u drugim programskim jezicima slijedeći istu logiku. Evo primjera u Pythonu i Javi:
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 # Generirajte prvih 12 cifara nasumično
15 digits = [random.randint(0, 9) for _ in range(12)]
16
17 # Izračunajte prvu provjernu cifru
18 first_check = calculate_check_digit(digits)
19 digits.append(first_check)
20
21 # Izračunajte drugu provjernu cifru
22 second_check = calculate_check_digit(digits)
23 digits.append(second_check)
24
25 # Formatirajte 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 # Uklonite ne-numeričke znakove
31 cnpj = ''.join(filter(str.isdigit, cnpj))
32
33 # Provjerite duljinu
34 if len(cnpj) != 14:
35 return False
36
37 # Provjerite jesu li svi brojevi isti
38 if len(set(cnpj)) == 1:
39 return False
40
41 # Pretvorite u niz cijelih brojeva
42 digits = [int(d) for d in cnpj]
43
44 # Validirajte prvu provjernu cifru
45 first_check = calculate_check_digit(digits[:12])
46 if digits[12] != first_check:
47 return False
48
49 # Validirajte drugu provjernu cifru
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 // Generirajte prvih 12 cifara nasumično
10 for (int i = 0; i < 12; i++) {
11 digits[i] = random.nextInt(10);
12 }
13
14 // Izračunajte prvu provjernu cifru
15 digits[12] = calculateCheckDigit(digits, 12);
16
17 // Izračunajte drugu provjernu cifru
18 digits[13] = calculateCheckDigit(digits, 13);
19
20 // Formatirajte 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 // Uklonite ne-numeričke znakove
45 cnpj = cnpj.replaceAll("\\D", "");
46
47 // Provjerite duljinu
48 if (cnpj.length() != 14) {
49 return false;
50 }
51
52 // Provjerite jesu li svi brojevi isti
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 // Pretvorite u niz cijelih brojeva
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 // Validirajte prvu provjernu cifru
71 int firstCheck = calculateCheckDigit(digits, 12);
72 if (digits[12] != firstCheck) {
73 return false;
74 }
75
76 // Validirajte drugu provjernu cifru
77 int secondCheck = calculateCheckDigit(digits, 13);
78 if (digits[13] != secondCheck) {
79 return false;
80 }
81
82 return true;
83 }
84}
85
Kada koristite ovaj alat za generiranje i validaciju CNPJ-a, imajte na umu sljedeće napomene:
CNPJ je nacionalni registracijski broj za poslovne subjekte i pravne osobe u Brazilu. Koristi se za porezne svrhe, registraciju poslovanja, otvaranje bankovnih računa i identifikaciju tvrtki u službenim transakcijama.
Ne. CNPJ-ovi generirani ovim alatom su matematički valjani prema algoritmu provjernih cifara, ali nisu registrirani kod brazilske Savezne porezne uprave i ne pripadaju stvarnim tvrtkama.
Ne. Da biste dobili legitimni CNPJ za tvrtku, morate se registrirati kod brazilske Savezne porezne uprave (Receita Federal) slijedeći službeni postupak. Generirani CNPJ-ovi su samo za svrhe testiranja.
Da biste provjerili je li CNPJ registriran na stvarnu tvrtku, trebate konzultirati bazu podataka brazilske Savezne porezne uprave. Naš alat samo provjerava je li CNPJ matematički valjan, a ne je li službeno registriran.
CNPJ-ovi sa svim istim ciframa (poput 11.111.111/1111-11) automatski se smatraju nevaljanima, čak i ako matematički prođu algoritam provjernih cifara. Ovo je pravilo koje je uspostavila brazilska Savezna porezna uprava.
Ne. Sva obrada odvija se u vašem pregledniku, a ne pohranjujemo ili prenosimo nijedan od CNPJ-ova koje generirate ili validirate.
Trenutna verzija alata generira jedan CNPJ odjednom. Za masovno generiranje, možda biste željeli razmotriti korištenje jedne od programskih biblioteka spomenutih u odjeljku Alternativne Opcije.
Ovo je službeni format koji zahtijevaju brazilske vlasti. Specifično grupiranje pomaže u identifikaciji različitih komponenti CNPJ-a, poput osnovnog broja i identifikatora podružnice.
Možete implementirati algoritam validacije u svom omiljenom programskom jeziku koristeći primjere koda iz odjeljka Tehnička Implementacija, ili koristiti jednu od biblioteka spomenutih u odjeljku Alternativne Opcije.
Da. Vladini entiteti u Brazilu imaju specifične obrasce CNPJ-a. Na primjer, savezni vladini entiteti često započinju s određenim ciframa. Naš generator stvara nasumične CNPJ-ove i ne generira specifične CNPJ-ove za vladine entitete.
Naš alat za generiranje i validaciju brazilskog CNPJ-a čini rad s ovim identifikacijskim brojevima jednostavnim i učinkovitim. Bilo da testirate aplikacije, pripremate uzorke podataka ili validirate postojeće CNPJ-ove, ovaj alat pruža jednostavno rješenje bez složenosti integracija API-ja ili naprednih konfiguracija.
Generirajte svoj prvi valjani CNPJ sada ili validirajte postojeći koristeći naš jednostavan sučelje!
Otkrijte više alata koji bi mogli biti korisni za vaš radni proces