डैम एल्गोरिथ्म

त्रुटि का पता लगाने में, डैम एल्गोरिथ्म चेक डिजिट एल्गोरिदम है जो सभी प्रतिलेखन त्रुटि या एकल-अंक त्रुटियों और सभी ट्रांसक्रिप्शन त्रुटि या ट्रांसपोज़िशन त्रुटि का पता लगाता है। इसे 2004 में एच. माइकल डैम द्वारा प्रस्तुत किया गया था।

सशक्त
डैम एल्गोरिथम वेरहॉफ एल्गोरिथम के समान है। यह दो सबसे अधिक बार दिखाई देने वाली प्रकार की ट्रांसक्रिप्शन त्रुटियों की सभी घटनाओं का भी पता लगाएगा, अर्थात् अंक को बदलना या दो आसन्न अंकों को ट्रांसपोज़ करता है (अनुगामी चेक अंक और पूर्ववर्ती अंक के ट्रांसपोज़ेशन सहित)। इस प्रकार डैम एल्गोरिथ्म का लाभ यह है कि इसमें समर्पित रूप से निर्मित क्रमपरिवर्तन और इसकी स्थिति-विशिष्ट घातांक या वेरहॉफ एल्गोरिथ्म के एब्स्ट्रेक्ट बीजगणित में नहीं है। जब ऑपरेशन तालिका की सभी मुख्य विकर्ण प्रविष्टियाँ शून्य हों तो व्युत्क्रम तत्व की तालिका को भी समाप्त किया जा सकता है।

डैम एल्गोरिथ्म केवल 10 संभावित मान उत्पन्न करता है, गैर-अंकीय वर्ण की आवश्यकता को बहिष्कृत करता है (जैसे कि आईएसबीएन या आईएसबीएन-10 चेक अंक गणना में एक्स या 10-अंकीय आईएसबीएन चेक अंक या आईएसबीएन 10 योजना)।

अग्रणी शून्य को जोड़ने से चेक अंक (चर-लंबाई कोड के लिए अशक्ती) प्रभावित नहीं होता है।

पूरी तरह से एंटी-सिमेट्रिक अर्धसमूह हैं जो अंग्रेजी भाषा से जुड़ी सभी ध्वन्यात्मक त्रुटियों का पता लगाते हैं (13 ↔ 30, 14 ↔ 40, ..., 19 ↔ 90). उदाहरणात्मक उदाहरण में प्रयुक्त तालिका इस प्रकार के उदाहरण पर आधारित है।

अशक्त
डैम एल्गोरिथ्म सहित सभी चेकसम एल्गोरिदम के लिए, अग्रणी शून्य को जोड़ने से चेक अंक प्रभावित नहीं होता है, इसलिए 1, 01, 001, आदि समान चेक अंक उत्पन्न करते हैं। परिणामस्वरूप चर-लंबाई कोड को साथ सत्यापित नहीं किया जाना चाहिए।

डिज़ाइन
इसका आवश्यक भाग ऑर्डर (समूह सिद्धांत) 10 का अर्धसमूह है (अर्थात् होना)। 10 × 10 इसके केली टेबल के मुख्य भाग के रूप में लैटिन वर्ग) अर्धसमूह या टोटल एंटीसिमेट्री या अशक्त रूप से पूरी तरह से एंटी-सिमेट्रिक होने की विशेष विशेषता के साथ   डैम ने क्रम 10 के पूरी तरह से विरोधी-सममित अर्धसमूह बनाने के लिए कई विधियों का अनावरण किया और अपने डॉक्टरेट शोध प्रबंध में कुछ उदाहरण दिए थे। इस प्रकार इसके साथ, डैम ने पुराने अनुमान को भी निरस्त कर दिया कि ऑर्डर 10 के पूरी तरह से विरोधी सममित अर्धसमूह उपस्थित नहीं हैं।

एक अर्धसमूह $(Q, ∗)$ को पूरी तरह से एंटी-सिमेट्रिक कहा जाता है यदि सभी $c, x, y ∈ Q$ के लिए, निम्नलिखित निहितार्थ हैं: $(c ∗ x) ∗ y = (c ∗ y) ∗ x ⇒ x = y$

और यदि केवल पहला निहितार्थ सही बैठता है तो इसे अशक्त पूर्णतया विरोधी-सममितीय कहा जाता है। डैम ने सिद्ध किया कि ऑर्डर n के एक पूरी तरह से एंटी-सिमेट्रिक अर्धसमूह का अस्तित्व, ऑर्डर n के एक अशक्त पूरी तरह से एंटी-सिमेट्रिक अर्धसमूह के अस्तित्व के सामान है। इस प्रकार चेक समीकरण के साथ डैम एल्गोरिदम के लिए $x ∗ y = y ∗ x ⇒ x = y$, अर्धसमूह $(...((0 ∗ x_{m}) ∗ x_{m−1}) ∗ ...) ∗ x_{0} = 0$ के साथ एक अशक्त पूरी तरह से एंटी-सिमेट्रिक अर्धसमूह की आवश्यकता है ऐसे अर्धसमूह का निर्माण स्तंभों को इस तरह से पुनर्व्यवस्थित करके किसी भी पूरी तरह से विरोधी-सममित अर्धसमूह से किया जा सकता है कि सभी शून्य विकर्ण पर होंते है। और दूसरी ओर किसी भी अशक्त पूर्णत: सममित-विरोधी अर्धसमूह से स्तंभों को इस प्रकार पुनर्व्यवस्थित करके एक पूर्णतः-सममित-विरोधी अर्धसमूह का निर्माण किया जा सकता है कि पहली पंक्ति प्राकृतिक क्रम में होते है।

एल्गोरिथम
चेक अंक वाले अंक अनुक्रम की वैधता अर्धसमूह पर परिभाषित की जाती है। इस प्रकार उपयोग के लिए तैयार अर्धसमूह तालिका डैम के शोध प्रबंध (पृष्ठ 98, 106, 111) से ली जा सकती है। इस प्रकार यदि प्रत्येक मुख्य विकर्ण प्रविष्टि $x ∗ x = 0$ है तो यह उपयोगी है, क्योंकि यह चेक अंक गणना को सरल बनाता है।

सम्मिलित चेक अंक के विरुद्ध किसी संख्या का सत्यापन करना

 * 1) एक अंतरिम अंक सेट करें और इसे $0$ से प्रारंभ करें.
 * 2) संख्या के अंक को अंक के अनुसार संसाधित करें, संख्या के अंक को स्तंभ सूचकांक के रूप में और अंतरिम अंक को पंक्ति सूचकांक के रूप में उपयोग करें, तालिका प्रविष्टि लें और अंतरिम अंक को इसके साथ बदलें।
 * 3) संख्या तभी मान्य है जब परिणामी अंतरिम अंक का मान $0$ हो।

चेक अंक की गणना
पूर्वावश्यकता: तालिका की मुख्य विकर्ण प्रविष्टियाँ $0$ हैं.
 * 1) एक अंतरिम अंक सेट करें और इसे $0$ से प्रारंभ करें.
 * 2) संख्या अंक को अंक दर अंक संसाधित करें: संख्या के अंक को स्तंभ सूचकांक के रूप में और अंतरिम अंक को पंक्ति सूचकांक के रूप में उपयोग करें, तालिका प्रविष्टि लें और अंतरिम अंक को इसके साथ बदलें।
 * 3) परिणामस्वरूप अंतरिम अंक चेक अंक देता है और इसे संख्या के पीछे वाले अंक के रूप में जोड़ा जाएगा।

उदाहरण
निम्नलिखित ऑपरेशन तालिका का उपयोग किया जाएगा। इसे डैम के डॉक्टरेट शोध प्रबंध पृष्ठ 111 में पूरी तरह से एंटी-सिमेट्रिक अर्धसमूह $0$ से पंक्तियों को पुनर्व्यवस्थित करके और क्रमपरिवर्तन $x ∗ y$ के साथ प्रविष्टियों को बदलकर और $φ = (1 2 9 5 4 8 6 7 3)$ को परिभाषित करके प्राप्त किया जा सकता है। मान लीजिए हम संख्या (अंक अनुक्रम) 572 चुनते हैं।

चेक अंक की गणना
परिणामी अंतरिम अंक 4 है। यह परिकलित चेक अंक है। हम इसे संख्या के साथ जोड़ते हैं और 5724 प्राप्त करते हैं।

शामिल चेक अंक के विरुद्ध किसी संख्या को मान्य करना
परिणामी अंतरिम अंक 0 है, इसलिए संख्या वैध है।

ग्राफिकल चित्रण
यह उपरोक्त उदाहरण है जो चेक अंक (डैश नीला तीर) उत्पन्न करने वाले एल्गोरिदम का विवरण दिखाता है और चेक अंक के साथ संख्या 572 को सत्यापित करता है।



बाहरी संबंध

 * Damm validation & generation code in several programming languages
 * Practical application in Singapore
 * Quasigroups for the Damm algorithm up to order 64
 * At RosettaCode.org, Implementations of the Damm algorithm in many programming languages