Tạo số CNPJ Brazil hợp lệ và xác thực các số hiện có với công cụ đơn giản này được thiết kế cho các nhà phát triển và kiểm thử làm việc với ID doanh nghiệp Brazil.
Tạo một số CNPJ Brazil hợp lệ cho mục đích thử nghiệm.
Kiểm tra xem một số CNPJ Brazil có hợp lệ hay không.
CNPJ Brazil (Cadastro Nacional da Pessoa Jurídica) là một số định danh duy nhất được cấp cho các doanh nghiệp và thực thể pháp lý tại Brazil. Công cụ tạo và xác thực CNPJ Brazil này cung cấp một cách đơn giản và hiệu quả để tạo ra các số CNPJ hợp lệ cho mục đích thử nghiệm và xác thực các số CNPJ hiện có theo thuật toán chính thức của Brazil. Dù bạn là một nhà phát triển đang thử nghiệm các ứng dụng xử lý dữ liệu doanh nghiệp Brazil, một chuyên gia QA đang tạo ra các trường hợp thử nghiệm, hay bất kỳ ai làm việc với thông tin công ty Brazil, công cụ này giúp đơn giản hóa quy trình làm việc với các số CNPJ.
Khác với các số CNPJ thực tế được cấp bởi Cơ quan Doanh thu Liên bang Brazil (Receita Federal), các CNPJ được tạo ra bởi công cụ này là hợp lệ về mặt toán học nhưng không được đăng ký cho các công ty thực tế. Điều này làm cho chúng trở nên hoàn hảo cho các tình huống thử nghiệm, dữ liệu mẫu và môi trường phát triển nơi bạn cần các số CNPJ được định dạng và hợp lệ mà không cần sử dụng các định danh doanh nghiệp thực.
CNPJ (Cadastro Nacional da Pessoa Jurídica) là một số định danh 14 chữ số được cấp cho các doanh nghiệp và thực thể pháp lý bởi Cơ quan Doanh thu Liên bang Brazil. Nó phục vụ như một số đăng ký doanh nghiệp hoặc mã số thuế tương đương ở Brazil. Mỗi doanh nghiệp hoạt động hợp pháp tại Brazil phải có một CNPJ, được sử dụng cho:
CNPJ là một định danh thiết yếu trong hệ sinh thái doanh nghiệp của Brazil và xuất hiện trên các tài liệu chính thức, hợp đồng và hồ sơ tài chính.
Một CNPJ Brazil bao gồm 14 chữ số, thường được định dạng như: XX.XXX.XXX/YYYY-ZZ
Cấu trúc phân chia như sau:
Ví dụ, một CNPJ được định dạng hợp lệ có thể trông như: 12.345.678/0001-95
Các chữ số kiểm tra (hai số cuối) được tính toán bằng một thuật toán toán học cụ thể xác thực tính xác thực của CNPJ. Thuật toán này đảm bảo rằng các số được tạo ngẫu nhiên không thể vượt qua xác thực mà không tuân theo phương pháp tính toán đúng.
Thuật toán xác thực CNPJ sử dụng một phép tính trọng số để xác định các chữ số kiểm tra. Dưới đây là cách thức hoạt động:
Để một CNPJ hợp lệ, cả hai chữ số kiểm tra phải khớp với các giá trị đã tính toán.
Công cụ Tạo và Xác Thực CNPJ Brazil của chúng tôi cung cấp hai chức năng chính: tạo CNPJ hợp lệ và xác thực các số CNPJ hiện có.
Để tạo một CNPJ hợp lệ cho mục đích thử nghiệm:
CNPJ được tạo sẽ tuân theo tất cả các quy tắc xác thực toán học của một CNPJ thực nhưng không được đăng ký với Cơ quan Doanh thu Liên bang Brazil.
Để kiểm tra xem một CNPJ có hợp lệ về mặt toán học hay không:
Trình xác thực kiểm tra xem CNPJ có tuân theo định dạng chính xác và nếu các chữ số kiểm tra khớp với các giá trị mong đợi theo thuật toán xác thực.
Công cụ Tạo và Xác Thực CNPJ Brazil này đặc biệt hữu ích trong các tình huống sau:
Trong khi công cụ của chúng tôi cung cấp một giải pháp đơn giản, dựa trên trình duyệt để tạo và xác thực CNPJ, có một số giải pháp thay thế tùy thuộc vào nhu cầu cụ thể của bạn:
Đối với các nhà phát triển tích hợp xác thực CNPJ trực tiếp vào các ứng dụng, có một số thư viện cụ thể cho ngôn ngữ có sẵn:
cpf_cnpj.js
, validator.js
python-cnpj
, validate-docbr
brazilianutils
, respect/validation
caelum-stella
, commons-validator
cpf_cnpj
, brazilian-rails
Các thư viện này thường cung cấp chức năng bổ sung như định dạng, phân tích và xác thực các tài liệu Brazil khác.
Đối với các ứng dụng yêu cầu xác thực mà không cần triển khai thuật toán:
Đối với mục đích giáo dục hoặc xác thực một lần, bạn có thể áp dụng thủ công thuật toán:
Tuy nhiên, tính toán thủ công dễ mắc lỗi và không hiệu quả cho việc sử dụng thường xuyên.
Công cụ tạo và xác thực CNPJ trong công cụ này được triển khai bằng JavaScript, giúp nó nhanh chóng và có khả năng chạy hoàn toàn trong trình duyệt của bạn mà không cần gửi dữ liệu của bạn đến máy chủ. Dưới đây là cách các chức năng cốt lõi hoạt động:
1function generateCNPJ() {
2 // Tạo 12 chữ số đầu tiên ngẫu nhiên
3 const digits = Array.from({ length: 12 }, () => Math.floor(Math.random() * 10));
4
5 // Tính chữ số kiểm tra đầu tiên
6 const firstCheckDigit = calculateCheckDigit(digits);
7 digits.push(firstCheckDigit);
8
9 // Tính chữ số kiểm tra thứ hai
10 const secondCheckDigit = calculateCheckDigit(digits);
11 digits.push(secondCheckDigit);
12
13 // Định dạng 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 // Loại bỏ các ký tự không phải số
3 const cleanCNPJ = cnpj.replace(/\D/g, '');
4
5 // Kiểm tra xem nó có độ dài chính xác không
6 if (cleanCNPJ.length !== 14) return false;
7
8 // Kiểm tra các mẫu không hợp lệ đã biết (tất cả các chữ số giống nhau)
9 if (/^(\d)\1+$/.test(cleanCNPJ)) return false;
10
11 // Chuyển đổi thành mảng các chữ số
12 const digits = cleanCNPJ.split('').map(Number);
13
14 // Kiểm tra chữ số kiểm tra đầu tiên
15 const expectedFirstDigit = calculateCheckDigit(digits.slice(0, 12));
16 if (digits[12] !== expectedFirstDigit) return false;
17
18 // Kiểm tra chữ số kiểm tra thứ hai
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 // Loại bỏ các ký tự không phải số
3 const cleanCNPJ = cnpj.replace(/\D/g, '');
4
5 // Định dạng dựa trên độ dài
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
Các chức năng cốt lõi này có thể được triển khai trong các ngôn ngữ lập trình khác theo cùng một logic. Dưới đây là các ví dụ trong Python và 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 # Tạo 12 chữ số đầu tiên ngẫu nhiên
15 digits = [random.randint(0, 9) for _ in range(12)]
16
17 # Tính chữ số kiểm tra đầu tiên
18 first_check = calculate_check_digit(digits)
19 digits.append(first_check)
20
21 # Tính chữ số kiểm tra thứ hai
22 second_check = calculate_check_digit(digits)
23 digits.append(second_check)
24
25 # Định dạng 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 # Loại bỏ các ký tự không phải số
31 cnpj = ''.join(filter(str.isdigit, cnpj))
32
33 # Kiểm tra độ dài
34 if len(cnpj) != 14:
35 return False
36
37 # Kiểm tra nếu tất cả các chữ số đều giống nhau
38 if len(set(cnpj)) == 1:
39 return False
40
41 # Chuyển đổi thành danh sách các số nguyên
42 digits = [int(d) for d in cnpj]
43
44 # Xác thực chữ số kiểm tra đầu tiên
45 first_check = calculate_check_digit(digits[:12])
46 if digits[12] != first_check:
47 return False
48
49 # Xác thực chữ số kiểm tra thứ hai
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 // Tạo 12 chữ số đầu tiên ngẫu nhiên
10 for (int i = 0; i < 12; i++) {
11 digits[i] = random.nextInt(10);
12 }
13
14 // Tính chữ số kiểm tra đầu tiên
15 digits[12] = calculateCheckDigit(digits, 12);
16
17 // Tính chữ số kiểm tra thứ hai
18 digits[13] = calculateCheckDigit(digits, 13);
19
20 // Định dạng 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 // Loại bỏ các ký tự không phải số
45 cnpj = cnpj.replaceAll("\\D", "");
46
47 // Kiểm tra độ dài
48 if (cnpj.length() != 14) {
49 return false;
50 }
51
52 // Kiểm tra nếu tất cả các chữ số đều giống nhau
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 // Chuyển đổi thành mảng các số nguyên
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 // Xác thực chữ số kiểm tra đầu tiên
71 int firstCheck = calculateCheckDigit(digits, 12);
72 if (digits[12] != firstCheck) {
73 return false;
74 }
75
76 // Xác thực chữ số kiểm tra thứ hai
77 int secondCheck = calculateCheckDigit(digits, 13);
78 if (digits[13] != secondCheck) {
79 return false;
80 }
81
82 return true;
83 }
84}
85
Khi sử dụng công cụ tạo và xác thực CNPJ này, hãy ghi nhớ các lưu ý sau:
CNPJ là số đăng ký quốc gia cho các doanh nghiệp và thực thể pháp lý tại Brazil. Nó được sử dụng cho mục đích thuế, đăng ký doanh nghiệp, mở tài khoản ngân hàng và xác định các công ty trong các giao dịch chính thức.
Không. Các CNPJ được tạo ra bởi công cụ này hợp lệ về mặt toán học theo thuật toán chữ số kiểm tra, nhưng chúng không được đăng ký với Cơ quan Doanh thu Liên bang Brazil và không thuộc về các công ty thực tế.
Không. Để có được một CNPJ hợp pháp cho một doanh nghiệp, bạn phải đăng ký với Cơ quan Doanh thu Liên bang Brazil (Receita Federal) theo quy trình chính thức. Các CNPJ được tạo ra chỉ dành cho mục đích thử nghiệm.
Để xác minh xem một CNPJ có được đăng ký cho một công ty thực sự hay không, bạn cần tham khảo cơ sở dữ liệu của Cơ quan Doanh thu Liên bang Brazil. Công cụ của chúng tôi chỉ kiểm tra xem một CNPJ có hợp lệ về mặt toán học hay không, không kiểm tra xem nó có được đăng ký chính thức hay không.
CNPJ có tất cả các chữ số giống nhau (như 11.111.111/1111-11) sẽ tự động bị coi là không hợp lệ, ngay cả khi chúng vượt qua thuật toán chữ số kiểm tra về mặt toán học. Đây là một quy tắc được thiết lập bởi Cơ quan Doanh thu Liên bang Brazil.
Không. Tất cả các xử lý diễn ra trong trình duyệt của bạn, và chúng tôi không lưu trữ hoặc truyền tải bất kỳ CNPJ nào bạn tạo ra hoặc xác thực.
Phiên bản hiện tại của công cụ chỉ tạo một CNPJ tại một thời điểm. Đối với việc tạo hàng loạt, bạn có thể xem xét sử dụng một trong các thư viện lập trình được đề cập trong phần Giải pháp Thay thế.
Đây là định dạng chính thức được yêu cầu bởi các cơ quan Brazil. Các nhóm cụ thể giúp xác định các thành phần khác nhau của CNPJ, chẳng hạn như số cơ bản và định danh chi nhánh.
Bạn có thể triển khai thuật toán xác thực trong ngôn ngữ lập trình ưa thích của mình bằng cách sử dụng các ví dụ mã được cung cấp trong phần Triển khai Kỹ thuật, hoặc sử dụng một trong các thư viện được đề cập trong phần Giải pháp Thay thế.
Có. Các thực thể chính phủ ở Brazil có các mẫu CNPJ cụ thể. Ví dụ, các thực thể chính phủ liên bang thường bắt đầu bằng các chữ số cụ thể. Công cụ của chúng tôi tạo ra các CNPJ ngẫu nhiên và không tạo ra các CNPJ của thực thể chính phủ.
Công cụ Tạo và Xác Thực CNPJ Brazil của chúng tôi giúp việc làm việc với các số định danh này trở nên đơn giản và hiệu quả. Dù bạn đang thử nghiệm các ứng dụng, chuẩn bị dữ liệu mẫu, hay xác thực các CNPJ hiện có, công cụ này cung cấp một giải pháp đơn giản mà không cần phải tích hợp API hay cấu hình phức tạp.
Hãy tạo CNPJ hợp lệ đầu tiên của bạn ngay bây giờ hoặc xác thực một CNPJ hiện có bằng cách sử dụng giao diện đơn giản của chúng tôi!
Khám phá thêm các công cụ có thể hữu ích cho quy trình làm việc của bạn