브라질 CNPJ 생성기 및 검증 도구
브라질 사업자 ID로 작업하는 개발자와 테스터를 위해 설계된 이 간단한 도구를 사용하여 유효한 브라질 CNPJ 번호를 생성하고 기존 번호를 검증하세요.
브라질 CNPJ 생성기 및 검증기
CNPJ 생성기
테스트 목적으로 유효한 브라질 CNPJ 번호를 생성합니다.
CNPJ 검증기
브라질 CNPJ 번호가 유효한지 확인합니다.
문서
브라질 CNPJ 생성기 및 검증기 도구
소개
**브라질 CNPJ (Cadastro Nacional da Pessoa Jurídica)**는 브라질의 기업 및 법인에 할당된 고유 식별 번호입니다. 이 브라질 CNPJ 생성기 및 검증기 도구는 테스트 목적으로 유효한 CNPJ 번호를 생성하고 기존 CNPJ 번호를 공식 브라질 알고리즘에 따라 검증하는 간단하고 효율적인 방법을 제공합니다. 브라질 비즈니스 데이터를 처리하는 애플리케이션을 테스트하는 개발자, 테스트 사례를 만드는 QA 전문가 또는 브라질 회사 정보를 다루는 사람이라면 이 도구가 CNPJ 번호 작업을 간소화합니다.
이 도구에서 생성된 CNPJ는 브라질 연방 세무국(Receita Federal)에서 공식적으로 발급된 실제 CNPJ 번호와는 달리 수학적으로 유효하지만 실제 회사에 등록되어 있지 않습니다. 따라서 실제 비즈니스 식별자를 사용하지 않고도 적절한 형식과 유효한 CNPJ 번호가 필요한 테스트 시나리오, 샘플 데이터 및 개발 환경에 적합합니다.
CNPJ란 무엇인가요?
CNPJ (Cadastro Nacional da Pessoa Jurídica)는 브라질 연방 세무국에서 기업 및 법인에 할당하는 14자리 식별 번호입니다. 이는 브라질의 회사 등록 번호 또는 세금 ID에 해당합니다. 브라질에서 합법적으로 운영되는 모든 기업은 CNPJ를 보유해야 하며, 이는 다음과 같은 용도로 사용됩니다:
- 세금 신고 및 준수
- 정부 기관에 대한 비즈니스 등록
- 은행 계좌 개설
- 송장 및 영수증 발행
- 정부 입찰 참여
- 상품 수출입
CNPJ는 브라질 비즈니스 생태계에서 필수적인 식별자로, 공식 문서, 계약 및 재무 기록에 나타납니다.
CNPJ 구조 및 형식
브라질 CNPJ는 14자리 숫자로 구성되며, 일반적으로 다음과 같이 형식화됩니다: XX.XXX.XXX/YYYY-ZZ
구조는 다음과 같이 나뉩니다:
- 처음 8자리 (XX.XXX.XXX): 회사에 할당된 기본 번호
- 슬래시 뒤의 4자리 (YYYY): 지점 식별자 (본사는 0001, 다른 번호는 지점)
- 마지막 2자리 (ZZ): 검증을 위한 체크 숫자
예를 들어, 올바르게 형식화된 CNPJ는 다음과 같습니다: 12.345.678/0001-95
체크 숫자(마지막 두 숫자)는 특정 수학 알고리즘을 사용하여 계산되어 CNPJ의 진위를 검증합니다. 이 알고리즘은 무작위로 생성된 숫자가 올바른 계산 방법을 따르지 않으면 검증을 통과할 수 없도록 보장합니다.
CNPJ 검증 방법
CNPJ 검증 알고리즘은 체크 숫자를 결정하기 위해 가중치 계산을 사용합니다. 작동 방식은 다음과 같습니다:
첫 번째 체크 숫자 계산
- 처음 12자리 숫자 각각을 가중치 시퀀스에 곱합니다: 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2
- 이러한 곱셈 결과를 합산합니다
- 이 합계를 11로 나눈 나머지를 계산합니다
- 나머지가 2보다 작으면 첫 번째 체크 숫자는 0; 그렇지 않으면 11에서 나머지를 뺍니다
두 번째 체크 숫자 계산
- 처음 13자리 숫자(첫 번째 체크 숫자를 포함) 각각을 가중치 시퀀스에 곱합니다: 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2
- 이러한 곱셈 결과를 합산합니다
- 이 합계를 11로 나눈 나머지를 계산합니다
- 나머지가 2보다 작으면 두 번째 체크 숫자는 0; 그렇지 않으면 11에서 나머지를 뺍니다
CNPJ가 유효하려면 두 체크 숫자가 계산된 값과 일치해야 합니다.
이 도구 사용 방법
우리의 브라질 CNPJ 생성기 및 검증기 도구는 두 가지 주요 기능을 제공합니다: 유효한 CNPJ 생성 및 기존 CNPJ 번호 검증.
CNPJ 생성하기
테스트 목적으로 유효한 CNPJ를 생성하려면:
- 도구의 "CNPJ 생성기" 섹션으로 이동합니다
- "CNPJ 생성" 버튼을 클릭합니다
- 수학적으로 유효한 CNPJ가 형식화된 디스플레이에 나타납니다
- "복사" 버튼을 사용하여 생성된 CNPJ를 클립보드에 복사합니다
생성된 CNPJ는 실제 CNPJ의 모든 수학적 검증 규칙을 따르지만 브라질 연방 세무국에 등록되어 있지 않습니다.
CNPJ 검증하기
CNPJ가 수학적으로 유효한지 확인하려면:
- 도구의 "CNPJ 검증기" 섹션으로 이동합니다
- 검증할 CNPJ를 입력 필드에 입력합니다
- 도구는 형식이 있는 CNPJ와 형식이 없는 CNPJ(점, 슬래시 및 하이픈 포함)를 모두 허용합니다
- "검증" 버튼을 클릭합니다
- 도구는 CNPJ가 체크 숫자 알고리즘에 따라 유효한지 또는 유효하지 않은지를 표시합니다
검증기는 CNPJ가 올바른 형식을 따르는지 및 체크 숫자가 예상 값과 일치하는지 확인합니다.
사용 사례
이 브라질 CNPJ 생성기 및 검증기 도구는 다음과 같은 시나리오에서 특히 유용합니다:
소프트웨어 개발 및 테스트
- 테스트 데이터 생성: 실제 회사 식별자를 사용하지 않고 테스트 데이터베이스에 유효한 CNPJ를 생성합니다
- 단위 테스트: 코드에서 CNPJ 처리 기능을 검증하기 위해 알려진 유효한 및 유효하지 않은 예제를 사용합니다
- QA 테스트: CNPJ 입력이 필요한 양식 및 인터페이스에 대한 테스트 사례를 생성합니다
- 통합 테스트: 브라질 정부 서비스 또는 금융 기관과 데이터를 교환하는 시스템을 테스트합니다
교육 및 훈련
- CNPJ 형식 배우기: 브라질 비즈니스 식별자가 어떻게 구조화되는지 이해합니다
- 알고리즘 연구: 체크 숫자 검증이 실제로 어떻게 작동하는지 살펴봅니다
- 데이터 검증 기술: 데이터 검증 요구 사항의 실제 사례를 연구합니다
데이터 처리
- 데이터 정리: 기존 데이터 세트에서 CNPJ를 검증하여 잠재적인 오류를 식별합니다
- 양식 검증: CNPJ 입력에 대한 클라이언트 측 또는 서버 측 검증을 구현합니다
- 데이터 익명화: 분석을 위해 데이터 세트를 준비할 때 실제 CNPJ를 유효한 생성된 CNPJ로 대체합니다
국제 비즈니스
- 시장 진입 준비: 브라질 비즈니스 식별 요구 사항을 이해합니다
- 문서 준비: 브라질을 위한 비즈니스 문서를 준비할 때 올바른 형식을 보장합니다
- 준수 확인: 수집된 CNPJ 번호가 최소한 수학적으로 유효한지 확인합니다
대안
우리 도구는 CNPJ 생성 및 검증을 위한 간단한 브라우저 기반 솔루션을 제공하지만, 특정 요구 사항에 따라 여러 대안이 있습니다:
프로그래밍 라이브러리
CNPJ 검증을 애플리케이션에 직접 통합하는 개발자를 위해 여러 언어별 라이브러리가 있습니다:
- JavaScript:
cpf_cnpj.js
,validator.js
- Python:
python-cnpj
,validate-docbr
- PHP:
brazilianutils
,respect/validation
- Java:
caelum-stella
,commons-validator
- Ruby:
cpf_cnpj
,brazilian-rails
이러한 라이브러리는 종종 형식화, 구문 분석 및 다른 브라질 문서의 검증과 같은 추가 기능을 제공합니다.
API 서비스
검증을 위한 구현 없이 CNPJ를 검증해야 하는 애플리케이션의 경우:
- 브라질 정부 API (등록 필요)
- CNPJ 검증을 포함하는 상업적 검증 API
- 공식 데이터베이스에 대한 검증을 제공하는 비즈니스 정보 서비스
수동 계산
교육 목적이나 일회성 검증을 위해 알고리즘을 수동으로 적용할 수 있습니다:
- CNPJ의 처음 12자리를 추출합니다
- 앞서 설명한 대로 가중치 계산을 수행합니다
- 계산된 체크 숫자가 실제 체크 숫자와 일치하는지 비교합니다
그러나 수동 계산은 오류가 발생하기 쉽고 정기적으로 사용하기에는 비효율적입니다.
기술 구현
이 도구의 CNPJ 생성기 및 검증기는 JavaScript를 사용하여 구현되어 빠르고 브라우저에서 완전히 실행될 수 있습니다. 서버에 데이터를 전송하지 않고도 작동합니다. 핵심 기능이 작동하는 방식은 다음과 같습니다:
CNPJ 생성 알고리즘
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
CNPJ 검증 알고리즘
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
CNPJ 형식화 함수
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의 예입니다:
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 # 처음 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
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 // 처음 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는 브라질 연방 세무국에 등록되어 있지 않습니다
- 실제 유효성 없음: 실제 비즈니스 등록이나 세금 목적으로 사용할 수 없습니다
기술적 한계
- 비즈니스 정보 없음: 생성된 CNPJ는 실제 비즈니스 부문 코드나 위치 정보를 포함하지 않습니다
- 데이터베이스 검증 없음: 검증기는 수학적 유효성만 확인하고 등록 상태는 확인하지 않습니다
- 형식 변형: 도구는 일반적인 형식 변형을 처리하지만 일부 시스템에서는 특정 형식이 필요할 수 있습니다
보안 고려 사항
- 클라이언트 측 처리: 모든 처리는 브라우저에서 이루어지며, 데이터가 서버로 전송되지 않습니다
- 데이터 저장 없음: 생성된 CNPJ는 저장되거나 기록되지 않습니다
- 개인 데이터 없음: 도구는 개인 정보를 처리하거나 다루지 않습니다
자주 묻는 질문
CNPJ는 브라질에서 어떤 용도로 사용되나요?
CNPJ는 브라질에서 기업 및 법인의 국가 등록 번호입니다. 세금 목적으로, 비즈니스 등록, 은행 계좌 개설 및 공식 거래에서 회사를 식별하는 데 사용됩니다.
이 도구에서 생성된 CNPJ는 실제인가요?
아니요. 이 도구에서 생성된 CNPJ는 체크 숫자 알고리즘에 따라 수학적으로 유효하지만 브라질 연방 세무국에 등록되어 있지 않으며 실제 회사에 속하지 않습니다.
생성된 CNPJ를 내 비즈니스에 사용할 수 있나요?
아니요. 비즈니스에 대한 합법적인 CNPJ를 얻으려면 브라질 연방 세무국(Receita Federal)에 공식 절차를 따라 등록해야 합니다. 생성된 CNPJ는 테스트 목적으로만 사용해야 합니다.
CNPJ가 실제 회사에 속하는지 어떻게 확인하나요?
CNPJ가 실제 회사에 등록되어 있는지 확인하려면 브라질 연방 세무국 데이터베이스를 조회해야 합니다. 우리 도구는 CNPJ가 수학적으로 유효한지 여부만 확인하며, 공식적으로 등록된지 여부는 확인하지 않습니다.
왜 검증기가 모든 숫자가 동일한 CNPJ를 거부하나요?
모든 숫자가 동일한 CNPJ(예: 11.111.111/1111-11)는 수학적으로 통과하더라도 자동으로 유효하지 않은 것으로 간주됩니다. 이는 브라질 연방 세무국에서 정한 규칙입니다.
도구는 내가 생성하거나 검증한 CNPJ를 저장하나요?
아니요. 모든 처리는 브라우저에서 이루어지며, 생성하거나 검증한 CNPJ는 저장되지 않습니다.
한 번에 여러 CNPJ를 생성할 수 있나요?
현재 도구는 한 번에 하나의 CNPJ만 생성합니다. 대량 생성을 원하시면 대안 섹션에 언급된 프로그래밍 라이브러리 중 하나를 고려해 보십시오.
XX.XXX.XXX/XXXX-XX 형식이 중요한 이유는 무엇인가요?
이는 브라질 당국에서 요구하는 공식 형식입니다. 특정 그룹화는 CNPJ의 다양한 구성 요소, 즉 기본 번호와 지점 식별자를 식별하는 데 도움이 됩니다.
프로그램적으로 CNPJ를 검증하려면 어떻게 해야 하나요?
기술 구현 섹션에 제공된 코드 예제를 사용하여 선호하는 프로그래밍 언어로 검증 알고리즘을 구현하거나 대안 섹션에 언급된 라이브러리 중 하나를 사용할 수 있습니다.
정부 기관에 대한 특별한 CNPJ가 있나요?
예. 브라질의 정부 기관은 특정 CNPJ 패턴을 가지고 있습니다. 예를 들어, 연방 정부 기관은 종종 특정 숫자로 시작합니다. 우리의 생성기는 무작위 CNPJ를 생성하며 정부 기관 CNPJ를 특별히 생성하지 않습니다.
참고 문헌
- 브라질 연방 세무국 (Receita Federal do Brasil) - 공식 웹사이트
- "CNPJ - Cadastro Nacional da Pessoa Jurídica" - 위키백과
- 브라질 민법 (법률 제10.406/2002) - 브라질의 기업에 대한 법적 틀
- 브라질 비즈니스 등록 규정 지침 (IN RFB 제1863/2018) - CNPJ 등록에 대한 규정
지금 사용해 보세요
우리의 브라질 CNPJ 생성기 및 검증기 도구는 이러한 식별 번호를 작업하는 것을 간단하고 효율적으로 만듭니다. 애플리케이션을 테스트하거나 샘플 데이터를 준비하거나 기존 CNPJ를 검증하는 경우, 이 도구는 API 통합이나 고급 구성의 복잡성 없이 간단한 솔루션을 제공합니다.
지금 첫 번째 유효한 CNPJ를 생성하거나 우리의 간단한 인터페이스를 사용하여 기존 CNPJ를 검증해 보세요!
피드백
피드백 토스트를 클릭하여 이 도구에 대한 피드백을 시작하세요.
관련 도구
귀하의 작업 흐름에 유용할 수 있는 더 많은 도구를 발견하세요.