मान लीजिए हमारे पास क्रेडिट कार्ड नंबर है। हमें यह जांचना होगा कि कार्ड नंबर वैध है या नहीं। कार्ड नंबरों में कुछ गुण होते हैं -
-
यह 4, 5 और 6 से शुरू होगा
-
यह 16 अंक लंबा होगा
-
संख्याओं में केवल अंक होने चाहिए
-
इसमें चार समूहों में अंक हो सकते हैं जिन्हें '-' से अलग किया जाता है
-
इसे स्पेस या अंडरस्कोर जैसे किसी अन्य विभाजक का उपयोग नहीं करना चाहिए
-
इसमें 4 या अधिक लगातार समान अंक नहीं होने चाहिए
इसलिए, यदि इनपुट s ="5423-2578-8632-6589" जैसा है, तो आउटपुट सही होगा
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- यदि s में '-' की संख्या 0 से अधिक है, तो
- a :="-" द्वारा अलग किए गए भागों की सूची
- p:=1
- यदि a का आकार 4 के समान नहीं है, तो
- p:=शून्य
- a:=रिक्त सूची
- प्रत्येक b के लिए a, do
- यदि b का आकार 4 के समान नहीं है, तो
- p:=शून्य
- लूप से बाहर आएं
- यदि b का आकार 4 के समान नहीं है, तो
- अन्यथा,
- p :=एक विकल्प खोजें जो 4 या 5 या 6 से शुरू हो रहा हो और शेष 15 अंकों की संख्या लंबी हो
- s :="-" को s से हटा दें
- q :=खोज सबस्ट्रिंग जहां 4 या अधिक लगातार वर्ण समान हैं
- यदि p रिक्त नहीं है और q शून्य है, तो
- सही लौटें
- अन्यथा,
- झूठी वापसी
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें
import re def solve(s): if s.count("-")>0: a = s.split("-") p=1 if len(a)!=4: p=None a=[] for b in a: if len(b)!=4: p=None break else: p = re.search("[456][0-9]{15}",s) s = s.replace("-","") q = re.search(".*([0-9])\\1{3}.*",s) if p!=None and q==None: return True else: return False s = "5423-2578-8632-6589" print(solve(s))
इनपुट
"5423-2578-8632-6589"
आउटपुट
False