CUIT/CUIL जनरेटर आणि व्हॅलिडेटर | अर्जेंटाइन कर ओळख साधन
वैध अर्जेंटाइन CUIT/CUIL चाचणी क्रमांक तयार करा किंवा अस्तित्वात असलेल्यांची पडताळणी करा. AFIP-अनुरूप व्हॅलिडेशनसह कर ओळख आणि पगार प्रणाली चाचणी करणाऱ्या विकसकांसाठी मोफत ऑनलाइन साधन.
CUIT/CUIL जनरेटर
8 अंकी DNI क्रमांक प्रविष्ट करा किंवा यादृच्छिक जनरेटर वापरा
यादृच्छिक जनरेट केलेला DNI वापरत आहे
साहित्यिकरण
अर्जेंटाइन CUIT/CUIL जनरेटर आणि व्हॅलिडेटर
परिचय
अर्जेंटिनाच्या कर आणि श्रम प्रणालीमध्ये, तुम्हाला सातत्याने दोन महत्वपूर्ण ओळखकर्ते आढळतील: CUIT (क्लावे युनिका डी इडेंटिफिकेशन ट्रिब्यूटारिया) आणि CUIL (क्लावे युनिका डी इडेंटिफिकेशन लॅबोरल). CUIT म्हणजे व्यवसाय आणि कर भरणाऱ्या व्यक्तींसाठी कर ओळखपत्र, तर CUIL सामाजिक सुरक्षा प्रणालीमध्ये कामगारांना ओळखते. दोन्ही 11 अंकी स्वरूप आणि सत्यापन अल्गोरिदम वापरतात, जे या क्रमांकांवर काम करणाऱ्या अनुप्रयोगांचे परीक्षण करण्यास विशेष महत्व देते.
अर्जेंटिन बाजारपेठेसाठी सॉफ्टवेअर विकसित करताना, तुम्हाला वैध चाचणी डेटा आवश्यक असतो. येथे हा साधन उपयोगी पडतो. तुम्ही वास्तविक वैयक्तिक माहितीचा वापर न करता गणितीय दृष्ट्या बरोबर CUIT/CUIL क्रमांक तयार करू शकता, किंवा अस्तित्वात असलेल्या क्रमांकांची पडताळणी करू शकता जेणेकरून ते AFIP च्या अधिकृत अल्गोरिदमला अनुरूप असतील. विशेष उपयोगी बाब म्हणजे हा साधन उत्पादन समस्या येण्यापूर्वी जनरेशन बाजू (मागणीवर वैध क्रमांक तयार करणे) आणि सत्यापन बाजू (फॉर्मेट त्रुटी, अवैध प्रकार कोड आणि चुकीचे सत्यापन अंक पकडणे) दोन्ही हाताळते.
CUIT/CUIL संरचना आणि गणना
फॉर्मॅट समजून घेणे
वैध CUIT/CUIL क्रमांक 11 अंकांचा असतो, जो सामान्यतः XX-XXXXXXXX-X या स्वरूपात दाखवला जातो. येथे तो कसा तोडला जातो ते पाहूया:
-
टाइप कोड (पहिले 2 अंक): संस्थेचा प्रकार ओळखतो
- 20, 23, 24: पुरुष व्यक्ती (CUIL)
- 27: महिला व्यक्ती (CUIL)
- 30, 33, 34: कंपन्या आणि संस्था (CUIT)
-
DNI क्रमांक (मधले 8 अंक): व्यक्तींसाठी, हा त्यांचा राष्ट्रीय ओळख दस्तऐवज क्रमांक (DNI) असतो. एक सामान्य अडचण: जर वास्तविक DNI मध्ये 8 पेक्षा कमी अंक असतील, तर त्याच्या आधी शून्य भरावे लागतात. उदाहरणार्थ, DNI 1234567 CUIT/CUIL मध्ये 01234567 बनतो. कंपन्यांना त्याऐवजी एक विशिष्ट नियुक्त क्रमांक मिळतो.
-
सत्यापन अंक (शेवटचा अंक): हा चेक अंक वेटेड अल्गोरिदम वापरून संपूर्ण क्रमांक सत्यापित करतो. जर हा अंक गणनेशी जुळत नसेल, तर संपूर्ण CUIT/CUIL अवैध ठरतो—जे विकसकांना परीक्षण डेटा तयार करताना अनेकदा अचानक अडवते.
सत्यापन अंक गणना
सत्यापन अंक मोड्यूलो-11 वेटेड अल्गोरिदम वापरतो. येथे तो कसा काम करतो:
- CUIT/CUIL चे पहिले 10 अंक घ्या (टाइप कोड + DNI)
- प्रत्येक अंकाला त्याच्या संबंधित वजनाने गुणले: 5, 4, 3, 2, 7, 6, 5, 4, 3, 2
- सर्व उत्पादनांचा योग काढा
- गणना करा: 11 माइनस (योग मोड्यूलो 11)
- किनारी प्रकरणे हाताळा: जर निकाल 11 असेल, 0 वापरा; जर 10 असेल, 9 वापरा
लोकांना सर्वात जास्त अडचण येते ती 5 मधील किनारी प्रकरणांमध्ये. परीक्षण करताना, तुम्हाला कधीकधी 10 किंवा 11 चा निकाल मिळेल, आणि या नियमाबद्दल न जाणून 9 आणि 0 मध्ये मॅप करणे चुकवल्यास सत्यापन अयशस्वी होते जे डीबग करणे कठीण असते.
गणितीयदृष्ट्या, हे असे व्यक्त केले जाऊ शकते:
जिथे:
- हा सत्यापन अंक
- हा पहिल्या 10 अंकांमधील -वा अंक
- हा [5, 4, 3, 2, 7, 6, 5, 4, 3, 2] या क्रमातील संबंधित वजन
- विशेष प्रकरणे: जर असेल तर , जर असेल तर
पायऱ्यांनुसार मार्गदर्शक
जनरेटर वापरणे
-
साधनाच्या इंटरफेसच्या शीर्षस्थानी "जनरेटर" टॅब निवडा.
-
ड्रॉपडाउन मेनूमधून टाइप कोड निवडा:
- 20: पुरुष (CUIL)
- 23: व्यवसाय (CUIT)
- 24: तात्पुरता व्यवसाय (CUIT)
- 27: महिला (CUIL)
- 30: कॉर्पोरेशन (CUIT)
- 33: सिव्हिल असोसिएशन (CUIT)
- 34: फाउंडेशन (CUIT)
-
DNI क्रमांक प्रविष्ट करा (वैकल्पिक):
- दिलेल्या फील्डमध्ये 8 अंकी DNI क्रमांक प्रविष्ट करा
- रिकामे असल्यास, साधन अनियमित DNI वापरेल
- 8 पेक्षा कमी अंक प्रविष्ट केल्यास, प्रणाली पुढील शून्य जोडेल
-
अनियमित DNI जनरेट करा (वैकल्पिक):
- अनियमित 8 अंकी DNI क्रमांक जनरेट करण्यासाठी "अनियमित" बटण क्लिक करा
-
जनरेट केलेला CUIT/CUIL पहा:
- साधन आपल्या इनपुटवर आधारित वैध CUIT/CUIL स्वयंचलितपणे दर्शवते
- फॉर्मॅट XX-XXXXXXXX-X असेल, सही सत्यापन अंक सह
-
निकाल कॉपी करा:
- जनरेट केलेला CUIT/CUIL क्लिपबोर्डवर कॉपी करण्यासाठी कॉपी आयकन क्लिक करा
- यशस्वीरित्या कॉपी केल्यावर पुष्टीकरण संदेश दिसेल
व्हॅलिडेटर वापरणे
-
साधनाच्या इंटरफेसच्या शीर्षस्थानी "व्हॅलिडेटर" टॅब निवडा.
-
व्हॅलिडेट करण्यासाठी CUIT/CUIL प्रविष्ट करा:
- XX-XXXXXXXX-X फॉर्मॅटमध्ये CUIT/CUIL प्रविष्ट करा
- साधन स्वयंचलितपणे आपला इनपुट हायफन्ससह फॉर्मॅट करेल
- हायफन्ससिवाय क्रमांक (XXXXXXXXXXX) देखील प्रविष्ट करू शकता
-
"व्हॅलिडेट" बटण क्लिक करा:
- साधन फॉर्मॅट, टाइप कोड आणि सत्यापन अंक तपासेल
-
व्हॅलिडेशन निकाल पहा:
- वैध CUIT/CUIL क्रमांकांसाठी, हिरवा यश संदेश दिसेल
- अवैध क्रमांकांसाठी, लाल त्रुटी संदेश कारण स्पष्ट करेल:
- अवैध फॉर्मॅट (XX-XXXXXXXX-X असणे आवश्यक)
- अवैध टाइप कोड (20, 23, 24, 27, 30, 33, 34 पैकी असणे आवश्यक)
- अवैध सत्यापन अंक
-
अतिरिक्त माहिती:
- वैध क्रमांकांसाठी, साधन घटकांचा तपशील दर्शवते:
- टाइप कोड आणि त्याचा अर्थ
- 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 असलेल्या व्हेरिफिकेशन अंकांसह चाचणी करा - हे अल्गोरिदममधील विशेष प्रकरणांमधून निर्माण होतात. शून्यांनी सुरू होणाऱ्या DNIs ची देखील चाचणी करा जेणेकरून आपली पॅडिंग तर्कशास्त्र योग्यरित्या काम करते.
वापर प्रकरणेवं व्यावहअन्ग
विकास आणि चाचणी
सॉफ्टवेर विकास: अर्जें्टाइन बाजारासाठी अनुप रगाधंताना, तुम्हाला अशीाचणी डेटा लागेल जो वास्तवि्कापरकर््ताहितन वापापरैध असेल. येथे हे महत्वाचे आहे:
- ई-कॉमर्स प्लॅटफॉर्म्स: पेमेंट प्रोसेसर आणि बिलाचे ससिस्टीम वैधाधि CIL//CUIL क्रमांकआवश्ाप्करातोचा्चणी दरम्यान,्हजारो वध ि क्रमांक लागतील जे वासस्तविक वर्ानोंदणीसअाठी सिमुलेटटील.
- लेखा सॉफ्टवेर: कर अहवालालॉड्य्सबमिकरशनपूर्वीी॑मॅटप. चाचणी नियमांंसाठी क्रमांक लागतील जे चेक अंकल्गोमधून जातील.
- **म.ानवा््य्थापन प्परण्ालीेरोल प्रक्रिया आणि सामाजायिकक सुर्षा योगदान वैधILमांवर अवलंबून असतात.ामान्य परिस्थिकहीर्मारी नोक्ती प्रवाह चाचणी करअसताना असेक्षा करता की अवैध CUILs योग्य त्रुटटदेशोधतात.
- **बँकिंग अनुकप्ययोगYC (ग्राहकओलख)किा CUIT/CUIL वैधता तपासत.झ्यानुानव,ंारकड बेसमधील त्रुटीकीकरणणात अधिक दिसून..
ेटेपशन: चाचणी डेसीड करता्नाल्गोरिथमकित्याध CUIT/CUIL क्रमांक वापरताल्यानेे तुमचा डेटाबेस कन्स्ट्रेन्ट्स आणि ट्रिग्रस अपेेक्षेप्रमाणे कार्य करतात. हहे विशेषतः डेटााा स्थलांतर स्क्रिप्ट्सि सचाचणकरीतातचे असते.
फॉर ्म वैधता चाचणी: दोीहॅपी पाथ आणि त्रुीी परिस्थितीप.शस्वी सबमिशनसाठ्ाध क्रमांक तयार करा, मनंतर चेक अंक बदलून पहा की तुमचे फ्रंटएंड आणि बॅकएंड वैधता त्रुटी पकडतात.
API चाचणी: एकीकरचाचण्यांमधध्ये वैध CUIT/CUIL क्रमांक असलेले पेलोड वापरकरा.ा हे खोट्या नकारात्मक परिणामांना टाऴता, जेथे चाचण त्रुटी असलेल्या डेटामुऴे नाकारल्या जातात QA स्वयंचलित**:ॅरामीइज्चाच्चण्यांना गतिCUIT/CUIL उत्पादन फायदेशीर असते. कोयाचणकाराऴात संघर्ष टाऴण्यासाठी.प्रत येचाचणकचक्रासाठी नवीन वैध ि क र्तय.ैकिद्दििेैधताल्गोरिदमशिक्षc/CUIL वैधता अलरमॉड्यूलो अंक आणि भारित चेक अंक अलरचे व्यावहहअ्गाख.ाद्धजगभ्यातन्यओऴखप्रणालीमध्त दि: क्रेडिट कार् (लुन अल्गोरिदISBN कआणि युरोप्ोय VAT क्रमांक. तुम्ही येथे शिकलेले पॅर्या प्रणाल्ींना लागूात होतात.
**शिडेैतानििष ठकसकांना इनपुट वैधता शिक्वताना, CUIT/CUIL प्रणाली वास व्उदाहरण पु्दाख.ेईमैधता पेक्षा अधिक जटिल पण क्रिप्टोग्राफिक वैपता पेक्षा सोपीी आह.
आंतरराष्ट्रीय व्यवसाय विकास: लॅटिन अमेरिकन बबाजारांसाठी सिस्टम बांधताना,UIT/IL समजून घेणे मदत करते. ब्राझील (CPF//CNP),pचिली (RUT), आणि उरुग्वे (RUT) या सारखी््ाली असतात.
पर्याय आणि उत्पादन विचार
अधिकृत सरकारी वैधता: जीवितनुप्रयगांसाठ,ठअल्गोरिदिकताुरेशीसतेुाafip (ेब सेवांद्वारे व्वकरणे आवकआहे. एलक्षातेवा: एक क्रमांक गणितीय रित्या वैधा असू शतो पण अध्िरित्या वाटप न केले्ला असू शक.
ण**लाइब्ररी आणि प्ॅकेुचोडमध्येैकीतताना, पिदाब्ररीवापरा:
- जावास्क्रिप्ट:
valididaर-cuitnpm वर - ावPHP:
afip-phpलाइब्ररी - **पायथनमधिध्-cPyPIववर
स्टकोऴोड्स्मंलबजण्ींचजोखीम कमकमी करते.
स्तलिितणना: शिक्षण किंवाावा डीबगिंगसा,ाअल्गोरिदम हातानेे गणन करणे समजून घेण्यास मदत करते.
उद्योग वैधता सेवा: मोठ्नरांृतपक्ष वैधता API फायदेशीर असू शकतजेणफॉमर्मतपासूनात आणि वाणिज्यिडकेटेबेससशीुनाात:
CUIT/CUIL प्रणालीचा इतिहास
अर्जेंटिनामध्ये CUIT/CUIL ओळख प्रणाली त्याच्या सुरुवातीपासून महत्त्वपूर्ण बदलांमधून गेली आहे:
उत्पत्ती आणि अंमलबजावणी
CUIT (Clave Única de Identificación Tributaria) हा पहिल्यांदा 1970 च्या दशकात अर्जेंटिनामध्ये कर संकलन प्रणालीला आधुनिक बनविण्याच्या प्रयत्नांच्या भागरूप म्हणून सादर करण्यात आला. सार्वजनिक महसूल प्रशासनाने (AFIP) या अद्वितीय ओळखकांद्वारे करदाते अधिक कार्यक्षमपणे मागवून कर टाळेगिरी कमी करण्याचा प्रयत्न केला.
CUIL (Clave Única de Identificación Laboral) नंतर सामाजिक सुरक्षा प्रणालीमध्ये कामगारांना विशिष्टपणे ओळखण्यासाठी सादर करण्यात आला, कर ओळख आणि श्रम ओळख दरम्यान भेद निर्माण करत एक सुसंगत स्वरूप राखला.
विकास आणि डिजिटलीकरण
1990 च्या दशकात, अर्जेंटिनामध्ये महत्त्वपूर्ण आर्थिक सुधारणा होत असतानाच CUIT/CUIL प्रणाली आर्थिक गतिविधी मागवण्यासाठी अधिक महत्त्वाची बनली. प्रणालीचे डिजिटलीकरण करण्यात आले आणि ऑनलाइन सत्यापन प्रणाली लागू करण्यात आल्या.
2000 च्या सुरुवातीच्या काळात CUIT/CUIL प्रणालीचे विविध डिजिटल सरकारी सेवांशी एकीकरण करण्यात आले, अर्जेंटिनाच्या ई-सरकार उपक्रमांचा हा एक महत्त्वाचा भाग बनला. या कालावधीत सत्यापन अल्गोरिदम आणि स्वरूप मानकीकृत करण्यात आले जे आज देखील वापरात आहे.
अलीकडील घडामोडी
अलीकडील वर्षांमध्ये, AFIP ने CUIT/CUIL क्रमांकांसाठी सुरक्षा आणि सत्यापन प्रक्रियांमध्ये सुधारणा केली आहे, अधिक परिष्कृत सत्यापन प्रणाली लागू करून आणि त्यांचे इतर सरकारी डेटाबेससोबत एकीकरण करून. कर टाळेगिरी रोखण्यात आणि अर्थव्यवस्थेला औपचारिक करण्यात ही प्रणाली महत्त्वाची भूमिका बजावत आहे.
आज, CUIT/CUIL केवळ कर आणि रोजगार उद्देशांसाठीच नाही तर बँकिंग, मालमत्ता व्यवहार, उपयोगिता सेवा आणि ऑनलाइन खरेदी यासारख्या विविध क्षेत्रांमध्ये वापरला जातो, अर्जेंटिनामध्ये व्यक्ती आणि व्यवसायांसाठी हा एक अत्यंत महत्त्वाचा ओळखकारक बनला आहे.
अंमलबजावणी विचार
आपल्या स्वत:च्या प्रणालींमध्ये CUIT/CUIL सत्यापन अंमलात आणताना, या तांत्रिक पैलूंचा विचार करा:
अल्गोरिदम स्थिरता: सध्याचा CUIT/CUIL सत्यापन अल्गोरिदम 1990 च्या दशकापासून अपरिवर्तित आहे. AFIP च्या तांत्रिक दस्तऐवजानुसार, मॉड्युलो-11 वेटेड चेक अंक दृष्टिकोन Resolución General 2854/2010 आणि पुढील नियमांमध्ये कोडीफाईड केला आहे. ही स्थिरता असा अर्थ आहे की अंमलबजावणीला दुर्मिळच अपडेट्सची आवश्यकता असते, परंतु कोणत्याही नियामक बदलांसाठी AFIP च्या घोषणांचे निरीक्षण करावे.
कार्यक्षमता अनुकूलन: सत्यापन अल्गोरिदम संगणकीय दृष्ट्या स्वस्त आहे - केवळ 10 गुणाकार, एक बेरीज आणि एक मॉड्युलो ऑपरेशन. हजारो सत्यापने प्रति सेकंद प्रक्रिया करणाऱ्या उच्च-थ्रूपुट प्रणालींसाठी, बॉटलनेक सामान्यतः AFIP च्या डेटाबेसवर सत्यापन करताना नेटवर्क विलंब असतो, अल्गोरिदम स्वत: नाही. उचित TTL (सामान्यतः 24 तास) सह AFIP सत्यापन निकालांचे कॅशिंग करण्याचा विचार करा ताजेपणा आणि कार्यक्षमता यांच्यातील संतुलन राखण्यासाठी.
वर्ण एन्कोडिंग: बाह्य स्रोतांकडून CUIT/CUIL डेटा प्रक्रिया करताना (PDFs, स्कॅन केलेले दस्तऐवज, वेब स्क्रेपिंग), वर्ण एन्कोडिंग समस्यांकडे लक्ष द्या. हायफन हा एम डॅश (U+2014), एन डॅश (U+2013), किंवा माइनस चिन्ह (U+2212) म्हणून दिसू शकतो, मानक हायफन-माइनस (U+002D) ऐवजी. सत्यापनापूर्वी यांना सामान्य करा चुकीच्या नकारात्मक परिणामांना टाळण्यासाठी.
आंतरराष्ट्रीयकरण: जर आपली अनुप्रयोग बहु लॅटिन अमेरिकन बाजारपेठांना सेवा देत असेल, तर लक्षात ठेवा की अर्जेंटिनाचा 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}
107PHP
<?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; } else if ($verificationDigit == 10) { $verificationDigit = 9; } return $verificationDigit; } function generateCuitCuil($typeCode, $dni = null) { // वैध ## Frequently Asked Questions ### What is the difference between CUIT and CUIL? Here's the practical distinction: **CUIT** (Clave Única de Identificación Tributaria) identifies taxpayers—both individuals and businesses that file taxes with AFIP. **CUIL** (Clave Única de Identificación Laboral) identifies workers in the social security system for employment and retirement purposes. In practice, many individuals have both a CUIL (from their first job) and might later get a CUIT (if they become self-employed or start a business). The numbers use identical formatting and calculation rules, so from a validation standpoint, you handle them the same way. The distinction matters for administrative purposes: payroll systems typically work with CUIL, while invoicing and tax systems use CUIT. ### Which type codes are used for individuals and which for companies? For individuals: - 20, 23, 24: Male individuals (CUIL) - 27: Female individuals (CUIL) For companies and organizations: - 30: Corporations (CUIT) - 33: Civil Associations (CUIT) - 34: Foundations (CUIT) ### How is the verification digit calculated? The algorithm uses weighted multiplication: take each of the first 10 digits, multiply by the weights **5, 4, 3, 2, 7, 6, 5, 4, 3, 2**, sum the products, then calculate 11 minus (sum modulo 11). Two edge cases trip people up: when the calculation yields 11, use 0 as the verification digit; when it yields 10, use 9. These special cases exist because the verification digit must be a single digit (0-9). This is a modulo-11 check digit algorithm, similar to what's used in ISBN-10 codes and other identification systems worldwide. ### Can I use this tool to generate real, official CUIT/CUIL numbers? No—this tool generates mathematically valid test data, but the numbers aren't officially registered with AFIP. Think of it like generating a valid credit card number using the Luhn algorithm: it passes format validation, but it's not connected to a real account. For official CUIT/CUIL registration, individuals need to visit AFIP with their DNI, while businesses must complete corporate registration procedures. The tool is strictly for development, testing, and educational use where you need valid-looking data that won't conflict with real identification numbers. ### Why does my CUIT/CUIL validation fail even though the format looks correct? When validation fails despite correct-looking formatting, check these common culprits: 1. **Invalid type code**: Only 20, 23, 24, 27, 30, 33, 34 are valid. Using 21, 25, or other numbers will fail. 2. **Wrong verification digit**: The last digit must match the algorithm's calculation. Even changing one digit in the DNI portion requires recalculating the check digit. 3. **Format issues**: Must be exactly 11 digits (XX-XXXXXXXX-X). Watch for extra spaces or missing leading zeros. 4. **Hidden characters**: Copy-pasting from PDFs or websites sometimes introduces invisible Unicode characters that break validation. A quick debugging tip: remove the last digit and recalculate it manually. If it doesn't match, that's your culprit. ### Are hyphens required in CUIT/CUIL numbers? Hyphens are for display formatting only—they're not part of the actual number for calculation purposes. When you see **20-12345678-9**, the algorithm only cares about the 11 digits: **20123456789**. Most validation implementations strip hyphens before processing, which is why our tool accepts both **20-12345678-9** and **20123456789**. In APIs and databases, you'll typically store the unhyphenated version and add hyphens only when displaying to users. This approach prevents formatting inconsistencies from causing validation failures. ### Can a CUIT/CUIL number have fewer than 8 digits in the DNI portion? The DNI portion must always be exactly 8 digits—no exceptions. If someone's actual DNI has fewer digits (which happens with older, lower-numbered DNIs), you pad with leading zeros. For example, DNI **1234567** becomes **01234567** in the CUIT/CUIL structure. This is a frequent source of bugs when converting between DNI and CUIT/CUIL formats. I've seen systems fail validation because they forgot to pad, treating **1234567** as a 7-digit number instead of **01234567**. Always use zero-padding functions in your code rather than simple string concatenation. ### How can I verify if a CUIT/CUIL is officially registered in Argentina? Our tool validates the mathematical correctness—format, type code, and check digit. But it can't tell you if the number is actually registered with AFIP or belongs to a real person or business. For official verification, use [AFIP's web services](https://www.afip.gob.ar/) or their "Constancia de Inscripción" lookup tool. AFIP offers APIs for automated verification, though you'll need to register as a developer and authenticate. In production environments, implement both layers: first run algorithmic validation (fast, catches typos and format errors), then verify against AFIP's database (slower, but confirms the number is real and active). ### Can I use this tool in my commercial application? Yes—the CUIT/CUIL validation algorithm is a public standard defined by AFIP, so you can freely implement it in commercial software. The code examples provided here are meant as reference implementations. For production use, consider these best practices: implement proper error handling for edge cases, add logging for debugging validation failures, validate against AFIP's official database (not just algorithmic validation), and keep your implementation up to date if AFIP changes the rules (though the current algorithm has been stable for decades). ### Does the tool store any of the generated or validated CUIT/CUIL numbers? No—all processing happens in your browser (client-side). When you generate or validate a CUIT/CUIL, the calculation runs locally using JavaScript. Nothing gets sent to our servers, and we don't log, store, or track any numbers you enter or generate. This client-side approach ensures privacy and also means the tool works offline once the page loads. You can verify this by opening your browser's developer tools and watching the network tab—you'll see no requests sent when generating or validating numbers. ## संदर्भ 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 निर्मिती आणि वैधता प्रदान करते. अल्गोरिथमिक वैधतेने उत्तीर्ण होणारी चाचणी डेटा तयार करा, डेटाबेसवर जाण्यापूर्वी क्रमांक तपासा, किंवा चेक अंक अल्गोरिदम व्यावहारिकरित्या कसा काम करतो ते शोधा.