मैं इसे (पोस्ट दिनांक के अनुसार) थोड़ी देर हो चुकी है पता है, लेकिन पहली बार मैं चेक संख्या एल्गोरिथ्म की जरूरत पिछले सप्ताह था।
तो मैं अधिक एल्गोरिदम की जाँच की और IMHO सबसे अच्छा समाधान (केवल अंक के लिए) Damm algorithm हो रहा है। कार्यान्वयन और परीक्षण की अधिकांश त्रुटियों का पता लगाना आसान है (सभी एकल अंक त्रुटियां और सभी पारदर्शिता त्रुटियां, लगभग सभी कूद पारदर्शिता त्रुटियां)।
मेरे लिए केवल एक ही समस्या थी, क्योंकि मुझे न केवल संख्याओं से बल्कि पात्रों से भी चेक अंक की गणना करने की आवश्यकता है। अक्षरों को संख्या में स्थानांतरित करने के कई तरीके हैं, लेकिन केवल त्रुटि संख्याओं का उपयोग करने से त्रुटि का पता हमेशा कम होगा।
इन मामलों के लिए आप ISO_6346 विनिर्देश का उपयोग कर सकते हैं।
लुहान एल्गोरिदम कमजोर होने का तरीका है, अंतिम अंक के साथ पहले अंक को स्वैप करने का प्रयास करें - ओउप्स, वैध! –
@AlixAxel यह सच हो सकता है कि पहले और आखिरी के स्वैपिंग के परिणामस्वरूप वैध होगा लेकिन लुहान एल्गोरिदम का पूरा विचार केवल उपयोगकर्ता इनपुट त्रुटि को रोकने/कम करने के लिए है। मतलब, यदि अंतिम उपयोगकर्ता ग्राहक खाता संख्या का गलत 16 अंकों का इनपुट इनपुट करता है तो उसके पास वैध होने का 10% (अधिक या कम) मौका होता है। लेकिन अभी भी खाता विवरण के साथ खाता नाम जैसे अन्य विवरण को सत्यापित करने के लिए यह अधिक सटीक है यदि यह डेटाबेस में डेटा है। –
@ एलिक्सएक्सेल विकी का अर्थ लुहान आल्गो का है या को चेक करें - आकस्मिक त्रुटियों के खिलाफ सुरक्षा के लिए डिज़ाइन किया गया है, दुर्भावनापूर्ण हमलों नहीं। आईएसबीएन चेक अंकों के लिए –