CNPJ 생성기 및 검증기 - 브라질 사업자 ID 도구
테스트를 위한 유효한 CNPJ 번호를 생성하거나 브라질 사업자 ID를 즉시 검증합니다. 개발자를 위한 체크 디지트 검증이 포함된 무료 도구로, 법인 국가 등록부(Cadastro Nacional da Pessoa Jurídica)와 연동됩니다.
브라질 CNPJ 생성기 및 검증기
CNPJ 생성기
테스트 목적으로 유효한 브라질 CNPJ 번호를 생성합니다.
CNPJ 검증기
브라질 CNPJ 번호의 유효성을 확인합니다.
문서화
브라질 CNPJ 번호 이해하기
**CNPJ(Cadastro Nacional da Pessoa Jurídica)**는 브라질의 법인 세금 ID로, 국가의 모든 법적 사업체를 식별하는 14자리 번호입니다. 브라질 비즈니스 데이터를 처리하는 소프트웨어를 개발하는 경우, 등록 양식, 송장, API 통합에서 이러한 번호를 빠르게 접하게 될 것입니다.
이 도구의 실용성은 다음과 같습니다: 실제 회사 식별자를 사용하지 않고 수학적으로 유효한 CNPJ를 생성합니다. 1,000개의 레코드로 테스트 데이터베이스를 설정하거나 새벽 2시에 검증 루틴을 디버깅할 때, 알고리즘 검사를 통과하지만 실제 비즈니스와 우연히 일치하지 않는 CNPJ가 필요합니다. 바로 이것이 이 도구가 생성하는 것입니다.
여기서 생성되는 번호는 공식 Receita Federal(브라질 연방 국세청) 검증 알고리즘을 따릅니다. 올바른 체크 숫자와 적절한 형식을 가지고 있지만, 정부 데이터베이스에 등록되어 있지는 않습니다. 개발 환경에서 규정 문제를 일으키지 않는 구문적으로 올바른 테스트 데이터라고 생각하면 됩니다.
CNPJ란 무엇이며 왜 중요한가
CNPJ는 브라질의 기업 식별자로, 미국의 EIN이나 영국의 기업 등록 번호와 유사합니다. 브라질에서 합법적으로 운영되는 모든 사업체는 연방국세청(Receita Federal)에서 발급하는 CNPJ를 보유해야 합니다.
다음과 같은 상황에서 CNPJ를 접하게 됩니다:
- 결제 처리: 브라질 결제 게이트웨이는 가맹점 계정에 대해 CNPJ 검증을 요구합니다
- 세금 규정 준수: 브라질에서 발행되는 모든 송장에는 유효한 CNPJ가 포함되어야 합니다
- 사업자 등록: 정부 기관은 CNPJ를 사용하여 시스템 전반에 걸쳐 법인을 추적합니다
- 은행 업무: 기업 계좌 개설 또는 국제 송금 처리
- 수출입: 통관 서류에는 CNPJ 확인이 필요합니다
- 정부 계약: 공공 입찰 시스템은 입찰 수락 전 CNPJ를 검증합니다
브라질 전자상거래 플랫폼에서 작업한 경험에 따르면, 가장 일반적인 통합 지점 중 하나는 사용자가 기업 구매를 위해 CNPJ를 입력하는 결제 흐름입니다. 결제 처리기가 처리하기 전에 형식 오류를 잡을 수 있는 검증 로직이 필요합니다. 그렇지 않으면 방지할 수 있었던 거래 실패를 보게 될 것입니다.
CNPJ 구조 및 형식
CNPJ는 14자리 숫자로 다음과 같은 형식으로 구성됩니다: XX.XXX.XXX/YYYY-ZZ
구조 분석:
- 처음 8자리 (XX.XXX.XXX): 회사에 고유하게 할당된 기본 등록 번호
- 다음 4자리 (/YYYY): 지점 또는 사업장 식별자—
/0001은 본사를 나타내며,/0002,/0003은 지점 위치를 나타냅니다 - 마지막 2자리 (-ZZ): 가중 알고리즘을 통해 계산된 검증 숫자
예시: 12.345.678/0001-95
지점 식별자의 흥미로운 점: 회사가 여러 지점을 개설할 때, 각 지점은 처음 8자리는 동일하지만 다른 지점 번호를 가집니다. 따라서 소매 체인에 50개 매장이 있다면, /0001부터 /0050까지의 CNPJ를 가지며, 모두 동일한 기본 번호를 공유합니다. 이를 통해 여러 CNPJ가 동일한 모기업에 속함을 쉽게 식별할 수 있습니다.
검증 숫자는 임의의 숫자가 아닙니다—특정 가중치 시퀀스를 사용하는 모듈러스-11 알고리즘을 통해 계산됩니다. 브라질 행정 문서에서 흔히 볼 수 있는 이러한 설계 선택은 유효한 번호를 위조하거나 실수로 유효한 번호를 만드는 것을 수학적으로 어렵게 만듭니다.
CNPJ 검증 작동 방식
검증 알고리즘은 가중치 모듈러스-11 계산을 사용합니다. 다음은 그 논리입니다:
첫 번째 검증 숫자 계산
- 처음 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 - 나머지입니다
이 접근 방식이 작동하는 이유: 가중치 곱셈 시스템은 12개의 기본 숫자와 결과 검증 숫자 사이에 고유한 관계를 만듭니다. 기본 번호의 단일 숫자만 변경해도 다른 검증 숫자가 생성되어, 두 숫자를 바꿔 쓰는 것과 같은 일반적인 전사 오류를 잡아냅니다.
실용적인 참고 사항: 모든 숫자가 동일한 CNPJ(예: 11.111.111/1111-11)는 수학적 검증을 통과해도 자동으로 무효입니다. 수취청은 이러한 패턴을 명시적으로 제외하여 사소한 사례를 방지합니다.
CNPJ 생성기 및 검증기 사용 방법
테스트 CNPJ 생성하기
테스트 데이터베이스에 유효한 CNPJ가 필요하신가요? 다음과 같이 진행하세요:
- "CNPJ 생성" 클릭
- 도구가 즉시 수학적으로 유효한 번호를 생성합니다
- 클립보드로 복사하려면 "복사" 클릭
- 테스트 양식, 데이터베이스 시드 또는 단위 테스트에 붙여넣기
생성된 각 CNPJ는 모든 알고리즘 검증 검사를 통과하지만 Receita Federal에 등록되지 않았습니다. 즉, 실제 회사의 식별자를 실수로 사용하지 않고 개발에 자유롭게 사용할 수 있습니다.
CNPJ 번호 검증하기
검증해야 할 CNPJ가 있나요? 검증기가 처리합니다:
- CNPJ를 입력 필드에 붙여넣기 또는 입력
- 형식에 신경 쓰지 마세요 -
12345678000195또는12.345.678/0001-95모두 작동합니다 - "검증" 클릭
- 검증 숫자가 올바른지 즉시 피드백 받기
검증기가 확인하는 내용: 적절한 길이(14자리), 올바른 검증 숫자 계산, 모든 숫자가 같은 패턴 제외. 확인하지 않는 내용: 정부 데이터베이스에 CNPJ가 등록되어 있는지 - 이는 Receita Federal에 직접 쿼리해야 합니다.
CNPJ 생성기 및 검증기의 실제 사용 사례
소프트웨어 개발 및 테스트
데이터베이스 시딩: 실제와 유사한 테스트 데이터로 스테이징 환경을 설정할 때, 수십 또는 수백 개의 유효한 CNPJ가 필요합니다. 이를 수동으로 생성하는 것은 지루하며, 실제 회사 식별자를 사용하면 개인정보 문제가 발생합니다. 생성된 CNPJ는 이 두 가지 문제를 해결합니다.
단위 테스트 엣지 케이스: 검증 함수는 00.000.000/0000-00은 거부하고 11.222.333/0001-81은 수락해야 합니다. 생성기를 사용하면 빠르게 유효하고 의도적으로 무효한 테스트 케이스를 만들어 경계 조건을 올바르게 처리하는지 확인할 수 있습니다.
QA 회귀 테스트: 등록 양식이나 B2B 결제 흐름을 테스트할 때, QA 팀은 각 실행마다 새로운 테스트 데이터가 필요합니다. 내가 본 일반적인 문제는: 테스트 환경이 반복적으로 사용되는 동일한 5-6개의 CNPJ로 오염되어, 특정 숫자 패턴에서만 나타나는 버그를 숨깁니다.
API 통합 테스트: PagSeguro나 Mercado Pago와 같은 브라질 결제 프로세서와 통합하는 경우, 샌드박스 환경에서는 종종 유효한 CNPJ 형식이 필요합니다. 프로덕션 데이터베이스에 접근하지 않더라도 수학적 계산은 정확해야 합니다.
데이터 처리 및 검증
가져온 데이터 정리: 10,000개의 브라질 회사 기록이 포함된 CSV를 받았습니다. 처리하기 전에 어떤 CNPJ가 잘못되었는지 식별해야 합니다. 검증기를 통해 오타, 잘림, 또는 잘못된 체크 숫자가 있는 항목을 표시하여 다운스트림 디버깅에 수 시간을 절약할 수 있습니다.
클라이언트 측 양식 검증: 양식 제출 전 잘못된 CNPJ를 잡아내면 사용자 경험이 향상됩니다. 20개 필드 등록 양식을 작성한 후 두 자릿수를 잘못 입력했다는 이유로 제출 시 오류가 발생하는 것을 원하는 사람은 없습니다.
분석을 위한 데이터 익명화: 프로덕션 데이터를 분석 팀이나 외부 파트너와 공유할 때, 실제 CNPJ를 유효하지만 가짜인 것으로 대체해야 합니다. 이를 통해 데이터 세트의 참조 무결성을 유지하면서 실제 비즈니스 신원을 보호할 수 있습니다.
국제 비즈니스 운영
브라질 요구사항 이해: 브라질 시장으로 확장하는 경우, 계약, 송장, 배송 문서에서 CNPJ 요구사항을 접하게 됩니다. 형식을 실험할 수 있는 도구가 있으면 시스템이 처리해야 할 내용을 더 잘 이해할 수 있습니다.
제3자 통합 사양: 브라질 SaaS 제공업체의 API 문서를 검토할 때, 페이로드 예제에서 종종 CNPJ 필드를 볼 수 있습니다. 유효한 테스트 값을 생성할 수 있으면 통합을 더 빠르게 프로토타이핑할 수 있습니다.
대체 CNPJ 검증 접근 방식
프로그래밍 라이브러리
애플리케이션 로직에 CNPJ 검증이 필요한 경우, 다음 라이브러리들이 체크 디지트 알고리즘을 구현합니다:
- JavaScript/Node.js:
cpf-cnpj-validator(주간 130k+ 다운로드),validator.js(브라질 문서 지원) - Python:
validate-docbr(CPF, CNPJ 및 기타 브라질 문서 검증),python-cnpj - PHP:
respect/validation(CNPJ 규칙 포함),brazilianutils - Java:
caelum-stella(포괄적인 브라질 문서 검증) - Ruby:
cpf_cnpj젬
이러한 라이브러리는 일반적으로 여러 브라질 문서 유형(CPF, CNPJ 등)의 형식 지정, 구문 분석 및 검증을 처리합니다.
공식 검증 API
실제 비즈니스 등록을 확인해야 하는 프로덕션 시스템의 경우:
- 연방 국세청 공공 서비스: Consulta CNPJ API는 공식 데이터베이스에 대한 검증을 허용합니다(적절한 승인 및 속도 제한 필요)
- 제3자 데이터 제공업체: Serasa Experian 및 Boa Vista SCPC와 같은 서비스는 회사 세부 정보, 등록 상태 및 신용 정보를 반환하는 상업용 API를 제공합니다
참고: 이러한 서비스는 단순한 수학적 유효성이 아니라 실제 등록을 확인합니다. 프로덕션 사용을 위해서는 적절한 승인이 필요하며 API 비용이 발생할 수 있습니다.
각 접근 방식을 사용해야 하는 경우
다음 경우 브라우저 도구 사용: 종속성 설치 없이 빠른 검증이 필요하거나, 데모를 위한 테스트 데이터 생성, CNPJ 검증 작동 방식 학습
다음 경우 라이브러리 사용: 양식 처리의 일부로 클라이언트 측 또는 서버 측 검증이 필요한 애플리케이션을 구축하는 경우
다음 경우 공식 API 사용: 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}
29CNPJ 검증 알고리즘
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}
24CNPJ 형식화 함수
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
55Java 구현
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는 테스트 및 개발 목적으로만 사용됩니다. 수학적으로는 유효하지만 브라질 당국에 등록되지 않았음을 의미합니다:
- ✅ 안전하게 사용할 수 있는 경우: 테스트 데이터베이스 채우기, 유닛 테스트 검증 로직, QA 환경, 문서의 코드 예시
- ❌ 절대 사용하면 안 되는 경우: 세금 신고, 사업자 등록, 계약 서명, 실제 거래 처리, 또는 사업체 신원 허위 표시
가짜 CNPJ를 공식 목적으로 사용하는 것은 단순히 비윤리적일 뿐만 아니라 브라질 법률에 따라 불법이며 사기 혐의로 처벌받을 수 있습니다.
알아야 할 기술적 제한 사항
무작위 생성의 의미: 도구는 처음 12자리를 무작위로 생성합니다. 국세청에서 발급하는 실제 CNPJ는 등록 날짜, 지역 사무소, 사업 유형과 관련된 내부 패턴을 따릅니다. 생성된 번호는 이러한 패턴과 일치하지 않을 것이며, 정교한 검증 시스템에서 이를 표시할 수 있습니다.
의미론적 검증 없음: 유효한 CNPJ 형식이 유효한 사업 컨텍스트를 의미하지는 않습니다. 예를 들어, 정부 기관은 특정 CNPJ 범위를 가지고 있는데 - 이 생성기가 우연히 하나를 만들 수 있지만, 의미 있는 것은 아닙니다.
형식 처리: 검증기는 다양한 입력 형식(12345678000195, 12.345.678/0001-95)을 허용하지만, 일부 레거시 시스템은 정확한 형식을 기대합니다. 항상 특정 통합 요구 사항으로 테스트하세요.
개인정보 보호 및 보안
모든 처리는 브라우저의 클라이언트 측에서 이루어집니다. 생성하거나 검증하는 CNPJ가 서버로 전송되거나, 기록되거나, 저장되지 않습니다. 이 도구는 개인 정보를 요청, 처리 또는 다루지 않습니다.
CNPJ 검증에 대한 자주 묻는 질문
CNPJ 검증과 확인의 차이점은 무엇인가요?
검증은 숫자가 수학적으로 올바른지 확인합니다 - 올바른 형식, 정확한 체크 숫자, 유효하지 않은 패턴 없음. 이 도구는 검증을 수행합니다.
확인은 CNPJ가 Receita Federal 데이터베이스에 실제 회사로 등록되어 있는지 확인합니다. 확인을 위해서는 정부 데이터베이스를 조회해야 하며, 이는 이 도구에서 수행하지 않는 작업입니다.
수학적으로 완벽히 유효한 CNPJ가 확인되지 않을 수 있고(이 도구가 생성하는 테스트 번호와 같이), 또는 실제 회사에 속한 유효하지 않은 CNPJ가 있을 수 있습니다(입력 시 오타가 있는 경우).
생성된 CNPJ를 프로덕션 테스트에 사용할 수 있나요?
"프로덕션 테스트"의 의미에 따라 다릅니다. 스테이징 환경, 부하 테스트, 사전 출시 QA에는 적합합니다. 하지만 "프로덕션 테스트"가 실제 거래, 실제 정부 API, 실제 금융 시스템 테스트를 의미한다면 - 아니오, 실제 등록된 CNPJ가 필요합니다.
더 안전한 접근 방식: 격리된 테스트 환경에서 생성된 CNPJ를 사용하고, 프로덕션 통합 테스트 시 통제할 수 있는 소수의 실제 테스트 회사 CNPJ로 전환하세요.
왜 검증기는 11.111.111/1111-11을 거부하나요?
모든 숫자가 동일한 CNPJ도 수학적으로 유효한 체크 숫자를 생성할 수 있지만, Receita Federal은 명시적으로 이러한 패턴을 제외합니다. 이는 수학적 규칙이 아니라 비즈니스 규칙입니다. 일부 검증 시스템에서 순차적 패턴에도 동일하게 적용됩니다.
이는 길이 요구 사항을 충족하더라도 "password123"과 같은 비밀번호를 많은 시스템에서 거부하는 것과 유사합니다 - 기술적으로는 유효하지만 실질적으로 허용할 수 없습니다.
다른 로케일에서 CNPJ 검증을 어떻게 처리하나요?
브라질 기업이 국제 비즈니스를 할 때 때때로 외국 시스템에 CNPJ를 입력할 때 형식 문자를 제거합니다. 검증 로직은 확인 전에 숫자가 아닌 문자를 제거해야 합니다:
1const cleanCNPJ = input.replace(/\D/g, ''); // 숫자를 제외한 모든 것 제거
212.345.678/0001-95, 12345678000195, 12 345 678 0001 95를 동일한 입력으로 허용합니다.
CNPJ와 CPF 검증에 대해서는 어떤가요?
CPF(Cadastro de Pessoas Físicas)는 브라질의 개인 세금 ID이고, CNPJ는 기업용입니다. 서로 다른 체크 숫자 알고리즘과 길이(CPF는 11자리, CNPJ는 14자리)를 사용합니다. 두 형식을 모두 처리하는 브라질 앱을 만든다면 별도의 검증 함수가 필요하지만, 많은 라이브러리에서 두 형식을 지원합니다.
일반적인 패턴: 사용자가 동일한 필드에 CPF 또는 CNPJ를 입력하도록 하고, 형식 문자를 제거한 후 길이에 따라 유형을 감지합니다.
(번역 계속...)
참고 자료 및 추가 리소스
공식 정부 출처
- 브라질 연방 국세청 - 공식 포털 - CNPJ 등록 및 확인 서비스를 제공하는 브라질 연방 국세청의 공식 웹사이트
- 공개 CNPJ 조회 - 공개 CNPJ 조회 - CNPJ 등록 상태를 확인하는 공식 정부 서비스
- 규정 지침 RFB No. 1863/2018 - 브라질에서 CNPJ 등록 및 사용을 규제하는 법적 규정
기술 표준 및 문서
- 모듈러 산술 알고리즘 - 검증 숫자 계산은 모듈로 11 산술을 사용하며, 이는 검증 숫자에 대한 표준 접근 방식입니다
- ISO/IEC 7064 - 브라질 문서 검증 설계에 영향을 미친 체크 숫자 시스템에 대한 국제 표준
- 브라질 민법 (법률 No. 10.406/2002) - CNPJ 등록이 필요한 사업체 분류를 정의하는 법적 프레임워크
개발자 리소스
- NPM 패키지 레지스트리 - npmjs.com - 브라질 문서 검증기를 포함한 JavaScript 라이브러리 저장소
- PyPI (Python 패키지 인덱스) - pypi.org - CNPJ 검증 및 브라질 문서 처리를 위한 Python 라이브러리
- GitHub - 다양한 프로그래밍 언어로 된 CNPJ 검증의 오픈 소스 구현
CNPJ 생성 및 검증 시작하기
브라질 전자상거래 플랫폼을 구축하거나, Mercado Pago와의 결제 통합을 테스트하거나, CNPJ 검증 방식을 이해하고 싶다면, 이 도구를 통해 생성 및 검증 기능에 즉시 접근할 수 있습니다.
설치, API 키, 복잡한 설정 없이 브라우저를 열고 바로 유효한 브라질 사업자 식별자로 작업을 시작할 수 있습니다.