2010-03-29 13 views
12

क्रेडिट कार्ड ट्रैक 1 को सत्यापित करने और 2 डेटा ट्रैक करने के लिए वहां कोई ज्ञात नियमित अभिव्यक्तियां हैं?क्रेडिट कार्ड ट्रैक डेटा के लिए नियमित अभिव्यक्ति

संपादित करें:

Wikipedia से:

वित्तीय कार्ड पर ट्रैक 1 के बारे में जानकारी कई प्रारूपों में निहित है: एक, जो अपने कार्ड जारीकर्ता का मालिकाना उपयोग के लिए आरक्षित है, बी, नीचे वर्णित है जो मुख्यमंत्री, जो एएनएसआई उपसमिति X3B10 और न्यूजीलैंड द्वारा उपयोग के लिए आरक्षित हैं, जो अलग-अलग कार्ड जारीकर्ता द्वारा उपयोग के लिए उपलब्ध हैं:

ट्रैक 1, स्वरूप बी:

  • प्रारंभ प्रहरी - एक चरित्र (आम तौर पर '%')
  • स्वरूप कोड = "बी" - एक चरित्र (अल्फा केवल)
  • प्राथमिक खाता संख्या (पैन) - 19 अक्षरों तक। आमतौर पर, लेकिन हमेशा नहीं, कार्ड के सामने मुद्रित क्रेडिट कार्ड नंबर से मेल खाता है।
  • फील्ड सेपरेटर - एक चरित्र (आम तौर पर '^')
  • नाम - दो 26 अक्षरों
  • फील्ड सेपरेटर - एक चरित्र (आम तौर पर '^')
  • अवसान दिनांक - प्रपत्र YYMM में चार अक्षर।
  • सेवा कोड - तीन पात्रों
  • विवेकाधीन डेटा - पिन सत्यापन कुंजी संकेतक (PVKI, 1 चरित्र), पिन सत्यापन मान (PVV, 4 अक्षर), कार्ड सत्यापन मान या कार्ड सत्यापन कोड (सीवीवी या CVK, 3 शामिल हो सकते हैं पात्र)
  • एंड सेंटीनेल - एक वर्ण (आमतौर पर '?')
  • अनुदैर्ध्य रिडंडेंसी चेक (एलआरसी) - यह एक चरित्र और एक वैधता चरित्र है जो ट्रैक पर अन्य डेटा से गणना की जाती है। यह ध्यान दिया जाना चाहिए कि अधिकांश पाठक डिवाइस इस मान को वापस नहीं करते हैं जब कार्ड प्रस्तुति परत पर स्वाइप किया जाता है, और इसे केवल पाठक को आंतरिक रूप से इनपुट सत्यापित करने के लिए उपयोग किया जाता है।

ट्रैक 2: यह प्रारूप बैंकिंग उद्योग (एबीए) द्वारा विकसित किया गया था। यह ट्रैक 5-बिट योजना (4 डेटा बिट्स + 1 समानता) के साथ लिखा गया है, जो सोलह संभावित पात्रों की अनुमति देता है, जो संख्या 0-9 हैं, साथ ही छः वर्ण हैं:; < =>? । छह विराम चिह्नों का चयन विषम प्रतीत हो सकता है, लेकिन असल में सोलह कोड एएससीआईआई रेंज 0x30 से 0x3f तक मैप करते हैं, जो दस अंकों के पात्रों और उन छह प्रतीकों को परिभाषित करता है। डेटा स्वरूप इस प्रकार है:

  • प्रारंभ प्रहरी - एक चरित्र (आम तौर पर ';')
  • प्राथमिक खाता संख्या (पैन) - 19 अक्षरों तक। आमतौर पर, लेकिन हमेशा नहीं, कार्ड के सामने मुद्रित क्रेडिट कार्ड नंबर से मेल खाता है।
  • सेपरेटर - एक char (आमतौर पर '=')
  • समाप्ति तिथि - फॉर्म वाई वाईएमएम में चार वर्ण।
  • सेवा कोड - तीन पात्रों
  • विवेकाधीन डेटा - एक चरित्र (आम तौर पर '- ट्रैक में एक
  • समाप्ति प्रहरी के रूप में?')
  • अनुदैर्ध्य रिडंडेंसी चेक (एलआरसी) - यह एक चरित्र है और एक वैधता चरित्र ट्रैक पर अन्य डेटा से गणना की जाती है। यह ध्यान दिया जाना चाहिए कि अधिकांश पाठक डिवाइस इस मान को वापस नहीं करते हैं जब कार्ड प्रस्तुति परत पर स्वाइप किया जाता है, और इसे केवल पाठक को आंतरिक रूप से इनपुट सत्यापित करने के लिए उपयोग किया जाता है।
+0

क्या आप डेटा के कुछ उदाहरण प्रदान कर सकते हैं? –

+0

मैं थोड़ी देर के लिए सीसी व्यवसाय में रहा हूं और मुझे यह समझने में कठिनाई है कि आपको इसकी आवश्यकता क्यों है। आम तौर पर, चूंकि जारीकर्ता के डोमेन में 1,2,3 ट्रैक ट्रैक होते हैं, इसलिए आपको अन्य डेटा खोजने के लिए अक्सर दबाया जाएगा, फिर पैन, समाप्ति तिथि और ट्रैक कोड पर सेवा कोड और नाम डेटा भी जंक हो सकता है, मैं भी आ गया हूं पैन में जो लुहान चेक पास नहीं करते हैं।यही कारण है कि मुझे ऐसा लगता है कि आपके पास रेजीक्स को अच्छी तरह से ट्यून करने के लिए काफी संवेदनशील उत्पादन मामले होंगे जो आईएसओ स्पेक के साथ संघर्ष करने वाले व्यावहारिक उत्पादन डेटा को न छोड़ने के लिए पर्याप्त संवेदनशील हैं। – bbozo

उत्तर

2

करने के बारे में मैं ट्रैक के सीसी संख्या हिस्सा पुष्टि करने के लिए, regular-expressions.info पर एक ही लिंक पोस्ट करने के लिए किया गया था।

अब, मुश्किल हिस्सा आता है। ट्रैक डेटा कार्ड जारीकर्ताओं और यहां तक ​​कि कार्ड पाठकों के बीच प्रारूप में भिन्न होता है। उदाहरण के लिए 'विभाजक' वर्ण हमेशा समान नहीं होते हैं। अंत 'सेंटीनेल' पर लागू होता है। एक '=' (या कभी कभी एक 'डी') द्वारा http://en.wikipedia.org/wiki/Magnetic_stripe_card

track2 के साथ, कार्ड नंबर पीछा किया जाता है:

विकिपीडिया एक अच्छा सिंहावलोकन देता है। फिर आपके पास एमएमडीडी के रूप में समाप्ति तिथि है। उसके बाद, ट्रैक 2 में 'विवेकाधीन डेटा' है, जो कुछ भी हो सकता है।

मैं इस बिंदु के बाद बहुत ज्यादा चिंता नहीं करता। यदि यह ट्रैक डेटा है, तो आप अब तक निश्चित रूप से सुनिश्चित होंगे। मुझे लगता है कि यह इस बात पर निर्भर करता है कि आप डेटा के साथ क्या करना चाहते हैं।

वैसे भी, Track2 के लिए आप को जोड़ने की तुलना में बहुत बदतर कर सकता है [= डी] [0-9] {4} सीसी regex के अंत में $ के बजाय:

^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})[=D][0-9]{4} 

track1 के लिए, आप कुछ ऐसा ही कर सकते हैं ... Track1 में अधिक परिवर्तनीय डेटा है, इसलिए एक स्पर्श अधिक जटिल हो सकता है।

शुभकामनाएं!

1

ट्रैक 1, स्वरूप बी

^%B[^\^\W]{0,19}\^[^\^]{2,26}\^\d{4}\w{3}[^?]+\?\w?$ 
क्या मान्य वर्ण का गठन किया है के रूप में कुछ मान्यताओं के साथ

करने के लिए अनुवाद।

बेशक कोई जांच नहीं है कि डेटा वास्तव में सार्थक है या नहीं, और एलआरसी (यदि मौजूद है) भी मान्य नहीं किया जा सकता है।

क्या आप इसे कुछ वास्तविक डेटा के खिलाफ देख सकते हैं और देख सकते हैं कि यह काम करता है या नहीं?

ट्रैक 2 तब्दील

;[^=]{0,19}=\d{4}\w{3}[^?]+\?\w? 
+0

मैंने इन्हें हमारे कार्ड रीडर से डेटा के खिलाफ परीक्षण किया, लेकिन वे काम नहीं कर पाए। – NYSystemsAnalyst

+0

ऐसा लगता है कि "विवेकपूर्ण डेटा" फ़ील्ड सभी विकल्पों की अनुमति देता है, न केवल उनमें से एक। मैंने regexes बदल दिया है। अब उन्हें काम करना चाहिए। –

2

निम्नलिखित दो नियमित अभिव्यक्ति ट्रैक 1 को सत्यापित करने और 2 डेटा ट्रैक करने लगते हैं। ध्यान दें कि ये नियमित अभिव्यक्ति धारणाएं बनाती हैं कि वर्णित वर्ण वे हैं जो उपरोक्त विकिपीडिया जानकारी में "आम तौर पर" उपयोग किए जाते हैं।

Track 1: ^%B\d{0,19}\^[\w\s\/]{2,26}\^\d{7}\w*\?$ 

मानता है कि% और? सेंटीनेल पात्र हैं और^^ क्षेत्र विभाजक चरित्र के रूप में प्रयोग किया जाता है। यह भी मानता है कि खाता संख्या, दिनांक और सेवा कोड अंक हैं।

Track 2: ;\d{0,19}=\d{7}\w*\? 

मानता है कि; तथा ? सेंटीनेल अक्षर हैं और वह = क्षेत्र विभाजक चरित्र है। यह भी मानता है कि खाता संख्या, दिनांक और सेवा कोड अंक हैं।

मै मैग्टेक कार्ड रीडर से ट्रैक डेटा का उपयोग करके इन अभिव्यक्तियों का परीक्षण किया।ट्रैक डेटा मैच के निम्नलिखित दो सेट क्या (संख्या स्पष्ट रूप से बदल दिया गया है) पाठक से पढ़ रहा था और इसके बाद के संस्करण दो नियमित अभिव्यक्ति के विरुद्ध सत्यापन:

%B1234567891234567^SMITH/JOHN    ^15024041234567891234? 
;1234567891234567=152024041234567891234? 
8

यहाँ एक REGEX कि काम करता है मुझे दोनों ट्रैक लेने के लिए के लिए है 1 और ट्रैक 2. रेगेक्स विकल्प के साथ इसका प्रयोग करें "डॉट न्यूलाइन से मेल नहीं खाता"।

^%(?<FC>.)(?<PAN>[\d]{1,19}+)\^(?<NM>.{2,26})\^(?<ED>[\d]{0,4}|\^)(?<SC>[\d]{0,3}|\^)(?<DD>.*)\?|;(?<PAN>[\d]{1,19}+)=(?<ED>[\d]{0,4}|=)(?<SC>[\d]{0,3}|=)(?<DD>.*)\?\Z 

मैं इस डेटा के साथ परीक्षण किया (मेरे पाठक दोनों एक ट्रैक 1 और ट्रैक 2 रिकॉर्ड एक ही कार्ड मैं के साथ परीक्षण के लिए, इसी क्रम में, पढ़ रही है -। नंबर और नाम के नीचे परिवर्तित)

%B5581123456781323^SMITH/JOHN^16071021473810559010203? 
;5581123456781323=160710212423468? 

ऊपर REGEX नाम का उपयोग करता है कैप्चर समूहों ("?" कि बाहर प्रत्येक (समूह शुरू होता है)) और मैं (RegexBuddy के साथ) परिणाम को देखने के रूप में:

Match 1: %B5581123456781323^SMITH/JOHN^16071021473810559010203?  0  54 
Group "FC": B  1  1 
Group "PAN": 5581123456781323   2  16 
Group "NM": SMITH/JOHN  19  10 
Group "ED": 1607  30  4 
Group "SC": 102  34  3 
Group "DD": 1473810559010203  37  16 

Match 2: ;5581123456781323=160710212423468?  56  34 
Group "FC" did not participate in the match 
Group "PAN": 5581123456781323  57  16 
Group "NM" did not participate in the match 
Group "ED": 1607  74  4 
Group "SC": 102  78  3 
Group "DD": 12423468  81  8 

नोट दूसरे मैच की पहचान नहीं करता एफसी (प्रारूप कोड) ए ट्रैक 2 (मैच 2) में डी एनएम (नाम) क्योंकि इन्हें ट्रैक 2 में उपयोग नहीं किया जाता है।

यदि आपका रेगेक्स इंजन NAMED ग्रुप का समर्थन नहीं करता है, तो बस "?" प्रत्येक कैप्चरिंग समूहों का हिस्सा। फिर, प्रत्येक समूह को निर्धारित करने के लिए स्थिति का उपयोग करें।

इसके अलावा, मेरे एकल स्वीप में दोनों ट्रैक ट्रैक 1 और ट्रैक 2 (उस क्रम में, ट्रैक 1, एक सीआरएलएफ और फिर ट्रैक 2) शामिल हैं। मूल प्रश्न में विकिपीडिया लिंक के मुताबिक, कार्ड में 3 ट्रैक हो सकते हैं और पाठक ट्रैक 1 और 2 दोनों (या एक या दूसरे) को पढ़ सकते हैं और शायद ही कभी ट्रैक कर सकते हैं 3.

इस कारण से, मुझे लगता है कि यह एक है एक REGEX का उपयोग करने के लिए सुरक्षित शर्त जो ट्रैक 1 और ट्रैक 2 दोनों की तलाश में है और यदि आप दोनों प्राप्त करते हैं, तो आप ट्रैक 2 को अनदेखा कर सकते हैं (क्योंकि ट्रैक 1 में अधिक डेटा है) या जो कुछ भी आप चाहते हैं।

क्योंकि दोनों पटरियां मेरे स्वाइप में मौजूद हैं, इसलिए आरईजीईएक्स इंजन उपरोक्त मेरे आरईजीईएक्स के साथ 2 मैचों को वापस कर देगा (पाठक से कोई पठन त्रुटि नहीं मानता है और पाठक दोनों ट्रैक का समर्थन करता है)। मेरे मामले में, यह मुझे परेशान नहीं करता है और मैं बस "पहला मैच" का उपयोग करने और दूसरे को अनदेखा करने की योजना बनाउंगा।

आप केवल ट्रैक 1 में रुचि रखते हैं, इस regex का उपयोग:

^%(?<FC>.)(?<PAN>[\d]{1,19}+)\^(?<NM>.{2,26})\^(?<ED>[\d]{0,4}|\^)(?<SC>[\d]{0,3}|\^)(?<DD>.*)\?\Z 

आप केवल ट्रैक 2 में रुचि रखते हैं, regex का उपयोग:

^;(?<PAN>[\d]{1,19}+)=(?<ED>[\d]{0,4}|=)(?<SC>[\d]{0,3}|=)(?<DD>.*)\?\Z 

लेकिन मुझे कोई देख दोनों के लिए जांच करने में हानि और फिर पहले प्राप्त करने वाले पहले का उपयोग करके, या शायद ट्रैक 1 की तुलना करने के लिए 2 अतिरिक्त त्रुटि जांच चरण के रूप में ट्रैक करें।

उत्तर देने के लिए खेद है कि क्या जवाब दिया जा रहा है!

+0

अन्य उत्तर उपहार कार्ड पर काम नहीं करते हैं, धन्यवाद! – Dustin

+0

आपका ट्रैक 2 उपहार कार्ड पर काम नहीं करता है। – Dustin

+0

इस मुद्दे को और अधिक देखते हुए, ऐसा लगता है कि कुछ उपहार कार्डों के नाम के लिए 0 वर्ण हैं, विकिपीडिया के बावजूद यह 2 से 26 वर्ण हैं। – Dustin

0

नोट: ट्रैक 1 में खाता संख्या में अमेरिकन एक्सप्रेस कार्ड के लिए रिक्त स्थान हो सकते हैं। तो:

^%(?.)(?[\d\s]{1,19}+)\^(?.{2,26})\^(?[\d]{0,4}|\^)(?[\d]{0,3}|\^)(?.*)\?|;(?[\d]{1,19}+)=(?[\d]{0,4}|=)(?[\d]{0,3}|=)(?.*)\?\Z
संबंधित मुद्दे