Generišite važeće brazilske CNPJ brojeve i validirajte postojeće pomoću ovog jednostavnog alata dizajniranog za programere i testere koji rade sa brazilski poslovnim identifikatorima.
Generišite važeći brazilski CNPJ broj za testiranje.
Proverite da li je brazilski CNPJ broj važeći.
CNPJ (Cadastro Nacional da Pessoa Jurídica) je jedinstveni identifikacioni broj koji se dodeljuje preduzećima i pravnim licima u Brazilu. Ovaj alat za generisanje i validaciju CNPJ-a pruža jednostavan i efikasan način za generisanje validnih CNPJ brojeva u svrhe testiranja i validaciju postojećih CNPJ brojeva prema zvaničnom brazilskom algoritmu. Bilo da ste programer koji testira aplikacije koje obrađuju podatke o brazilskim preduzećima, QA profesionalac koji kreira test slučajeve, ili bilo ko ko radi sa informacijama o brazilskim kompanijama, ovaj alat pojednostavljuje proces rada sa CNPJ brojevima.
Za razliku od pravih CNPJ brojeva koji se zvanično izdaju od strane Brazilske federacije (Receita Federal), CNPJ-ovi generisani ovim alatom su matematički validni, ali nisu registrovani na stvarne kompanije. Ovo ih čini savršenim za testne scenarije, uzorke podataka i razvojna okruženja gde su potrebni pravilno formatirani i validni CNPJ brojevi bez korišćenja pravih identifikatora preduzeća.
CNPJ (Cadastro Nacional da Pessoa Jurídica) je 14-cifreni identifikacioni broj koji dodeljuje Brazilska federacija preduzećima i pravnim licima. On služi kao brazilski ekvivalent broju registracije preduzeća ili poreskom identifikatoru. Svako preduzeće koje legalno posluje u Brazilu mora imati CNPJ, koji se koristi za:
CNPJ je osnovni identifikator u brazilskom poslovnom ekosistemu i pojavljuje se na zvaničnim dokumentima, ugovorima i finansijskim izveštajima.
Brazilski CNPJ se sastoji od 14 cifara, obično formatiranih kao: XX.XXX.XXX/YYYY-ZZ
Struktura se deli na sledeći način:
Na primer, pravilno formatiran CNPJ može izgledati ovako: 12.345.678/0001-95
Proverne cifre (poslednje dve cifre) se izračunavaju koristeći specifični matematički algoritam koji validira autentičnost CNPJ-a. Ovaj algoritam osigurava da nasumično generisani brojevi ne mogu proći validaciju bez praćenja pravilne metode izračunavanja.
Algoritam za validaciju CNPJ-a koristi ponderisanu kalkulaciju za određivanje provernih cifara. Evo kako to funkcioniše:
Da bi CNPJ bio validan, obe proverne cifre moraju odgovarati izračunatim vrednostima.
Naš alat za generisanje i validaciju CNPJ-a nudi dve glavne funkcije: generisanje validnih CNPJ-a i validaciju postojećih CNPJ brojeva.
Da biste generisali validan CNPJ u svrhe testiranja:
Generisani CNPJ će pratiti sve matematičke validacione pravila pravog CNPJ-a, ali nije registrovan kod Brazilske federacije.
Da biste proverili da li je CNPJ matematički validan:
Validator proverava da li CNPJ prati ispravan format i da li proverne cifre odgovaraju očekivanim vrednostima prema validacionom algoritmu.
Ovaj alat za generisanje i validaciju CNPJ-a je posebno koristan u sledećim scenarijima:
Dok naš alat pruža jednostavno rešenje zasnovano na pretraživaču za generisanje i validaciju CNPJ-a, postoji nekoliko alternativa u zavisnosti od vaših specifičnih potreba:
Za programere koji integrišu validaciju CNPJ-a direktno u aplikacije, dostupne su nekoliko biblioteka specifičnih za jezike:
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 kao što su formatiranje, parsiranje i validacija drugih brazilskih dokumenata.
Za aplikacije koje zahtevaju validaciju bez implementacije algoritma:
Za obrazovne svrhe ili jednokratne validacije, možete ručno primeniti algoritam:
Međutim, ručno izračunavanje je sklono greškama i neefikasno za redovnu upotrebu.
Generator i validator CNPJ-a u ovom alatu su implementirani koristeći JavaScript, što ga čini brzim i sposobnim za rad isključivo u vašem pretraživaču bez slanja vaših podataka na server. Evo kako funkcionišu osnovne funkcije:
1function generateCNPJ() {
2 // Generiši prvih 12 cifara nasumično
3 const digits = Array.from({ length: 12 }, () => Math.floor(Math.random() * 10));
4
5 // Izračunaj prvu provernu cifru
6 const firstCheckDigit = calculateCheckDigit(digits);
7 digits.push(firstCheckDigit);
8
9 // Izračunaj drugu provernu cifru
10 const secondCheckDigit = calculateCheckDigit(digits);
11 digits.push(secondCheckDigit);
12
13 // Formatiraj 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 // Ukloni ne-numeričke karaktere
3 const cleanCNPJ = cnpj.replace(/\D/g, '');
4
5 // Proveri da li ima ispravnu dužinu
6 if (cleanCNPJ.length !== 14) return false;
7
8 // Proveri poznate nevalidne obrasce (svi isti cifre)
9 if (/^(\d)\1+$/.test(cleanCNPJ)) return false;
10
11 // Pretvori u niz cifara
12 const digits = cleanCNPJ.split('').map(Number);
13
14 // Proveri prvu provernu cifru
15 const expectedFirstDigit = calculateCheckDigit(digits.slice(0, 12));
16 if (digits[12] !== expectedFirstDigit) return false;
17
18 // Proveri drugu provernu 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 // Ukloni ne-numeričke karaktere
3 const cleanCNPJ = cnpj.replace(/\D/g, '');
4
5 // Formatiraj prema dužini
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 biti implementirane u drugim programskim jezicima prateći istu logiku. Evo primera 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 # Generiši prvih 12 cifara nasumično
15 digits = [random.randint(0, 9) for _ in range(12)]
16
17 # Izračunaj prvu provernu cifru
18 first_check = calculate_check_digit(digits)
19 digits.append(first_check)
20
21 # Izračunaj drugu provernu cifru
22 second_check = calculate_check_digit(digits)
23 digits.append(second_check)
24
25 # Formatiraj 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 # Ukloni ne-numeričke karaktere
31 cnpj = ''.join(filter(str.isdigit, cnpj))
32
33 # Proveri dužinu
34 if len(cnpj) != 14:
35 return False
36
37 # Proveri da li su svi cifre iste
38 if len(set(cnpj)) == 1:
39 return False
40
41 # Pretvori u niz cifara
42 digits = [int(d) for d in cnpj]
43
44 # Validiraj prvu provernu cifru
45 first_check = calculate_check_digit(digits[:12])
46 if digits[12] != first_check:
47 return False
48
49 # Validiraj drugu provernu 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 // Generiši prvih 12 cifara nasumično
10 for (int i = 0; i < 12; i++) {
11 digits[i] = random.nextInt(10);
12 }
13
14 // Izračunaj prvu provernu cifru
15 digits[12] = calculateCheckDigit(digits, 12);
16
17 // Izračunaj drugu provernu cifru
18 digits[13] = calculateCheckDigit(digits, 13);
19
20 // Formatiraj 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 // Ukloni ne-numeričke karaktere
45 cnpj = cnpj.replaceAll("\\D", "");
46
47 // Proveri dužinu
48 if (cnpj.length() != 14) {
49 return false;
50 }
51
52 // Proveri da li su svi cifre iste
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 // Pretvori u niz cifara
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 // Validiraj prvu provernu cifru
71 int firstCheck = calculateCheckDigit(digits, 12);
72 if (digits[12] != firstCheck) {
73 return false;
74 }
75
76 // Validiraj drugu provernu 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 generisanje i validaciju CNPJ-a, imajte na umu sledeće napomene:
CNPJ je nacionalni registracioni broj za preduzeća i pravna lica u Brazilu. Koristi se za poreske svrhe, registraciju preduzeća, otvaranje bankovnih računa i identifikaciju kompanija u zvaničnim transakcijama.
Ne. CNPJ-evi generisani ovim alatom su matematički validni prema algoritmu provernih cifara, ali nisu registrovani kod Brazilske federacije i ne pripadaju stvarnim kompanijama.
Ne. Da biste dobili legitimni CNPJ za preduzeće, morate se registrovati kod Brazilske federacije (Receita Federal) prateći zvanični proces. Generisani CNPJ-evi su samo za svrhe testiranja.
Da biste proverili da li je CNPJ registrovan na stvarnu kompaniju, potrebno je da konsultujete bazu podataka Brazilske federacije. Naš alat samo proverava da li je CNPJ matematički validan, a ne da li je zvanično registrovan.
CNPJ-evi sa svim istim ciframa (kao što su 11.111.111/1111-11) automatski se smatraju nevalidnim, čak i ako matematički prolaze algoritam provernih cifara. Ovo je pravilo koje je uspostavila Brazilska federacija.
Ne. Sva obrada se vrši u vašem pretraživaču, i ne čuvamo ili prenosimo nijedne CNPJ-eve koje generišete ili validirate.
Trenutna verzija alata generiše jedan CNPJ odjednom. Za masovno generisanje, možda biste želeli da razmotrite korišćenje jedne od biblioteka koje su pomenute u odeljku Alternativa.
Ovo je zvanični format koji zahtevaju brazilske vlasti. Specifično grupisanje pomaže u identifikaciji različitih komponenti CNPJ-a, kao što su osnovni broj i identifikator podružnice.
Možete implementirati algoritam za validaciju u vašem omiljenom programskom jeziku koristeći primere koda navedene u odeljku Tehnička Implementacija, ili koristiti jednu od biblioteka pomenutih u odeljku Alternativa.
Da. Vladini entiteti u Brazilu imaju specifične obrasce CNPJ-a. Na primer, federalni vladini entiteti često počinju sa specifičnim ciframa. Naš generator stvara nasumične CNPJ-eve i ne generiše specifične CNPJ-eve za vladine entitete.
Naš alat za generisanje i validaciju CNPJ-a čini rad sa ovim identifikacionim brojevima jednostavnim i efikasnim. Bilo da testirate aplikacije, pripremate uzorke podataka ili validirate postojeće CNPJ-eve, ovaj alat pruža jednostavno rešenje bez složenosti integracija API-ja ili naprednih konfiguracija.
Generišite svoj prvi validan CNPJ sada ili validirajte postojeći koristeći naš jednostavan interfejs!
Otkrijte više alata koji mogu biti korisni za vaš radni proces