सामग्री पर जाएं

सीयूआईटी/सीयूआईएल जनरेटर और वैलिडेटर | अर्जेंटीना कर पहचान उपकरण

वैध अर्जेंटीना सीयूआईटी/सीयूआईएल परीक्षण संख्याएं उत्पन्न करें या मौजूदा संख्याओं को मान्य करें। डेवलपर्स के लिए कर पहचान और पेरोल प्रणालियों को एएफआईपी-अनुपालन सत्यापन के साथ मुफ्त ऑनलाइन उपकरण।

CUIT/CUIL जनरेटर

8 अंकों का DNI नंबर दर्ज करें या यादृच्छिक जनरेटर का उपयोग करें

उत्पन्न CUIT/CUIL
20-54344468-6

यादृच्छिक रूप से उत्पन्न DNI का उपयोग कर रहा है

लोडिंग कैलकुलेटर...
📚

दस्तावेज़ीकरण

अर्जेंटीना CUIT/CUIL जनरेटर और वैलिडेटर

परिचय

अर्जेंटीना के कर और श्रम प्रणाली में, आप लगातार दो महत्वपूर्ण पहचानकर्ताओं से मिलेंगे: CUIT (क्लावे यूनिका डी आइडेंटिफिकेशन ट्रिब्यूटेरिया) और CUIL (क्लावे यूनिका डी आइडेंटिफिकेशन लेबोरल)। CUIT को व्यवसायों और करदाताओं के लिए कर पहचान के रूप में देखें, जबकि CUIL सामाजिक सुरक्षा प्रणाली में श्रमिकों की पहचान करता है। दोनों 11-अंकों के समान प्रारूप और सत्यापन एल्गोरिदम का उपयोग करते हैं, जो इन संख्याओं को संभालने वाले एप्लिकेशन का परीक्षण करने में विशेष रूप से महत्वपूर्ण बनाता है।

अर्जेंटीना के बाजार के लिए सॉफ्टवेयर विकसित करते समय, आपको वैध परीक्षण डेटा की आवश्यकता होती है। यही वह उपकरण है जो काम आता है। आप वास्तविक व्यक्तिगत जानकारी का उपयोग किए बिना गणितीय रूप से सही CUIT/CUIL संख्याएं उत्पन्न कर सकते हैं, या मौजूदा संख्याओं को सत्यापित कर सकते हैं ताकि यह सुनिश्चित हो सके कि वे AFIP के आधिकारिक एल्गोरिदम के अनुरूप हैं। विशेष रूप से उपयोगी बात यह है कि यह उपकरण उत्पादन पक्ष (मांग पर वैध संख्याएं बनाना) और सत्यापन पक्ष (प्रारूप त्रुटियों, अमान्य प्रकार कोड और गलत सत्यापन अंकों को पकड़ना) दोनों को संभालता है।

CUIT/CUIL संरचना और गणना

प्रारूप को समझना

एक वैध CUIT/CUIL संख्या 11 अंकों से बनी होती है जिसे आमतौर पर XX-XXXXXXXX-X प्रारूप में दर्शाया जाता है। यहाँ यह कैसे टूटता है:

  1. टाइप कोड (पहले 2 अंक): इकाई के प्रकार की पहचान करता है

    • 20, 23, 24: पुरुष व्यक्ति (CUIL)
    • 27: महिला व्यक्ति (CUIL)
    • 30, 33, 34: कंपनियाँ और संगठन (CUIT)
  2. DNI संख्या (बीच के 8 अंक): व्यक्तियों के लिए, यह उनका राष्ट्रीय पहचान दस्तावेज़ संख्या (DNI) है। एक सामान्य चूक: यदि वास्तविक DNI में 8 से कम अंक हैं, तो आपको इसे अग्रणी शून्य से भरना होगा। उदाहरण के लिए, DNI 1234567 CUIT/CUIL में 01234567 बन जाता है। कंपनियों को एक विशिष्ट आवंटित संख्या मिलती है।

  3. सत्यापन अंक (अंतिम अंक): यह जाँच अंक पूरी संख्या को भारित एल्गोरिदम का उपयोग करके मान्य करता है। यदि यह अंक गणना से मेल नहीं खाता है, तो पूरा CUIT/CUIL अमान्य है—जो अक्सर डेवलपर्स को परीक्षण डेटा बनाते समय चकित कर देता है।

सत्यापन अंक गणना

सत्यापन अंक एक मॉड्यूलो-11 भारित एल्गोरिदम का उपयोग करता है। यह कैसे काम करता है:

  1. CUIT/CUIL के पहले 10 अंक लें (टाइप कोड + DNI)
  2. प्रत्येक अंक को उसके संबंधित भार से गुणा करें: 5, 4, 3, 2, 7, 6, 5, 4, 3, 2
  3. सभी उत्पादों का योग करें
  4. गणना करें: 11 माइनस (योग मॉड्यूलो 11)
  5. किनारे के मामलों को संभालें: यदि परिणाम 11 है, तो 0 का उपयोग करें; यदि 10 है, तो 9 का उपयोग करें

लोगों को सबसे अधिक परेशान करने वाली चीज़ें चरण 5 में किनारे के मामले हैं। जब परीक्षण कर रहे हों, तो आपको कभी-कभी 10 या 11 का परिणाम मिल सकता है, और इन्हें 9 और 0 पर मैप करना भूल जाने से सत्यापन विफलताएँ होती हैं जिन्हें डीबग करना कठिन हो सकता है यदि आप इस नियम से अवगत नहीं हैं।

गणितीय रूप से, इसे इस प्रकार व्यक्त किया जा सकता है:

VD=11((i=110di×wi)mod11)VD = 11 - ((\sum_{i=1}^{10} d_i \times w_i) \bmod 11)

जहाँ:

  • VDVD सत्यापन अंक है
  • did_i पहले 10 अंकों का ii-वाँ अंक है
  • wiw_i अनुक्रम [5, 4, 3, 2, 7, 6, 5, 4, 3, 2] से संबंधित भार है
  • विशेष मामले: यदि VD=11VD = 11 तो VD=0VD = 0, यदि VD=10VD = 10 तो VD=9VD = 9

चरण-दर-चरण गाइड

जेनरेटर का उपयोग

  1. टूल इंटरफ़ेस के शीर्ष पर "जेनरेटर" टैब का चयन करें

  2. ड्रॉपडाउन मेनू से एक टाइप कोड चुनें:

    • 20: पुरुष (CUIL)
    • 23: व्यवसाय (CUIT)
    • 24: अस्थायी व्यवसाय (CUIT)
    • 27: महिला (CUIL)
    • 30: निगम (CUIT)
    • 33: नागरिक संघ (CUIT)
    • 34: फाउंडेशन (CUIT)
  3. DNI नंबर दर्ज करें (वैकल्पिक):

    • प्रदान किए गए फ़ील्ड में 8-अंकों का DNI नंबर दर्ज करें
    • यदि खाली छोड़ दिया जाता है, तो टूल एक यादृच्छिक रूप से उत्पन्न DNI का उपयोग करेगा
    • यदि आप 8 से कम अंक दर्ज करते हैं, तो सिस्टम अग्र शून्य के साथ पैड करेगा
  4. यादृच्छिक DNI उत्पन्न करें (वैकल्पिक):

    • एक यादृच्छिक 8-अंकों का DNI नंबर उत्पन्न करने के लिए "यादृच्छिक" बटन पर क्लिक करें
  5. उत्पन्न CUIT/CUIL देखें:

    • टूल स्वचालित रूप से आपके इनपुट के आधार पर एक वैध CUIT/CUIL प्रदर्शित करता है
    • प्रारूप XX-XXXXXXXX-X होगा सही सत्यापन अंक के साथ
  6. परिणाम कॉपी करें:

    • अपने क्लिपबोर्ड पर उत्पन्न CUIT/CUIL कॉपी करने के लिए कॉपी आइकन पर क्लिक करें
    • सफलतापूर्वक कॉपी किए जाने पर एक पुष्टिकरण संदेश दिखाई देगा

वैलिडेटर का उपयोग

  1. टूल इंटरफ़ेस के शीर्ष पर "वैलिडेटर" टैब का चयन करें

  2. सत्यापन के लिए CUIT/CUIL दर्ज करें:

    • XX-XXXXXXXX-X प्रारूप में CUIT/CUIL दर्ज करें
    • टूल स्वचालित रूप से आपके इनपुट को हाइफ़न के साथ स्वरूपित करेगा
    • आप बिना हाइफ़न के भी नंबर दर्ज कर सकते हैं (XXXXXXXXXXX)
  3. "सत्यापित करें" बटन पर क्लिक करें:

    • टूल प्रारूप, टाइप कोड और सत्यापन अंक की जाँच करेगा
  4. सत्यापन परिणाम देखें:

    • वैध CUIT/CUIL नंबरों के लिए, एक हरा सफलता संदेश दिखाई देगा
    • अवैध नंबरों के लिए, एक लाल त्रुटि संदेश कारण बताएगा:
      • अवैध प्रारूप (XX-XXXXXXXX-X होना चाहिए)
      • अवैध टाइप कोड (20, 23, 24, 27, 30, 33, 34 में से एक होना चाहिए)
      • अवैध सत्यापन अंक
  5. अतिरिक्त जानकारी:

    • वैध नंबरों के लिए, टूल घटकों का विवरण प्रदर्शित करता है:
      • टाइप कोड और उसका अर्थ
      • DNI नंबर
      • सत्यापन अंक

सामान्य गलतियाँ और सर्वोत्तम प्रथाएँ

जब आप अपने एप्लिकेशन में CUIT/CUIL सत्यापन के साथ काम कर रहे हों, तो इन बार-बार होने वाली समस्याओं पर ध्यान दें:

शून्य-पैडिंग समस्याएँ: सबसे आम बग जिससे मैंने सामना किया है, वह है अग्रणी शून्य वाले DNI नंबर। जब कोई DNI "1234567" दर्ज करता है, तो आपके कोड को इसे CUIT/CUIL निर्माण के लिए "01234567" के रूप में संभालना चाहिए। कई कार्यान्वयन प्रोसेसिंग के लिए पूर्णांक में परिवर्तित करते हैं, जो अग्रणी शून्य को हटा देता है। इसके बजाय उचित पैडिंग के साथ स्ट्रिंग संचालन का उपयोग करें।

टाइप कोड भ्रम: सभी दो-अंकीय संख्याएँ वैध टाइप कोड नहीं होतीं। केवल 20, 23, 24, 27, 30, 33, 34 काम करते हैं। मैंने ऐसी प्रणालियाँ देखी हैं जो किसी भी दो-अंकीय उपसर्ग को स्वीकार करती हैं, जिससे "वैध दिखने वाले" नंबर जैसे 21-12345678-X AFIP सत्यापन में विफल हो जाते हैं। सत्यापन अंक की गणना करने से पहले हमेशा टाइप कोड की पुष्टि करें।

लिंग धारणाएँ: टाइप कोड 20 (पुरुष) और 27 (महिला) आपस में बदलने योग्य नहीं हैं। यदि आप जनसांख्यिकीय डेटा के आधार पर CUILs स्वचालित रूप से उत्पन्न कर रहे हैं, तो सुनिश्चित करें कि आपका टाइप कोड RENAPER (अर्जेंटीना के राष्ट्रीय रजिस्ट्री) में पंजीकृत वास्तविक लिंग से मेल खाता है। असंगतताएँ सरकारी सेवाओं का उपयोग करते समय अस्वीकृति का कारण बनती हैं।

हाइफ़न संचालन: कुछ कार्यान्वयन हाइफ़न की आवश्यकता रखते हैं जबकि अन्य उन्हें अस्वीकार करते हैं। सर्वोत्तम प्रथा: इनपुट फ़ील्ड में दोनों प्रारूप स्वीकार करें (हाइफ़न के साथ या बिना), सत्यापन से पहले हाइफ़न हटाएँ, डेटाबेस में बिना हाइफ़न वाला संस्करण संग्रहीत करें, और केवल प्रदर्शन उद्देश्यों के लिए हाइफ़न जोड़ें।

सत्यापन की कमी: एल्गोरिदम सत्यापन प्रारूप त्रुटियों को पकड़ता है लेकिन यह पुष्टि नहीं करता कि CUIT/CUIL पंजीकृत है। उत्पादन में, पहले प्रारूप की पुष्टि करें (तेज़), फिर AFIP के डेटाबेस के खिलाफ सत्यापित करें (धीमा लेकिन अधिकृत)। यह दो-चरणीय दृष्टिकोण टाइपो को तुरंत पकड़ता है जबकि यह सुनिश्चित करता है कि संख्या वास्तविक है।

किनारे के मामले का परीक्षण: हमेशा सत्यापन अंकों के साथ परीक्षण करें 0 और 9—ये एल्गोरिदम में विशेष मामलों से परिणाम देते हैं। शून्य से शुरू होने वाले DNI का भी परीक्षण करें ताकि यह सुनिश्चित हो सके कि आपकी पैडिंग तर्क सही काम कर रहा है।

उपयोग के मामले और व्यावहारिक अनुप्रयोग

विकास और परीक्षण

सॉफ्टवेयर विकास: अर्जेंटीना के बाजार के लिए एप्लिकेशन बनाते समय, आपको ऐसा टेस्ट डेटा चाहिए जो वैधीकरण पास करे बिना वास्तविक उपयोगकर्ता की जानकारी का उपयोग किए। यहाँ यह महत्वपूर्ण हो जाता है:

  • ई-कॉमर्स प्लेटफॉर्म: भुगतान प्रोसेसर और बीजक प्रणालियों को वैध CUIT/CUIL नंबर की आवश्यकता होती है। लोड टेस्टिंग के दौरान, आपको हजारों वैध नंबरों की आवश्यकता हो सकती है ताकि वास्तविक उपयोगकर्ता पंजीकरण का अनुकरण किया जा सके।
  • लेखांकन सॉफ्टवेयर: कर रिपोर्टिंग मॉड्यूल AFIP में जमा करने से पहले CUIT/CUIL प्रारूप की जाँच करते हैं। इन वैधीकरण नियमों का परीक्षण करने के लिए ऐसे नंबरों की आवश्यकता होती है जो चेक अंक एल्गोरिदम को पास करते हों।
  • मानव संसाधन प्रबंधन प्रणालियाँ: वेतन प्रसंस्करण और सामाजिक सुरक्षा योगदान वैध CUIL नंबरों पर निर्भर करते हैं। एक सामान्य परिदृश्य: आप कर्मचारी ऑनबोर्डिंग प्रवाह का परीक्षण कर रहे हैं और यह सत्यापित करना चाहते हैं कि अवैध CUIL उचित त्रुटि संदेश ट्रिगर करते हैं।
  • बैंकिंग एप्लिकेशन: KYC (ग्राहक को जानें) प्रक्रियाएँ खाता खोलने के हिस्से के रूप में CUIT/CUIL को वैध करती हैं। मेरे अनुभव में, टाइप कोड बेमेल जैसे किनारे के मामले अक्सर एकीकरण परीक्षण के दौरान सामने आते हैं।

डेटाबेस आबादी: जब टेस्ट डेटाबेस को बीज देते हैं, तो एल्गोरिथमिक रूप से वैध CUIT/CUIL नंबरों का उपयोग करना यह सुनिश्चित करता है कि आपके डेटाबेस प्रतिबंध और ट्रिगर अपेक्षित रूप से काम करते हैं। यह विशेष रूप से महत्वपूर्ण है जब डेटा माइग्रेशन स्क्रिप्ट या ETL प्रक्रियाओं का परीक्षण किया जा रहा हो जो पहचान संख्याओं को वैध करती हैं।

फॉर्म वैधीकरण परीक्षण: हैप्पी पाथ और त्रुटि स्थितियों दोनों का परीक्षण करें। सफल प्रस्तुति की पुष्टि करने के लिए वैध नंबर उत्पन्न करें, फिर सत्यापन अंक को संशोधित करें ताकि यह सुनिश्चित हो सके कि आपका फ्रंटेंड और बैकेंड वैधीकरण त्रुटि को डेटाबेस तक पहुँचने से रोकता है।

API परीक्षण: एकीकरण परीक्षणों में अनुरोध पेलोड में वैध CUIT/CUIL नंबरों का उपयोग किया जाना चाहिए। यह गलत नकारात्मक को रोकता है जहाँ परीक्षण असफल होते हैं अवैध टेस्ट डेटा के कारण बजाय आपकी API तर्क में वास्तविक बग के।

QA स्वचालन: पैरामीटराइज्ड परीक्षणों को गतिशील CUIT/CUIL उत्पादन से लाभ होता है। कठोर टेस्ट मूल्यों के बजाय जो परीक्षण चलाने में टकरा सकते हैं, प्रत्येक परीक्षण निष्पादन के लिए ताजा वैध नंबर उत्पन्न करें।

शैक्षणिक उद्देश्य

(बाकी अनुवाद जारी रखा जाएगा...)

CUIT/CUIL प्रणाली का इतिहास

अर्जेंटीना में CUIT/CUIL पहचान प्रणाली अपनी शुरुआत से लेकर अब तक काफी विकसित हुई है:

उत्पत्ति और कार्यान्वयन

CUIT (क्लावे यूनिका डी इडेंटिफिकेशन ट्रिब्यूटेरिया) को पहली बार 1970 के दशक में अर्जेंटीना में कर संग्रह प्रणाली को आधुनिक बनाने के प्रयासों के हिस्से के रूप में पेश किया गया था। सार्वजनिक राजस्व के संघीय प्रशासन (AFIP) ने करदाताओं को अधिक कुशलता से ट्रैक करने और कर चोरी को कम करने के लिए इस अद्वितीय पहचानकर्ता को लागू किया।

CUIL (क्लावे यूनिका डी इडेंटिफिकेशन लेबोरल) को बाद में विशेष रूप से सामाजिक सुरक्षा प्रणाली में श्रमिकों की पहचान करने के लिए पेश किया गया, जो कर पहचान और श्रम पहचान के बीच एक अंतर बनाता है, जबकि एक सुसंगत प्रारूप को बनाए रखता है।

विकास और डिजिटलीकरण

1990 के दशक में, जब अर्जेंटीना महत्वपूर्ण आर्थिक सुधारों से गुजर रहा था, CUIT/CUIL प्रणाली आर्थिक गतिविधि को ट्रैक करने में अधिक महत्वपूर्ण हो गई। प्रणाली को और अधिक डिजिटल बनाया गया, और ऑनलाइन सत्यापन प्रणालियों को लागू किया गया।

2000 के शुरुआती वर्षों में CUIT/CUIL प्रणाली को विभिन्न डिजिटल सरकारी सेवाओं के साथ एकीकृत किया गया, जिससे यह अर्जेंटीना की ई-सरकार पहल का एक महत्वपूर्ण घटक बन गया। इस अवधि में सत्यापन एल्गोरिदम और प्रारूप का मानकीकरण भी हुआ जो आज भी उपयोग में है।

हालिया विकास

हाल के वर्षों में, AFIP ने CUIT/CUIL संख्याओं के लिए सुरक्षा और सत्यापन प्रक्रियाओं को बेहतर बनाया है, अधिक परिष्कृत सत्यापन प्रणालियों को लागू किया है और उन्हें अन्य सरकारी डेटाबेस के साथ एकीकृत किया है। यह प्रणाली अब अर्जेंटीना के कर चोरी से लड़ने और अर्थव्यवस्था को औपचारिक बनाने के प्रयासों में महत्वपूर्ण भूमिका निभाती है।

आज, CUIT/CUIL का उपयोग न केवल कर और रोजगार उद्देश्यों के लिए किया जाता है, बल्कि बैंकिंग, संपत्ति लेनदेन, उपयोगिता सेवाओं और ऑनलाइन खरीदारी सहित विभिन्न गतिविधियों के लिए भी किया जाता है, जिससे यह अर्जेंटीना में व्यक्तियों और व्यवसायों के लिए एक आवश्यक पहचानकर्ता बन गया है।

कार्यान्वयन विचार

अपने स्वयं के सिस्टम में CUIT/CUIL सत्यापन लागू करते समय, इन तकनीकी पहलुओं पर विचार करें:

एल्गोरिदम स्थिरता: वर्तमान CUIT/CUIL सत्यापन एल्गोरिदम 1990 के दशक में मानकीकरण के बाद से अपरिवर्तित रहा है। AFIP के तकनीकी दस्तावेज के अनुसार, मॉड्यूलो-11 भारित चेक अंक दृष्टिकोण को रेजोल्यूशन जनरल 2854/2010 और बाद के नियमों में कोडीफाइड किया गया है। यह स्थिरता का अर्थ है कि कार्यान्वयन को शायद ही अपडेट की आवश्यकता होती है, लेकिन आपको किसी भी नियामक परिवर्तन के लिए AFIP की घोषणाओं पर नज़र रखनी चाहिए।

प्रदर्शन अनुकूलन: सत्यापन एल्गोरिदम गणनात्मक रूप से सस्ता है - केवल 10 गुणा, एक जोड़ और एक मॉड्यूलो ऑपरेशन। प्रति सेकंड हजारों सत्यापन प्रोसेस करने वाली उच्च-थ्रूपुट प्रणालियों के लिए, बॉटलनेक आमतौर पर AFIP के डेटाबेस के खिलाफ सत्यापन करते समय नेटवर्क विलंबता होता है, एल्गोरिदम स्वयं नहीं। ताजगी और प्रदर्शन के बीच संतुलन बनाने के लिए उपयुक्त TTL के साथ AFIP सत्यापन परिणामों को कैश करने पर विचार करें (आमतौर पर 24 घंटे)।

वर्ण एन्कोडिंग: बाहरी स्रोतों (PDF, स्कैन किए गए दस्तावेज, वेब स्क्रेपिंग) से CUIT/CUIL डेटा प्रोसेस करते समय, वर्ण एन्कोडिंग समस्याओं पर ध्यान दें। हाइफ़न मानक हाइफ़न-माइनस (U+002D) के बजाय एम डैश (U+2014), एन डैश (U+2013), या माइनस साइन (U+2212) के रूप में दिखाई दे सकता है। गलत नकारात्मक को रोकने के लिए सत्यापन से पहले इन्हें सामान्य करें।

अंतर्राष्ट्रीयकरण: यदि आपका एप्लिकेशन कई लैटिन अमेरिकी बाजारों को सेवा देता है, तो ध्यान दें कि अर्जेंटीना का CUIT/CUIL विशिष्ट भारों के साथ मॉड्यूलो-11 का उपयोग करता है, जबकि चिली का RUT अलग भारों के साथ मॉड्यूलो-11 का उपयोग करता है, और ब्राजील का CPF/CNPJ एक अलग पैटर्न के साथ मॉड्यूलो-11 का उपयोग करता है। यह मत मानो कि एल्गोरिदम समान हैं - प्रत्येक देश की प्रणाली के अलग-अलग नियम हैं। चेक अंक एल्गोरिदम की व्यापक समझ के लिए, ISO/IEC 7064 मानक देखें जो विभिन्न मॉड्यूलो-आधारित सत्यापन योजनाओं को औपचारिक करता है।

डेटाबेस भंडारण: CUIT/CUIL संख्याओं को बिना हाइफ़न के फिक्स्ड-लंबाई CHAR(11) के रूप में या BIGINT के रूप में संग्रहीत करें यदि आपका डेटाबेस बिना सटीकता हानि के 11 अंकों की पूर्णांक संख्याओं का समर्थन करता है। भ्रष्ट डेटा के खिलाफ सुरक्षा जाल के रूप में डेटाबेस स्तर पर सत्यापन अंक की जाँच करने वाली एक जाँच बाधा जोड़ें। कुशल खोज के लिए इस फ़ील्ड पर सूचकांक बनाएं जब उपयोगकर्ता CUIT/CUIL द्वारा खोजते हैं।

कोड उदाहरण

पाइथन

1def calculate_verification_digit(type_code, dni):
2    # स्ट्रिंग में बदलें और DNI को 8 अंकों के साथ अग्रणी शून्य सुनिश्चित करें
3    type_code_str = str(type_code)
4    dni_str = str(dni).zfill(8)
5    
6    # टाइप कोड और DNI को जोड़ें
7    digits = type_code_str + dni_str
8    
9    # प्रत्येक स्थान के लिए वजन
10    weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
11    
12    # उत्पादों का योग गणना करें
13    sum_products = sum(int(digits[i]) * weights[i] for i in range(10))
14    
15    # सत्यापन अंक की गणना करें
16    verification_digit = 11 - (sum_products % 11)
17    
18    # विशेष मामले
19    if verification_digit == 11:
20        verification_digit = 0
21    elif verification_digit == 10:
22        verification_digit = 9
23    
24    return verification_digit
25
26def generate_cuit_cuil(type_code, dni=None):
27    import random
28    
29    # वैध टाइप कोड
30    valid_type_codes = [20, 23, 24, 27, 30, 33, 34]
31    
32    if type_code not in valid_type_codes:
33        raise ValueError(f"अवैध टाइप कोड। निम्न में से एक होना चाहिए: {valid_type_codes}")
34    
35    # यदि प्रदान नहीं किया गया है तो यादृच्छिक DNI उत्पन्न करें
36    if dni is None:
37        dni = random.randint(10000000, 99999999)
38    
39    # सत्यापन अंक की गणना करें
40    verification_digit = calculate_verification_digit(type_code, dni)
41    
42    # CUIT/CUIL स्वरूपित करें
43    return f"{type_code}-{str(dni).zfill(8)}-{verification_digit}"
44
45def validate_cuit_cuil(cuit_cuil):
46    # यदि मौजूद हों तो हाइफ़न हटाएं
47    cuit_cuil_clean = cuit_cuil.replace("-", "")
48    
49    # मूल स्वरूप की जाँच करें
50    if not cuit_cuil_clean.isdigit() or len(cuit_cuil_clean) != 11:
51        return False, "अवैध स्वरूप"
52    
53    # भाग निकालें
54    type_code = int(cuit_cuil_clean[0:2])
55    dni = int(cuit_cuil_clean[2:10])
56    verification_digit = int(cuit_cuil_clean[10])
57    
58    # टाइप कोड की पुष्टि करें
59    valid_type_codes = [20, 23, 24, 27, 30, 33, 34]
60    if type_code not in valid_type_codes:
61        return False, "अवैध टाइप कोड"
62    
63    # सत्यापन अंक की गणना और तुलना करें
64    calculated_digit = calculate_verification_digit(type_code, dni)
65    if calculated_digit != verification_digit:
66        return False, "अवैध सत्यापन अंक"
67    
68    return True, "वैध CUIT/CUIL"
69
70# उपयोग उदाहरण
71print(generate_cuit_cuil(20, 12345678))  # विशिष्ट DNI के लिए उत्पन्न करें
72print(generate_cuit_cuil(27))  # यादृच्छिक DNI के साथ उत्पन्न करें
73print(validate_cuit_cuil("20-12345678-9"))  # एक CUIT/CUIL की पुष्टि करें
74

जावास्क्रिप्ट

1function calculateVerificationDigit(typeCode, dni) {
2  // स्ट्रिंग में बदलें और DNI को 8 अंकों के साथ अग्रणी शून्य सुनिश्चित करें
3  const typeCodeStr = typeCode.toString();
4  const dniStr = dni.toString().padStart(8, '0');
5  
6  // टाइप कोड और DNI को जोड़ें
7  const digits = typeCodeStr + dniStr;
8  
9  // प्रत्येक स्थान के लिए वजन
10  const weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
11  
12  // उत्पादों का योग गणना करें
13  let sumProducts = 0;
14  for (let i = 0; i < 10; i++) {
15    sumProducts += parseInt(digits[i]) * weights[i];
16  }
17  
18  // सत्यापन अंक की गणना करें
19  let verificationDigit = 11 - (sumProducts % 11);
20  
21  // विशेष मामले
22  if (verificationDigit === 11) {
23    verificationDigit = 0;
24  } else if (verificationDigit === 10) {
25    verificationDigit = 9;
26  }
27  
28  return verificationDigit;
29}
30
31function generateCuitCuil(typeCode, dni) {
32  // वैध टाइप कोड
33  const validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
34  
35  if (!validTypeCodes.includes(typeCode)) {
36    throw new Error(`अवैध टाइप कोड। निम्न में से एक होना चाहिए: ${validTypeCodes.join(', ')}`);
37  }
38  
39  // यदि प्रदान नहीं किया गया है तो यादृच्छिक DNI उत्पन्न करें
40  if (dni === undefined) {
41    dni = Math.floor(Math.random() * 90000000) + 10000000;
42  }
43  
44  // सत्यापन अंक की गणना करें
45  const verificationDigit = calculateVerificationDigit(typeCode, dni);
46  
47  // CUIT/CUIL स्वरूपित करें
48  return `${typeCode}-${dni.toString().padStart(8, '0')}-${verificationDigit}`;
49}
50
51function validateCuitCuil(cuitCuil) {
52  // यदि मौजूद हों तो हाइफ़न हटाएं
53  const cuitCuilClean = cuitCuil.replace(/-/g, '');
54  
55  // मूल स्वरूप की जाँच करें
56  if (!/^\d{11}$/.test(cuitCuilClean)) {
57    return { isValid: false, errorMessage: 'अवैध स्वरूप' };
58  }
59  
60  // भाग निकालें
61  const typeCode = parseInt(cuitCuilClean.substring(0, 2));
62  const dni = parseInt(cuitCuilClean.substring(2, 10));
63  const verificationDigit = parseInt(cuitCuilClean.substring(10, 11));
64  
65  // टाइप कोड की पुष्टि करें
66  const validTypeCodes = [20, 23, 24, 27, 30, 33, 34];
67  if (!validTypeCodes.includes(typeCode)) {
68    return { isValid: false, errorMessage: 'अवैध टाइप कोड' };
69  }
70  
71  // सत्यापन अंक की गणना और तुलना करें
72  const calculatedDigit = calculateVerificationDigit(typeCode, dni);
73  if (calculatedDigit !== verificationDigit) {
74    return { isValid: false, errorMessage: 'अवैध सत्यापन अंक' };
75  }
76  
77  return { isValid: true };
78}
79
80// उपयोग उदाहरण
81console.log(generateCuitCuil(20, 12345678)); // विशिष्ट DNI के लिए उत्पन्न करें
82console.log(generateCuitCuil(27)); // यादृच्छिक DNI के साथ उत्पन्न करें
83console.log(validateCuitCuil("20-12345678-9")); // एक CUIT/CUIL की पुष्टि करें
84

जावा

1import java.util.Arrays;
2import java.util.List;
3import java.util.Random;
4
5public class CuitCuilUtils {
6    private static final List<Integer> VALID_TYPE_CODES = Arrays.asList(20, 23, 24, 27, 30, 33, 34);
7    private static final int[] WEIGHTS = {5, 4, 3, 2, 7, 6, 5, 4, 3, 2};
8    
9    public static int calculateVerificationDigit(int typeCode, int dni) {
10        // स्ट्रिंग में बदलें और DNI को 8 अंकों के साथ अग्रणी शून्य सुनिश्चित करें
11        String typeCodeStr = String.valueOf(typeCode);
12        String dniStr = String.format("%08d", dni);
13        
14        // टाइप कोड और DNI को जोड़ें
15        String digits = typeCodeStr + dniStr;
16        
17        // उत्पादों का योग गणना करें
18        int sumProducts = 0;
19        for (int i = 0; i < 10; i++) {
20            sumProducts += Character.getNumericValue(digits.charAt(i)) * WEIGHTS[i];
21        }
22        
23        // सत्यापन अंक की गणना करें
24        int verificationDigit = 11 - (sumProducts % 11);
25        
26        // विशेष मामले
27        if (verificationDigit == 11) {
28            verificationDigit = 0;
29        } else if (verificationDigit == 10) {
30            verificationDigit = 9;
31        }
32        
33        return verificationDigit;
34    }
35    
36    public static String generateCuitCuil(int typeCode, Integer dni) {
37        if (!VALID_TYPE_CODES.contains(typeCode)) {
38            throw new IllegalArgumentException("अवैध टाइप कोड। निम्न में से एक होना चाहिए: " + VALID_TYPE_CODES);
39        }
40        
41        // यदि प्रदान नहीं किया गया है तो यादृच्छिक DNI उत्पन्न करें
42        if (dni == null) {
43            Random random = new Random();
44            dni = 10000000 + random.nextInt(90000000);
45        }
46        
47        // सत्यापन अंक की गणना करें
48        int verificationDigit = calculateVerificationDigit(typeCode, dni);
49        
50        // CUIT/CUIL स्वरूपित करें
51        return String.format("%d-%08d-%d", typeCode, dni, verificationDigit);
52    }
53    
54    public static ValidationResult validateCuitCuil(String cuitCuil) {
55        // यदि मौजूद हों तो हाइफ़न हटाएं
56        String cuitCuilClean = cuitCuil.replace("-", "");
57        
58        // मूल स्वरूप की जाँच करें
59        if (!cuitCuilClean.matches("\\d{11}")) {
60            return new ValidationResult(false, "अवैध स्वरूप");
61        }
62        
63        // भाग निकालें
64        int typeCode = Integer.parseInt(cuitCuilClean.substring(0, 2));
65        int dni = Integer.parseInt(cuitCuilClean.substring(2, 10));
66        int verificationDigit = Integer.parseInt(cuitCuilClean.substring(10, 11));
67        
68        // टाइप कोड की पुष्टि करें
69        if (!VALID_TYPE_CODES.contains(typeCode)) {
70            return new ValidationResult(false, "अवैध टाइप कोड");
71        }
72        
73        // सत्यापन अंक की गणना और तुलना करें
74        int calculatedDigit = calculateVerificationDigit(typeCode, dni);
75        if (calculatedDigit != verificationDigit) {
76            return new ValidationResult(false, "अवैध सत्यापन अंक");
77        }
78        
79        return new ValidationResult(true, null);
80    }
81    
82    public static class ValidationResult {
83        private final boolean isValid;
84        private final String errorMessage;
85        
86        public ValidationResult(boolean isValid, String errorMessage) {
87            this.isValid = isValid;
88            this.errorMessage = errorMessage;
89        }
90        
91        public boolean isValid() {
92            return isValid;
93        }
94        
95        public String getErrorMessage() {
96            return errorMessage;
97        }
98    }
99    
100    public static void main(String[] args) {
101        // उपयोग उदाहरण
102        System.out.println(generateCuitCuil(20, 12345678)); // विशिष्ट DNI के लिए उत्पन्न करें
103        System.out.println(generateCuitCuil(27, null)); // यादृच्छिक DNI के साथ उत्पन्न करें
104        System.out.println(validateCuitCuil("20-12345678-9").isValid()); // एक CUIT/CUIL की पुष्टि करें
105    }
106}
107

PHP

<?php function calculateVerificationDigit($typeCode, $dni) { // स्ट्रिंग में बदलें और DNI को 8 अंकों के साथ अग्रणी शून्य सुनिश्चित करें $typeCodeStr = (string)$typeCode; $dniStr = str_pad((string)$dni, 8, '0', STR_PAD_LEFT); // टाइप कोड और DNI को जोड़ें $digits = $typeCodeStr . $dniStr; // प्रत्येक स्थान के लिए वजन $weights = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]; // उत्पादों का योग गणना करें $sumProducts = 0; for ($i = 0; $i < 10; $i++) { $sumProducts += (int)$digits[$i] * $weights[$i]; } // सत्यापन अंक की गणना करें $verificationDigit = 11 - ($sumProducts % 11); // विशेष मामले if ($verificationDigit == 11) { $verificationDigit = 0; ## अक्सर पूछे जाने वाले प्रश्न ### CUIT और CUIL में क्या अंतर है? यहाँ व्यावहारिक अंतर है: **CUIT** (कर पहचान कुंजी) करदाताओं की पहचान करता है - व्यक्ति और व्यवसाय जो AFIP के साथ कर दाखिल करते हैं। **CUIL** (श्रम पहचान कुंजी) रोजगार और सेवानिवृत्ति उद्देश्यों के लिए सामाजिक सुरक्षा प्रणाली में श्रमिकों की पहचान करता है। व्यवहार में, कई व्यक्तियों के पास CUIL (पहली नौकरी से) होता है और बाद में CUIT (यदि वे स्वरोजगार या व्यवसाय शुरू करते हैं) प्राप्त कर सकते हैं। संख्याएँ समान स्वरूपण और गणना नियमों का उपयोग करती हैं, इसलिए सत्यापन के दृष्टिकोण से, आप उन्हें एक ही तरह से संभालते हैं। अंतर प्रशासनिक उद्देश्यों के लिए महत्वपूर्ण है: वेतन प्रणालियाँ आमतौर पर CUIL के साथ काम करती हैं, जबकि चालान और कर प्रणालियाँ CUIT का उपयोग करती हैं। ### व्यक्तियों और कंपनियों के लिए कौन से प्रकार कोड उपयोग किए जाते हैं? व्यक्तियों के लिए: - 20, 23, 24: पुरुष व्यक्ति (CUIL) - 27: महिला व्यक्ति (CUIL) कंपनियों और संगठनों के लिए: - 30: निगम (CUIT) - 33: नागरिक संघ (CUIT) - 34: फाउंडेशन (CUIT) ### सत्यापन अंक कैसे गणना की जाती है? एल्गोरिदम भारित गुणा का उपयोग करता है: पहले 10 अंकों में से प्रत्येक को **5, 4, 3, 2, 7, 6, 5, 4, 3, 2** से गुणा करें, उत्पादों को जोड़ें, फिर 11 माइनस (योग मॉड्यूलो 11) की गणना करें। दो किनारे के मामले लोगों को भ्रमित करते हैं: जब गणना 11 देती है, तो सत्यापन अंक के रूप में 0 का उपयोग करें; जब यह 10 देता है, तो 9 का उपयोग करें। ये विशेष मामले इसलिए मौजूद हैं क्योंकि सत्यापन अंक एक एकल अंक (0-9) होना चाहिए। यह एक मॉड्यूलो-11 चेक अंक एल्गोरिदम है, जो ISBN-10 कोड और दुनिया भर की अन्य पहचान प्रणालियों में उपयोग किया जाता है। ### क्या मैं इस टूल का उपयोग वास्तविक, आधिकारिक CUIT/CUIL संख्याएँ उत्पन्न करने के लिए कर सकता हूँ? नहीं—यह टूल गणितीय रूप से वैध परीक्षण डेटा उत्पन्न करता है, लेकिन संख्याएँ AFIP के साथ आधिकारिक रूप से पंजीकृत नहीं हैं। इसे लुन एल्गोरिदम का उपयोग करके वैध क्रेडिट कार्ड संख्या उत्पन्न करने की तरह सोचें: यह प्रारूप सत्यापन पास करता है, लेकिन किसी वास्तविक खाते से जुड़ा नहीं है। आधिकारिक CUIT/CUIL पंजीकरण के लिए, व्यक्तियों को अपने DNI के साथ AFIP जाना होता है, जबकि व्यवसायों को कॉर्पोरेट पंजीकरण प्रक्रियाएँ पूरी करनी होती हैं। टूल केवल विकास, परीक्षण और शैक्षिक उपयोग के लिए है जहाँ आपको वैध दिखने वाले डेटा की आवश्यकता होती है जो वास्तविक पहचान संख्याओं के साथ टकराव नहीं करेगा। (बाकी अनुवाद जारी रहेगा...) ## संदर्भ 1. AFIP (सार्वजनिक आय प्रशासन)"CUIT/CUIL/CDI।" आधिकारिक वेबसाइट। [https://www.afip.gob.ar/](https://www.afip.gob.ar/) 2. श्रम, रोजगार और सामाजिक सुरक्षा मंत्रालय। "CUIL - श्रम पहचान की एकल कुंजी।" [https://www.argentina.gob.ar/trabajo](https://www.argentina.gob.ar/trabajo) 3. ANSES (राष्ट्रीय सामाजिक सुरक्षा प्रशासन)"मेरा CUIL प्राप्त करें।" [https://www.anses.gob.ar/](https://www.anses.gob.ar/) 4. अर्जेंटीना गणराज्य का राजपत्र। "सामान्य संकल्प AFIP 2854/2010: प्रक्रिया। कर पहचान की एकल कुंजी (C.U.I.T.)।" 5. अर्जेंटीना गणराज्य का राजकोषीय संहिता। "करदाताओं की पहचान और पंजीकरण।" --- चाहे आप एक बिलिंग सिस्टम बना रहे हों, कर्मचारी ऑनबोर्डिंग प्रवाह का परीक्षण कर रहे हों, या सत्यापन एल्गोरिदम के बारे में सीख रहे हों, यह टूल CUIT/CUIL उत्पन्न करने और सत्यापन के लिए आवश्यक सुविधाएं प्रदान करता है। एल्गोरिदम सत्यापन पास करने वाला परीक्षण डेटा उत्पन्न करें, डेटाबेस में जाने से पहले संख्याओं की जाँच करें, या व्यावहारिक रूप से चेक अंक एल्गोरिदम काम करने के तरीके की खोज करें।