Công cụ Tạo và Xác thực CNPJ - Mã Định danh Doanh nghiệp Brazil
Tạo số CNPJ hợp lệ để kiểm tra hoặc xác thực ngay lập tức các mã định danh doanh nghiệp Brazil. Công cụ miễn phí với xác minh chữ số kiểm tra dành cho các nhà phát triển làm việc với Cadastro Nacional da Pessoa Jurídica.
Trình tạo và Xác thực CNPJ Brazil
Trình tạo CNPJ
Tạo số CNPJ Brazil hợp lệ để kiểm tra.
Trình xác thực CNPJ
Kiểm tra xem số CNPJ Brazil có hợp lệ không.
Tài liệu hướng dẫn
Hiểu về Số CNPJ của Brazil
CNPJ (Cadastro Nacional da Pessoa Jurídica) là phiên bản của Brazil về mã số thuế doanh nghiệp - một số 14 chữ số nhận dạng mọi thực thể kinh doanh hợp pháp trong nước. Nếu bạn đang xây dựng phần mềm xử lý dữ liệu doanh nghiệp Brazil, bạn sẽ nhanh chóng gặp những số này trong các biểu mẫu đăng ký, hóa đơn và tích hợp API.
Điều làm cho công cụ này thiết thực là: nó tạo ra các CNPJ có giá trị toán học để kiểm tra mà không sử dụng các định danh công ty thực. Khi bạn đang thiết lập cơ sở dữ liệu thử nghiệm với 1.000 bản ghi hoặc gỡ lỗi một quy trình xác thực lúc 2 giờ sáng, bạn cần các CNPJ vượt qua các kiểm tra thuật toán nhưng không vô tình trùng với các doanh nghiệp thực. Đó chính xác là những gì công cụ này tạo ra.
Các số được tạo ở đây tuân theo thuật toán xác thực chính thức của Receita Federal (Cơ quan Thuế Liên bang Brazil). Chúng có các chữ số kiểm tra và định dạng chính xác - chúng chỉ đơn giản là không được đăng ký trong cơ sở dữ liệu chính phủ. Hãy nghĩ về chúng như dữ liệu thử nghiệm có cú pháp chính xác mà không tạo ra các vấn đề tuân thủ trong môi trường phát triển của bạn.
CNPJ là gì và Tại sao Nó Quan Trọng
CNPJ là mã định danh doanh nghiệp của Brazil - tương tự như EIN ở Hoa Kỳ hoặc Số Đăng Ký Công Ty ở Anh. Mọi thực thể kinh doanh hoạt động hợp pháp tại Brazil đều phải có một mã CNPJ, do Receita Federal (Cơ quan Thuế Liên bang) cấp.
Bạn sẽ gặp CNPJ khi:
- Xử lý thanh toán: Các cổng thanh toán của Brazil yêu cầu xác thực CNPJ cho các tài khoản thương nhân
- Tuân thủ thuế: Mọi hóa đơn được phát hành tại Brazil phải bao gồm CNPJ hợp lệ
- Đăng ký kinh doanh: Các cơ quan chính phủ sử dụng CNPJ để theo dõi các pháp nhân trên các hệ thống
- Hoạt động ngân hàng: Mở tài khoản doanh nghiệp hoặc xử lý chuyển khoản quốc tế
- Xuất/nhập khẩu: Tài liệu hải quan yêu cầu xác minh CNPJ
- Hợp đồng chính phủ: Hệ thống đấu thầu công xác thực CNPJ trước khi chấp nhận các đề xuất
Từ kinh nghiệm của tôi làm việc với các nền tảng thương mại điện tử Brazil, một trong những điểm tích hợp phổ biến nhất là luồng thanh toán nơi người dùng nhập CNPJ cho các giao dịch doanh nghiệp. Logic xác thực của bạn cần phát hiện các lỗi định dạng trước khi bộ xử lý thanh toán làm - nếu không bạn sẽ thấy các giao dịch thất bại mà đáng lẽ đã có thể được ngăn chặn.
Cấu trúc và Định dạng CNPJ
CNPJ bao gồm 14 chữ số được định dạng như: XX.XXX.XXX/YYYY-ZZ
Phân tích cấu trúc:
- 8 chữ số đầu tiên (XX.XXX.XXX): Số đăng ký cơ sở được gán duy nhất cho công ty
- 4 chữ số tiếp theo (/YYYY): Mã định danh chi nhánh hoặc cơ sở—
/0001chỉ trụ sở chính, trong khi/0002,/0003đại diện cho các địa điểm chi nhánh - 2 chữ số cuối cùng (-ZZ): Chữ số kiểm tra được tính toán thông qua một thuật toán có trọng số
Ví dụ: 12.345.678/0001-95
Điều thú vị về mã định danh chi nhánh: khi một công ty mở nhiều địa điểm, mỗi địa điểm sẽ có 8 chữ số đầu tiên giống nhau nhưng có số chi nhánh khác nhau. Vì vậy, nếu một chuỗi bán lẻ có 50 cửa hàng, họ sẽ có các CNPJ kết thúc từ /0001 đến /0050, tất cả đều chia sẻ cùng một số cơ sở. Điều này giúp dễ dàng nhận biết rằng nhiều CNPJ thuộc về cùng một tổ chức mẹ.
Các chữ số kiểm tra không phải là ngẫu nhiên—chúng được tính toán bằng thuật toán modulus-11 với các chuỗi trọng số cụ thể. Lựa chọn thiết kế này, phổ biến trong các tài liệu hành chính của Brazil, làm cho việc giả mạo các số hợp lệ hoặc vô tình tạo ra các số hợp lệ do lỗi đánh máy trở nên khó khăn về mặt toán học.
Cách Xác Thực CNPJ Hoạt Động Như Thế Nào
Thuật toán xác thực sử dụng phép tính mô-đun 11 có trọng số. Dưới đây là logic đằng sau nó:
Tính Chữ Số Kiểm Tra Đầu Tiên
- Lấy 12 chữ số đầu tiên và nhân mỗi chữ số với trọng số:
5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 - Tổng tất cả các tích
- Chia tổng cho 11 và lấy phần dư
- Nếu phần dư < 2, chữ số kiểm tra là 0; nếu không thì là
11 - phần dư
Tính Chữ Số Kiểm Tra Thứ Hai
- Lấy 13 chữ số đầu tiên (bao gồm chữ số kiểm tra đầu tiên) và nhân với trọng số:
6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 - Tổng tất cả các tích
- Chia cho 11 và lấy phần dư
- Nếu phần dư < 2, chữ số kiểm tra là 0; nếu không thì là
11 - phần dư
Tại Sao Phương Pháp Này Hiệu Quả: Hệ thống nhân với trọng số tạo ra mối quan hệ duy nhất giữa tất cả 12 chữ số cơ bản và các chữ số kiểm tra kết quả. Thay đổi thậm chí một chữ số duy nhất trong số cơ bản sẽ tạo ra các chữ số kiểm tra khác nhau, điều này giúp phát hiện các lỗi sao chép thông thường như hoán đổi vị trí hai chữ số (gõ 12.345 thay vì 12.354).
Một ghi chú thực tế: 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 vượt qua kiểm tra toán học. Receita Federal rõ ràng loại trừ các mẫu này để ngăn chặn các trường hợp đơn giản.
Cách Sử Dụng Trình Tạo và Kiểm Tra CNPJ
Tạo CNPJ Thử Nghiệm
Cần một CNPJ hợp lệ cho cơ sở dữ liệu thử nghiệm của bạn? Đây là cách thực hiện:
- Nhấp vào "Tạo CNPJ"
- Công cụ tạo ngay một số toán học hợp lệ
- Nhấp vào "Sao chép" để lấy nó vào clipboard
- Dán nó vào các biểu mẫu thử nghiệm, nguồn dữ liệu, hoặc bài kiểm tra đơn vị
Mỗi CNPJ được tạo đều vượt qua tất cả các kiểm tra xác thực thuật toán nhưng không được đăng ký với Receita Federal. Điều này có nghĩa là bạn có thể sử dụng chúng tự do trong quá trình phát triển mà không phải lo lắng về việc vô tình sử dụng mã định danh của một công ty thực.
Kiểm Tra Số CNPJ
Bạn có một CNPJ cần xác minh? Trình kiểm tra sẽ xử lý:
- Dán hoặc nhập CNPJ vào ô nhập liệu
- Không cần lo về định dạng—nó hoạt động với
12345678000195hoặc12.345.678/0001-95 - Nhấp vào "Kiểm Tra"
- Nhận phản hồi ngay lập tức về việc các chữ số kiểm tra có chính xác không
Những gì trình kiểm tra kiểm tra: độ dài phù hợp (14 chữ số), tính chính xác của việc tính toán chữ số kiểm tra, và loại trừ các mẫu không hợp lệ như các chữ số giống nhau. Những gì nó không kiểm tra: liệu CNPJ có được đăng ký trong cơ sở dữ liệu chính phủ—điều đó đòi hỏi phải truy vấn trực tiếp Receita Federal.
Các Trường Hợp Sử Dụng Thực Tế của Trình Tạo và Trình Xác Thực CNPJ
Phát Triển Phần Mềm và Kiểm Thử
Nạp dữ liệu: Khi thiết lập môi trường staging với dữ liệu kiểm thử thực tế, bạn cần hàng chục hoặc hàng trăm CNPJ hợp lệ. Việc tạo thủ công rất mất thời gian, và việc sử dụng các định danh công ty thực tế sẽ gây lo ngại về quyền riêng tư. CNPJ được tạo ra giải quyết cả hai vấn đề này.
Kiểm thử các trường hợp biên: Hàm xác thực của bạn phải từ chối 00.000.000/0000-00 nhưng chấp nhận 11.222.333/0001-81. Việc có một trình tạo cho phép bạn nhanh chóng tạo ra các trường hợp kiểm thử hợp lệ và không hợp lệ để xác minh logic của bạn xử lý các điều kiện biên một cách chính xác.
Kiểm thử hồi quy QA: Khi kiểm thử các biểu mẫu đăng ký hoặc luồng thanh toán B2B, các nhóm QA cần dữ liệu kiểm thử mới cho mỗi lần chạy. Một vấn đề thường gặp: môi trường kiểm thử bị ô nhiễm bởi 5-6 CNPJ được sử dụng lặp đi lặp lại, điều này che giấu các lỗi chỉ xuất hiện với các mẫu chữ số cụ thể.
Kiểm thử tích hợp API: Nếu bạn đang tích hợp với các nhà xử lý thanh toán Brazil như PagSeguro hoặc Mercado Pago, môi trường sandbox của họ thường yêu cầu định dạng CNPJ hợp lệ. Các phép tính phải chính xác ngay cả khi bạn không truy cập vào các cơ sở dữ liệu sản xuất.
Xử Lý và Xác Thực Dữ Liệu
Làm sạch dữ liệu nhập: Bạn đã nhận được một tệp CSV với 10.000 bản ghi công ty Brazil. Trước khi xử lý, bạn cần xác định những CNPJ nào bị lỗi. Chạy chúng qua trình xác thực sẽ đánh dấu các mục có lỗi đánh máy, bị cắt ngắn hoặc các chữ số kiểm tra không chính xác—tiết kiệm hàng giờ để gỡ lỗi về sau.
Xác thực biểu mẫu phía máy khách: Phát hiện CNPJ không hợp lệ trước khi gửi biểu mẫu sẽ cải thiện trải nghiệm người dùng. Không ai muốn điền một biểu mẫu đăng ký 20 trường chỉ để nhận thông báo lỗi khi gửi vì đã nhập sai vị trí của hai chữ số trong CNPJ.
Ẩn danh hóa dữ liệu để phân tích: Khi chuẩn bị dữ liệu sản xuất để chia sẻ với các nhóm phân tích hoặc đối tác bên ngoài, bạn cần thay thế các CNPJ thực bằng các CNPJ giả nhưng hợp lệ. Điều này duy trì tính toàn vẹn tham chiếu trong tập dữ liệu của bạn trong khi bảo vệ danh tính kinh doanh thực tế.
Hoạt Động Kinh Doanh Quốc Tế
Hiểu các yêu cầu của Brazil: Nếu bạn đang mở rộng sang thị trường Brazil, bạn sẽ gặp các yêu cầu CNPJ trong hợp đồng, hóa đơn và tài liệu vận chuyển. Việc có một công cụ để thử nghiệm định dạng sẽ giúp bạn hiểu những gì hệ thống của bạn cần xử lý.
Thông số kỹ thuật tích hợp của bên thứ ba: Khi xem xét tài liệu API từ các nhà cung cấp SaaS Brazil, bạn thường thấy các trường CNPJ trong các ví dụ payload. Khả năng tạo ra các giá trị kiểm thử hợp lệ sẽ giúp bạn nhanh chóng nguyên mẫu các tích hợp.
Các Phương Pháp Xác Thực CNPJ Thay Thế
Thư Viện Lập Trình
Nếu bạn cần xác thực CNPJ trong logic ứng dụng, các thư viện này triển khai thuật toán kiểm tra chữ số:
- JavaScript/Node.js:
cpf-cnpj-validator(130k+ lượt tải mỗi tuần),validator.js(hỗ trợ tài liệu Brazil) - Python:
validate-docbr(xác thực CPF, CNPJ và các tài liệu Brazil khác),python-cnpj - PHP:
respect/validation(bao gồm quy tắc CNPJ),brazilianutils - Java:
caelum-stella(xác thực toàn diện tài liệu Brazil) - Ruby: Gem
cpf_cnpj
Các thư viện này thường xử lý định dạng, phân tích và xác thực cho nhiều loại tài liệu Brazil (CPF, CNPJ, v.v.).
API Xác Minh Chính Thức
Đối với các hệ thống sản xuất cần xác minh đăng ký kinh doanh thực tế:
- Dịch Vụ Công Receita Federal: API Tra Cứu CNPJ cho phép xác minh so với cơ sở dữ liệu chính thức (yêu cầu ủy quyền và giới hạn tốc độ phù hợp)
- Nhà cung cấp dữ liệu của bên thứ ba: Các dịch vụ như Serasa Experian và Boa Vista SCPC cung cấp các API thương mại trả về chi tiết công ty, trạng thái đăng ký và thông tin tín dụng
Lưu ý: Các dịch vụ này kiểm tra đăng ký thực tế, không chỉ tính toán hợp lệ. Bạn sẽ cần ủy quyền phù hợp và nên mong đợi chi phí API cho việc sử dụng sản xuất.
Khi Nào Sử Dụng Từng Phương Pháp
Sử dụng công cụ trình duyệt này khi: Bạn cần xác thực nhanh mà không cần cài đặt phụ thuộc, tạo dữ liệu thử nghiệm cho demo, hoặc tìm hiểu cách xác thực CNPJ hoạt động.
Sử dụng thư viện khi: Bạn đang xây dựng ứng dụng cần xác thực phía máy khách hoặc máy chủ như một phần của xử lý biểu mẫu.
Sử dụng API chính thức khi: Bạn cần xác minh CNPJ tương ứng với một thực thể kinh doanh thực sự, đang hoạt động với trạng thái đăng ký hiện tại.
Chi Tiết Kỹ Thuật Triển Khai
Công cụ này chạy hoàn toàn trong trình duyệt của bạn bằng JavaScript—không có yêu cầu máy chủ, không có dữ liệu rời khỏi máy của bạn. Dưới đây là cách các thuật toán hoạt động bên trong, với mã mà bạn có thể điều chỉnh cho các dự án của riêng mình:
Thuật Toán Sinh CNPJ
1function generateCNPJ() {
2 // Sinh 12 chữ số đầu tiên một cách 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}
29Thuật Toán Xác Thực CNPJ
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 độ dài
6 if (cleanCNPJ.length !== 14) return false;
7
8 // Kiểm tra các mẫu không hợp lệ (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ố xác minh đầ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ố xác minh thứ hai
19 const expectedSecondDigit = calculateCheckDigit(digits.slice(0, 13));
20 if (digits[13] !== expectedSecondDigit) return false;
21
22 return true;
23}
24Hàm Định Dạng CNPJ
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}
18Các hàm cốt lõi này có thể được triển khai trong các ngôn ngữ lập trình khác bằng cách tuân theo cùng một logic. Dưới đây là các ví dụ bằng Python và Java:
Triển Khai Python
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 # Sinh 12 chữ số đầu tiên một cách 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
55Triển Khai Java
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 // Sinh 12 chữ số đầu tiên một cách 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}
85Các Hạn Chế và Lưu Ý Quan Trọng
Những Gì Công Cụ Này Có Thể và Không Thể Làm
Những gì nó xác thực: Tính toán toán học - liệu các chữ số kiểm tra có khớp với thuật toán tính toán không.
Những gì nó không xác thực: Liệu CNPJ có được đăng ký với Receita Federal, có phải là của một công ty đang hoạt động, hay có liên quan đến tên doanh nghiệp bạn mong đợi.
Hãy nghĩ về nó như việc kiểm tra chính tả so với kiểm tra thực tế. Công cụ này cho bạn biết một CNPJ có được "viết" chính xác theo các quy tắc toán học, nhưng nó không thể cho bạn biết liệu số đó có tương ứng với một thực thể kinh doanh thực sự và đang hoạt động.
Sử Dụng Hợp Pháp và Đạo Đức
CNPJ được tạo ra chỉ dành cho việc thử nghiệm và phát triển. Chúng có giá trị toán học nhưng không được đăng ký với các cơ quan Brazil, có nghĩa là:
- ✅ An toàn để sử dụng cho: Điền vào cơ sở dữ liệu thử nghiệm, kiểm tra đơn vị, môi trường QA, ví dụ mã trong tài liệu
- ❌ Không bao giờ sử dụng cho: Nộp thuế, đăng ký kinh doanh, ký kết hợp đồng, xử lý giao dịch thực, hoặc làm giả danh tính doanh nghiệp
Sử dụng CNPJ giả cho mục đích chính thức không chỉ là phi đạo đức - mà còn là bất hợp pháp theo luật Brazil và có thể dẫn đến các cáo buộc gian lận.
Các Hạn Chế Kỹ Thuật Cần Biết
Việc tạo ngẫu nhiên có hàm ý: Công cụ tạo ra 12 chữ số đầu tiên một cách ngẫu nhiên. CNPJ thực do Receita Federal cấp tuân theo các mẫu nội bộ liên quan đến ngày đăng ký, văn phòng khu vực và loại hình doanh nghiệp. Các số được tạo ra sẽ không khớp với các mẫu này, và các hệ thống xác thực tinh vi có thể đánh dấu.
Không có xác thực ngữ nghĩa: Định dạng CNPJ hợp lệ không có nghĩa là ngữ cảnh kinh doanh hợp lệ. Ví dụ, các thực thể chính phủ có phạm vi CNPJ cụ thể - trình tạo này có thể tạo ra một cách ngẫu nhiên, nhưng sẽ không có ý nghĩa.
Xử lý định dạng: Trình xác thực chấp nhận các định dạng đầu vào khác nhau (12345678000195, 12.345.678/0001-95), nhưng một số hệ thống cũ yêu cầu định dạng chính xác. Luôn kiểm tra với các yêu cầu tích hợp cụ thể của bạn.
Quyền Riêng Tư và Bảo Mật
Toàn bộ quá trình xử lý diễn ra ở phía máy khách trong trình duyệt của bạn. Không có CNPJ nào bạn tạo hoặc xác thực được gửi đến máy chủ, được ghi lại hoặc lưu trữ. Công cụ không yêu cầu, xử lý hoặc xử lý bất kỳ thông tin cá nhân nào.
Câu Hỏi Thường Gặp Về Xác Thực CNPJ
Đâu là sự khác biệt giữa việc xác thực và kiểm tra CNPJ?
Xác thực kiểm tra xem số có toán học chính xác không—định dạng đúng, chữ số kiểm tra chính xác, không có mẫu không hợp lệ. Công cụ này thực hiện việc xác thực.
Kiểm tra kiểm tra xem CNPJ có được đăng ký với một công ty thực tế trong cơ sở dữ liệu Receita Federal không. Việc kiểm tra yêu cầu truy vấn cơ sở dữ liệu chính phủ và không phải là điều mà công cụ này làm.
Bạn có thể có một CNPJ hoàn toàn hợp lệ mà không được kiểm tra (như các số kiểm tra mà công cụ này tạo ra), hoặc một CNPJ không hợp lệ thuộc về một công ty thực (vì ai đó đã nhập sai).
Tôi có thể sử dụng CNPJ được tạo ra để kiểm tra sản xuất không?
Điều này phụ thuộc vào ý nghĩa của "kiểm tra sản xuất" của bạn. Chúng rất tốt cho môi trường staging, kiểm tra tải và QA trước khi phát hành. Nhưng nếu "kiểm tra sản xuất" có nghĩa là kiểm tra với các giao dịch thực, API chính phủ thực, hoặc hệ thống tài chính thực—thì không, bạn cần các CNPJ đã đăng ký thực.
Một cách tiếp cận an toàn hơn: sử dụng CNPJ được tạo ra trong môi trường kiểm tra độc lập, sau đó chuyển sang một tập nhỏ CNPJ của công ty kiểm tra thực (những cái bạn kiểm soát) khi kiểm tra các tích hợp sản xuất.
Tại sao trình xác thực từ chối 11.111.111/1111-11?
Mặc dù một CNPJ với tất cả các chữ số giống nhau có thể tạo ra các chữ số kiểm tra hợp lệ về mặt toán học, Receita Federal loại trừ rõ ràng các mẫu này. Đó là một quy tắc kinh doanh, không phải quy tắc toán học. Điều tương tự áp dụng cho các mẫu tuần tự trong một số hệ thống xác thực.
Điều này tương tự như cách nhiều hệ thống từ chối mật khẩu như "password123" ngay cả khi chúng đáp ứng các yêu cầu về độ dài—về kỹ thuật chúng hợp lệ nhưng thực tế không chấp nhận được.
Làm thế nào để xử lý xác thực CNPJ trong các locale khác nhau?
Các công ty Brazil làm kinh doanh quốc tế đôi khi bỏ qua các ký tự định dạng khi nhập CNPJ vào các hệ thống nước ngoài. Logic xác thực của bạn nên loại bỏ các ký tự không phải số trước khi kiểm tra:
1const cleanCNPJ = input.replace(/\D/g, ''); // Loại bỏ mọi thứ trừ các chữ số
2Chấp nhận 12.345.678/0001-95, 12345678000195, và 12 345 678 0001 95 như các đầu vào tương đương.
Còn về việc xác thực CNPJ so với CPF?
CPF (Cadastro de Pessoas Físicas) là mã số thuế cá nhân của Brazil, trong khi CNPJ là dành cho doanh nghiệp. Chúng sử dụng các thuật toán chữ số kiểm tra và độ dài khác nhau (CPF có 11 chữ số, CNPJ có 14 chữ số). Nếu bạn đang xây dựng một ứng dụng Brazil xử lý cả hai, bạn sẽ cần các hàm xác thực riêng biệt—mặc dù nhiều thư viện hỗ trợ cả hai định dạng.
Một mẫu phổ biến: cho phép người dùng nhập CPF hoặc CNPJ trong cùng một trường, sau đó phát hiện loại dựa trên độ dài sau khi loại bỏ các ký tự định dạng.
Điều này có hoạt động cho các công ty nước ngoài hoạt động tại Brazil không?
Các công ty nước ngoài hoạt động tại Brazil cũng phải có CNPJ từ Receita Federal. CNPJ của họ tuân theo cùng một định dạng và quy tắc xác thực như các công ty trong nước. Không có định dạng CNPJ đặc biệt nào cho "công ty nước ngoài".
Tuy nhiên, các công ty nước ngoài có thể có các yêu cầu tài liệu bổ sung và quy trình đăng ký khác nhau—hãy tham khảo ý kiến của một luật sư kinh doanh Brazil để biết chi tiết cụ thể.
Tôi có thể truy vấn cơ sở dữ liệu chính phủ để xác minh đăng ký CNPJ không?
Có, Receita Federal cung cấp quyền truy cập công khai để xác minh thông tin CNPJ cơ bản thông qua dịch vụ Consulta Pública CNPJ của họ. Bạn có thể tra cứu CNPJ theo cách thủ công hoặc, với sự ủy quyền phù hợp, sử dụng các API của họ để truy cập theo chương trình.
Lưu ý rằng việc sử dụng nặng yêu cầu đăng ký và có các giới hạn tỷ lệ để ngăn chặn việc lạm dụng.
CNPJ thay đổi như thế nào?
CNPJ là các định danh vĩnh viễn không thay đổi khi một công ty thay đổi tên, địa chỉ hoặc cấu trúc sở hữu. Tuy nhiên, nếu một công ty đóng cửa và sau đó đăng ký lại, nó có thể nhận được một CNPJ mới. Các số chi nhánh (phần /XXXX) có thể được thêm vào khi các công ty mở các địa điểm mới, nhưng số 8 chữ số cơ bản vẫn không đổi.
Tài liệu Tham khảo và Nguồn Bổ sung
Nguồn Chính Thức của Chính Phủ
- Receita Federal do Brasil - Cổng Thông tin Chính thức - Trang web chính thức của Cơ quan Thuế Liên bang Brazil với các dịch vụ đăng ký và xác minh CNPJ
- Consulta Pública CNPJ - Tra cứu CNPJ Công khai - Dịch vụ chính phủ chính thức để kiểm tra trạng thái đăng ký CNPJ
- Hướng dẫn Quy phạm RFB Số 1863/2018 - Quy định pháp lý về đăng ký và sử dụng CNPJ tại Brazil
Tiêu chuẩn Kỹ thuật và Tài liệu
- Thuật toán số học mô đun - Việc tính toán chữ số kiểm tra sử dụng số học modulo 11, một phương pháp tiêu chuẩn để xác thực chữ số
- ISO/IEC 7064 - Tiêu chuẩn quốc tế về hệ thống chữ số kiểm tra ảnh hưởng đến thiết kế xác thực tài liệu của Brazil
- Bộ luật Dân sự Brazil (Luật Số 10.406/2002) - Khuôn khổ pháp lý xác định phân loại thực thể kinh doanh yêu cầu đăng ký CNPJ
Tài nguyên Dành cho Nhà phát triển
- Kho đăng ký gói NPM - npmjs.com - Kho lưu trữ các thư viện JavaScript bao gồm các trình xác thực tài liệu Brazil
- PyPI (Chỉ mục Gói Python) - pypi.org - Các thư viện Python để xác thực CNPJ và xử lý tài liệu Brazil
- GitHub - Các triển khai mã nguồn mở của xác thực CNPJ bằng nhiều ngôn ngữ lập trình
Bắt Đầu Tạo và Xác Thực CNPJs
Cho dù bạn đang xây dựng một nền tảng thương mại điện tử của Brazil, kiểm tra các tích hợp thanh toán với Mercado Pago, hoặc chỉ cần hiểu cách xác thực CNPJ hoạt động, công cụ này sẽ cung cấp cho bạn quyền truy cập ngay lập tức vào cả khả năng tạo và xác thực.
Không cần cài đặt, không cần khóa API, không có cài đặt phức tạp. Chỉ cần mở trình duyệt và bắt đầu làm việc với các định danh doanh nghiệp Brazil hợp lệ.