با این ابزار ساده که برای توسعهدهندگان و تسترهایی که با شناسههای تجاری برزیلی کار میکنند طراحی شده است، شمارههای 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) یک شماره شناسایی ۱۴ رقمی است که به کسبوکارها و نهادهای قانونی توسط اداره مالیات فدرال برزیل اختصاص داده میشود. این شماره معادل برزیلی شماره ثبت شرکت یا شناسه مالیاتی است. هر کسبوکاری که بهطور قانونی در برزیل فعالیت میکند باید یک CNPJ داشته باشد که برای:
CNPJ یک شناسه ضروری در اکوسیستم کسبوکار برزیل است و در اسناد رسمی، قراردادها و سوابق مالی ظاهر میشود.
یک CNPJ برزیلی شامل ۱۴ رقم است که معمولاً بهصورت زیر فرمتبندی میشود: 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 در این ابزار با استفاده از JavaScript پیادهسازی شده است، که آن را سریع و قادر به اجرا بهطور کامل در مرورگر شما بدون ارسال دادههای شما به سرور میسازد. در اینجا نحوه کارکرد توابع اصلی آورده شده است:
1function generateCNPJ() {
2 // تولید ۱۲ رقم اول بهطور تصادفی
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 # تولید ۱۲ رقم اول بهطور تصادفی
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 // تولید ۱۲ رقم اول بهطور تصادفی
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هایی که همه ارقام آنها یکسان هستند (مانند ۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱) بهطور خودکار نامعتبر در نظر گرفته میشوند، حتی اگر از نظر ریاضی الگوریتم را پاس کنند. این یک قاعده است که توسط اداره مالیات فدرال برزیل تعیین شده است.
خیر. تمام پردازشها در مرورگر شما انجام میشود و ما هیچیک از CNPJهایی که تولید یا اعتبارسنجی میکنید را ذخیره نمیکنیم.
نسخه فعلی ابزار یک CNPJ را در یک زمان تولید میکند. برای تولید انبوه، ممکن است بخواهید یکی از کتابخانههای ذکر شده در بخش گزینههای دیگر را در نظر بگیرید.
این فرمت رسمی است که توسط مقامات برزیلی الزامی است. گروهبندی خاص به شناسایی اجزای مختلف CNPJ، مانند شماره پایه و شناسه شعبه کمک میکند.
شما میتوانید الگوریتم اعتبارسنجی را در زبان برنامهنویسی مورد نظر خود با استفاده از مثالهای کد ارائهشده در بخش پیادهسازی فنی پیادهسازی کنید یا از یکی از کتابخانههای ذکر شده در بخش گزینههای دیگر استفاده کنید.
بله. نهادهای دولتی در برزیل الگوهای خاص CNPJ دارند. بهعنوان مثال، نهادهای دولتی فدرال اغلب با ارقام خاصی شروع میشوند. تولیدکننده ما CNPJهای تصادفی تولید میکند و بهطور خاص CNPJهای نهادهای دولتی را تولید نمیکند.
۱. اداره مالیات فدرال برزیل (Receita Federal do Brasil) - وبسایت رسمی
۲. "CNPJ - Cadastro Nacional da Pessoa Jurídica" - ویکیپدیا
۳. کد مدنی برزیل (قانون شماره ۱۰۴۰۶/۲۰۰۲) - چارچوب قانونی برای نهادهای کسبوکار در برزیل
۴. دستورالعمل ثبتنام کسبوکار برزیلی (IN RFB شماره ۱۸۶۳/۲۰۱۸) - مقررات مربوط به ثبتنام CNPJ
ابزار تولید و اعتبارسنجی CNPJ برزیلی ما کار با این شمارههای شناسایی را ساده و کارآمد میکند. چه شما در حال آزمایش برنامهها، آمادهسازی دادههای نمونه یا اعتبارسنجی CNPJهای موجود باشید، این ابزار یک راهحل ساده بدون پیچیدگیهای ادغام API یا پیکربندیهای پیشرفته ارائه میدهد.
همین حالا اولین CNPJ معتبر خود را تولید کنید یا یک CNPJ موجود را با استفاده از رابط کاربری ساده ما اعتبارسنجی کنید!
کشف ابزارهای بیشتری که ممکن است برای جریان کاری شما مفید باشند