تولید شمارههای CNPJ معتبر برای آزمایش یا اعتبارسنجی فوری شناسههای تجاری برزیل. ابزار رایگان با تأیید رقم کنترلی برای توسعهدهندگان که با ثبت ملی شخصیت حقوقی کار میکنند.
تولید یک شماره CNPJ برزیل معتبر برای اهداف آزمایشی.
بررسی اعتبار یک شماره CNPJ برزیل.
CNPJ (Cadastro Nacional da Pessoa Jurídica) نسخه برزیلی شناسه مالیاتی شرکتی است - یک عدد 14 رقمی که هر واحد تجاری حقوقی در این کشور را شناسایی میکند. اگر در حال ساخت نرمافزاری هستید که با دادههای تجاری برزیل سر و کار دارد، به سرعت با این شمارهها در فرمهای ثبتنام، صورتحسابها و ادغامهای API مواجه خواهید شد.
دلیل کاربردی بودن این ابزار در این است: این شمارههای CNPJ از نظر ریاضی معتبر را برای آزمایش تولید میکند بدون اینکه از شناسههای شرکتهای واقعی استفاده شود. زمانی که در حال راهاندازی یک پایگاه داده آزمایشی با 1000 رکورد هستید یا در ساعت 2 صبح در حال اشکالزدایی یک روال اعتبارسنجی، به CNPJهایی نیاز دارید که از بررسیهای الگوریتمی عبور کنند اما تصادفاً با کسبوکارهای واقعی مطابقت نداشته باشند. دقیقاً همین چیزی است که این ابزار تولید میکند.
اعداد تولید شده در اینجا از الگوریتم اعتبارسنجی رسمی رسیسیتا فدرال (سازمان درآمد فدرال برزیل) پیروی میکنند. آنها دارای ارقام بررسی صحیح و قالببندی مناسب هستند - فقط در پایگاه داده دولتی ثبت نشدهاند. آنها را به عنوان دادههای آزمایشی از نظر نحوی صحیح که مشکلات انطباق در محیط توسعه ایجاد نمیکنند، در نظر بگیرید.
CNPJ شناسه شرکتی برزیل است - مشابه EIN در ایالات متحده یا شماره ثبت شرکت در انگلستان. هر واحد تجاری که به طور قانونی در برزیل فعالیت میکند باید یکی داشته باشد، که توسط رسیسیتا فدرال (خدمات درآمد فدرال) صادر میشود.
شما با CNPJ در موارد زیر مواجه خواهید شد:
از تجربه من در کار با پلتفرمهای تجارت الکترونیک برزیل، یکی از نقاط ادغام رایج در جریان تسویه حساب، جایی است که کاربران CNPJ خود را برای خریدهای شرکتی وارد میکنند. منطق اعتبارسنجی شما باید خطاهای فرمتبندی را قبل از پردازشگر پرداخت شناسایی کند - در غیر این صورت با معاملات ناموفقی مواجه خواهید شد که میتوانسته اجتناب شود.
یک CNPJ شامل ۱۴ رقم با فرمت زیر است: XX.XXX.XXX/YYYY-ZZ
شکستن ساختار:
۱. ۸ رقم اول (XX.XXX.XXX): شماره ثبت پایه که به صورت منحصر به فرد به شرکت اختصاص داده میشود
۲. ۴ رقم بعدی (/YYYY): شناسه شعبه یا محل کسب و کار—/0001 نشاندهنده دفتر مرکزی است، در حالی که /0002، /0003 نشاندهنده محلهای شعب هستند
۳. ۲ رقم نهایی (-ZZ): ارقام تأیید که از طریق یک الگوریتم وزنی محاسبه میشوند
مثال: 12.345.678/0001-95
نکته جالب درباره شناسه شعبه: زمانی که یک شرکت چندین محل را افتتاح میکند، هر کدام همان ۸ رقم اول را دارند اما شماره شعبه متفاوتی دارند. بنابراین اگر یک زنجیره خردهفروشی ۵۰ فروشگاه داشته باشد، آنها CNPJهایی با پسوند /0001 تا /0050 خواهند داشت، همه با شماره پایه مشترک. این موضوع شناسایی اینکه چندین CNPJ متعلق به یک سازمان مادر هستند را آسان میکند.
ارقام تأیید تصادفی نیستند—آنها با استفاده از یک الگوریتم مدولوس-۱۱ با توالیهای وزنی خاص محاسبه میشوند. این انتخاب طراحی، که در اسناد اداری برزیل رایج است، به لحاظ ریاضی ساختن اعداد معتبر یا ایجاد اعداد معتبر به طور تصادفی را دشوار میکند.
الگوریتم اعتبارسنجی از محاسبه مدولوس-11 با وزن استفاده میکند. در اینجا منطق پشت آن آمده است:
5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 211 - باقیمانده6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 211 - باقیماندهچرا این رویکرد کار میکند: سیستم ضرب با وزن، رابطه منحصر به فردی بین تمام 12 رقم پایه و ارقام کنترلی ایجاد میکند. تغییر حتی یک رقم در عدد پایه، ارقام کنترلی متفاوتی تولید میکند که خطاهای رایج رونویسی مانند جابجایی دو رقم (تایپ 12.345 به جای 12.354) را شناسایی میکند.
نکته عملی: CNPJهایی با تمام ارقام یکسان (مانند 11.111.111/1111-11) به طور خودکار نامعتبر هستند، حتی اگر از نظر ریاضی تأیید شوند. اداره مالیاتی (Receita Federal) به صراحت این الگوها را برای جلوگیری از موارد پیشپا افتاده حذف میکند.
به یک CNPJ معتبر برای پایگاه داده آزمایشی خود نیاز دارید؟ اینجا نحوه انجام آن است:
هر CNPJ تولید شده از تمام بررسیهای اعتبارسنجی الگوریتمی عبور میکند اما در سازمان مالیاتی برزیل (Receita Federal) ثبت نشده است. این بدان معنی است که میتوانید آزادانه در توسعه از آن استفاده کنید بدون نگرانی از استفاده تصادفی از شناسه یک شرکت واقعی.
یک CNPJ دارید که نیاز به تأیید دارید؟ اعتبارسنج به شما کمک میکند:
12345678000195 یا 12.345.678/0001-95 کار میکندآنچه اعتبارسنج بررسی میکند: طول مناسب (14 رقم)، محاسبات صحیح رقم بررسی و حذف الگوهای نامعتبر مانند ارقام یکسان. آنچه بررسی نمیکند: اینکه CNPJ در پایگاه داده دولتی ثبت شده است - برای این کار نیاز به استعلام مستقیم از سازمان مالیاتی برزیل است.
بذر پایگاه داده: هنگام راهاندازی محیط مرحلهبندی با دادههای تست واقعی، به دهها یا صدها CNPJ معتبر نیاز دارید. ایجاد دستی این موارد خستهکننده است و استفاده از شناسههای شرکتهای واقعی نگرانیهای حریم خصوصی را مطرح میکند. CNPJهای تولید شده هر دو مشکل را حل میکنند.
تست واحد موارد حاشیهای: تابع اعتبارسنجی شما باید 00.000.000/0000-00 را رد کند اما 11.222.333/0001-81 را بپذیرد. داشتن یک تولیدکننده به شما اجازه میدهد سریعاً موارد تست معتبر و عمداً نامعتبر را ایجاد کنید تا منطق خود را در مورد شرایط مرزی تأیید کنید.
تست رگرسیون کیفیت: هنگام تست فرمهای ثبتنام یا جریانهای پرداخت B2B، تیمهای کیفیت به دادههای تست تازه برای هر اجرا نیاز دارند. مشکل رایجی که دیدهام: محیطهای تست با همان 5-6 CNPJ که مکرراً استفاده میشوند آلوده میشوند، که باعث پنهان شدن باگهایی میشود که فقط با الگوهای خاص رقم ظاهر میشوند.
تست یکپارچگی API: اگر با پردازشگرهای پرداخت برزیلی مانند PagSeguro یا Mercado Pago یکپارچه میشوید، محیطهای sandbox آنها اغلب نیازمند فرمتبندی صحیح CNPJ هستند. محاسبات باید صحیح باشند حتی اگر با پایگاه دادههای تولیدی کار نمیکنید.
پاکسازی دادههای وارداتی: CSVای با 10,000 رکورد شرکت برزیلی دریافت کردهاید. قبل از پردازش، باید مشخص کنید کدام CNPJها نامعتبر هستند. عبور آنها از اعتبارسنج، موارد دارای اشتباه املایی، کوتاهشدگی یا ارقام کنترل نادرست را علامتگذاری میکند - که ساعتها اشکالزدایی بعدی را صرفهجویی میکند.
اعتبارسنجی فرم در سمت مشتری: شناسایی CNPJهای نامعتبر قبل از ارسال فرم، تجربه کاربری را بهبود میبخشد. هیچکس نمیخواهد یک فرم ثبتنام 20 فیلدی را پر کند و سپس در زمان ارسال به دلیل جابجایی دو رقم در CNPJ خود با خطا مواجه شود.
ناشناسسازی داده برای تحلیل: هنگام آمادهسازی دادههای تولیدی برای اشتراکگذاری با تیمهای تحلیلی یا شرکای خارجی، باید CNPJهای واقعی را با CNPJهای معتبر اما ساختگی جایگزین کنید. این یکپارچگی مرجع در مجموعه داده شما را حفظ میکند در حالی که هویتهای کسبوکار واقعی را محافظت میکند.
درک الزامات برزیل: اگر به بازار برزیل گسترش مییابید، در قراردادها، صورتحسابها و مدارک حمل و نقل با الزامات CNPJ مواجه خواهید شد. داشتن ابزاری برای آزمایش فرمت کمک میکند تا درک کنید سیستمهای شما باید چه چیزی را مدیریت کنند.
مشخصات یکپارچگی شخص ثالث: هنگام بررسی مستندات API از ارائهدهندگان SaaS برزیلی، اغلب با فیلدهای CNPJ در نمونههای پیلود مواجه میشوید. توانایی تولید مقادیر تست معتبر به شما کمک میکند یکپارچگیها را سریعتر پروتوتایپ کنید.
اگر به اعتبارسنجی CNPJ در منطق برنامه خود نیاز دارید، این کتابخانهها الگوریتم بررسی رقم کنترل را پیادهسازی میکنند:
cpf-cnpj-validator (بیش از ۱۳۰ هزار دانلود هفتگی)، validator.js (پشتیبانی از اسناد برزیلی)validate-docbr (اعتبارسنجی CPF، CNPJ و سایر اسناد برزیلی)، python-cnpjrespect/validation (شامل قوانین CNPJ)، brazilianutilscaelum-stella (اعتبارسنجی جامع اسناد برزیلی)cpf_cnpjاین کتابخانهها معمولاً قالببندی، تجزیه و اعتبارسنجی برای چندین نوع سند برزیلی (CPF، CNPJ و غیره) را پوشش میدهند.
برای سیستمهای تولیدی که نیاز به تأیید ثبت تجاری دارند:
توجه: این سرویسها ثبت واقعی را بررسی میکنند، نه فقط اعتبار ریاضی. شما به مجوز مناسب نیاز خواهید داشت و باید هزینه API را برای استفاده تولیدی انتظار داشته باشید.
از این ابزار مرورگر استفاده کنید: زمانی که به اعتبارسنجی سریع بدون نصب وابستگیها، تولید دادههای آزمایشی برای نمایشها یا یادگیری نحوه اعتبارسنجی CNPJ نیاز دارید.
از کتابخانه استفاده کنید: زمانی که در حال ساخت برنامهای هستید که به اعتبارسنجی سمت مشتری یا سرور به عنوان بخشی از پردازش فرم نیاز دارد.
از API رسمی استفاده کنید: زمانی که نیاز دارید تأیید کنید 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}
291function 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}
241function 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این توابع اصلی را میتوان در سایر زبانهای برنامهنویسی با پیروی از همین منطق پیادهسازی کرد. در اینجا نمونههایی در پایتون و جاوا آمده است:
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
551import 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 جعلی برای مقاصد رسمی نه تنها غیراخلاقی است - بلکه طبق قانون برزیل غیرقانونی است و میتواند منجر به اتهامات کلاهبرداری شود.
تولید تصادفی پیامدهایی دارد: ابزار 12 رقم اول را به صورت تصادفی تولید میکند. CNPJهای واقعی صادر شده توسط اداره مالیاتی از الگوهای داخلی مرتبط با تاریخ ثبت، دفتر منطقهای و نوع کسب و کار پیروی میکنند. شمارههای تولید شده با این الگوها مطابقت نخواهند داشت، که سیستمهای اعتبارسنجی پیچیده ممکن است آنها را علامتگذاری کنند.
بدون اعتبارسنجی معنایی: یک فرمت CNPJ معتبر به معنای متن تجاری معتبر نیست. برای مثال، نهادهای دولتی محدودههای CNPJ خاصی دارند - این تولیدکننده ممکن است اتفاقاً یکی را ایجاد کند، اما بیمعنی خواهد بود.
مدیریت فرمت: اعتبارسنج فرمتهای ورودی مختلفی را میپذیرد (12345678000195، 12.345.678/0001-95)، اما برخی سیستمهای قدیمی فرمت دقیق را انتظار دارند. همیشه با الزامات یکپارچگی خاص خود آزمایش کنید.
تمام پردازشها در مرورگر شما انجام میشود. هیچ CNPJ تولید یا اعتبارسنجی شدهای به سرورها ارسال، ثبت یا ذخیره نمیشود. ابزار هیچ اطلاعات شخصی را درخواست، مدیریت یا پردازش نمیکند.
اعتبارسنجی بررسی میکند که آیا شماره از نظر ریاضی صحیح است - فرمت مناسب، ارقام کنترل صحیح، بدون الگوهای نامعتبر. این ابزار اعتبارسنجی را انجام میدهد.
تأیید بررسی میکند که آیا CNPJ در پایگاه داده Receita Federal با یک شرکت واقعی ثبت شده است. تأیید نیاز به استعلام از پایگاه داده دولتی دارد و چیزی نیست که این ابزار انجام دهد.
میتوانید یک CNPJ کاملاً معتبر داشته باشید که تأیید نشده است (مانند شمارههای آزمایشی که این ابزار تولید میکند)، یا یک CNPJ نامعتبر که متعلق به یک شرکت واقعی است (زیرا کسی هنگام ورود آن اشتباه کرده است).
بستگی دارد که منظور شما از "تست تولید" چیست. آنها برای محیطهای مرحلهبندی، بارگذاری و کنترل کیفیت قبل از راهاندازی مناسب هستند. اما اگر "تست تولید" به معنای تست با تراکنشهای واقعی، APIهای دولتی واقعی یا سیستمهای مالی واقعی باشد - در این صورت خیر، شما به CNPJهای ثبت شده واقعی نیاز دارید.
رویکرد امنتر: از CNPJهای تولید شده در محیطهای تست جداگانه استفاده کنید، سپس برای تست ادغامهای تولید به مجموعه کوچکی از CNPJهای شرکتهای تست واقعی (که کنترل میکنید) تغییر دهید.
اگرچه یک CNPJ با تمام ارقام یکسان میتواند از نظر ریاضی ارقام کنترل معتبر تولید کند، اما Receita Federal به صراحت این الگوها را حذف میکند. این یک قانون تجاری است، نه یک قانون ریاضی. همین امر در مورد الگوهای متوالی در برخی سیستمهای اعتبارسنجی نیز صدق میکند.
این مشابه با نحوه رد کردن رمزهای عبوری مانند "password123" توسط بسیاری از سیستمها است، حتی اگر آنها شرایط طول را برآورده کنند - آنها از نظر فنی معتبر هستند اما عملاً قابل قبول نیستند.
شرکتهای برزیلی که کسب و کار بینالمللی دارند گاهی اوقات کاراکترهای فرمتبندی را هنگام ورود CNPJها به سیستمهای خارجی حذف میکنند. منطق اعتبارسنجی شما باید قبل از بررسی کاراکترهای غیر عددی را حذف کند:
1const cleanCNPJ = input.replace(/\D/g, ''); // حذف همه چیز به جز ارقام
2ورودیهای 12.345.678/0001-95، 12345678000195 و 12 345 678 0001 95 را به عنوان ورودیهای معادل بپذیرید.
CPF (Cadastro de Pessoas Físicas) شناسه مالیاتی انفرادی برزیل است، در حالی که CNPJ برای کسب و کارها است. آنها از الگوریتمهای ارقام کنترل و طول متفاوتی استفاده میکنند (CPF 11 رقم دارد، CNPJ 14 رقم). اگر یک اپلیکیشن برزیلی میسازید که هر دو را مدیریت میکند، به توابع اعتبارسنجی جداگانهای نیاز خواهید داشت - اگرچه بسیاری از کتابخانهها هر دو فرمت را پشتیبانی میکنند.
یک الگوی رایج: به کاربران اجازه دهید CPF یا CNPJ را در یک فیلد وارد کنند، سپس نوع را بر اساس طول پس از حذف کاراکترهای فرمتبندی تشخیص دهید.
شرکتهای خارجی که در برزیل فعالیت میکنند نیز باید CNPJ را از Receita Federal دریافت کنند. CNPJهای آنها از همان فرمت و قوانین اعتبارسنجی شرکتهای داخلی پیروی میکنند. هیچ فرمت خاص CNPJ برای "شرکتهای خارجی" وجود ندارد.
با این حال، شرکتهای خارجی ممکن است نیازمند مدارک اضافی و فرآیندهای ثبت متفاوتی باشند - برای جزئیات دقیق با یک وکیل کسب و کار برزیلی مشورت کنید.
بله، Receita Federal دسترسی عمومی به تأیید اطلاعات اساسی CNPJ از طریق سرویس Consulta Pública CNPJ خود ارائه میدهد. میتوانید به صورت دستی CNPJها را جستجو کنید یا با مجوز مناسب، از APIهای آنها برای دسترسی برنامهنویسی استفاده کنید.
توجه کنید که استفاده گسترده نیاز به ثبت نام دارد و محدودیتهای نرخ برای جلوگیری از سوء استفاده وجود دارد.
CNPJها شناسههای دائمی هستند که با تغییر نام، آدرس یا ساختار مالکیت یک شرکت تغییر نمیکنند. با این حال، اگر یک شرکت تعطیل شود و بعداً مجدداً ثبت شود، ممکن است CNPJ جدیدی دریافت کند. شمارههای شعبه (بخش /XXXX) میتوانند هنگام باز شدن مکانهای جدید توسط شرکتها اضافه شوند، اما شماره 8 رقمی پایه ثابت میماند.
چه در حال ساخت یک پلتفرم تجارت الکترونیک برزیلی باشید، چه در حال آزمایش ادغام پرداخت با Mercado Pago، یا فقط نیاز به درک نحوه اعتبارسنجی CNPJ دارید، این ابزار دسترسی فوری به قابلیتهای تولید و اعتبارسنجی را فراهم میکند.
بدون نصب، بدون کلید API، بدون راهاندازی پیچیده. فقط مرورگر خود را باز کنید و شروع به کار با شناسههای تجاری معتبر برزیلی کنید.
کشف ابزارهای بیشتری که ممکن است برای جریان کاری شما مفید باشند