브라질 사업자 ID로 작업하는 개발자와 테스터를 위해 설계된 이 간단한 도구를 사용하여 유효한 브라질 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자리 식별 번호입니다. 이는 브라질의 회사 등록 번호 또는 세금 ID에 해당합니다. 브라질에서 합법적으로 운영되는 모든 기업은 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를 검증해야 하는 애플리케이션의 경우:
교육 목적이나 일회성 검증을 위해 알고리즘을 수동으로 적용할 수 있습니다:
그러나 수동 계산은 오류가 발생하기 쉽고 정기적으로 사용하기에는 비효율적입니다.
이 도구의 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를 생성하거나 우리의 간단한 인터페이스를 사용하여 기존 CNPJ를 검증해 보세요!
귀하의 워크플로에 유용할 수 있는 더 많은 도구를 발견하세요.