2013-04-19 6 views
9

विंडोज ऑपरेटिंग सिस्टम में, उपयोगकर्ता SIDs जैसे एक तार के साथ प्रतिनिधित्व कर रहे हैं:यह निर्धारित करने के लिए कि कोई स्ट्रिंग उपयोगकर्ता एसआईडी है या नहीं?

एस-5-1-76-1812374880-3438888550-261701130-6117

वहाँ कोई तरीका है कि मैं पहचान सकते हैं कि ऐसी स्ट्रिंग वैध उपयोगकर्ता एसआईडी है?

धन्यवाद।

+8

क्या आप सत्यापन या सत्यापन की तलाश में हैं? सत्यापन के लिए बस एसआईडी से खाता प्राप्त करने का प्रयास करें। ([मैं सीआईडी ​​से सी #] में एक खाता नाम में कैसे परिवर्तित कर सकता हूं (http://stackoverflow.com/q/499053/1386111)) –

+0

नहीं, मैं सत्यापन की तलाश में हूं। धन्यवाद –

+0

@ChibuezeOpata उन्होंने सत्यापन के लिए एक समाधान का सुझाव दिया - 'सत्यापन के लिए बस एसआईडी से खाता प्राप्त करने का प्रयास करें। – DGibbs

उत्तर

23

Security Identifiers वर्णन के अनुसार, सिड है प्रपत्र निम्नलिखित (यह एक से चौदह subauthority मान होते हैं):

S-1-<identifier authority>-<sub1>-<sub2>-…-<subn>-<rid> 

यदि स्ट्रिंग इस पैटर्न से मेल खाता है की जाँच करने के रेगुलर एक्सप्रेशन का उपयोग कर सकते हैं:

string input = "S-5-1-76-1812374880-3438888550-261701130-6117"; 
string sidPattern = @"^S-\d-\d+-(\d+-){1,14}\d+$"; 
bool isValidFormat = Regex.IsMatch(input, sidPattern); 

इससे यह सुनिश्चित होगा कि इनपुट स्ट्रिंग में वैध प्रारूप है, लेकिन यह साबित नहीं करेगा कि एसआईडी मान्य है। जैसा कि टिप्पणियों में सुझाव दिया गया है, आपको खाते की कोशिश करनी चाहिए यदि आपको यह जांचने की ज़रूरत है कि आपके पास वैध एसआईडी है या नहीं।

5

मुझे यह मामूली विविधता सहायक मिली जो कुछ प्रसिद्ध सुरक्षा पहचानकर्ताओं की अनुमति देता है। उदाहरण के लिए, अच्छी तरह से ज्ञात sid हर कोई S-1-1-0

^S-\d-(\d+-){1,14}\d+$ 
+0

उपयोगी अतिरिक्त, धन्यवाद – Basic

1

regex shoud हो "एस \ डी \ डी \ d + - \ d + - \ d + - \ d + - \ w +"

1

एसआईडी मान्य है या नहीं, यह जांचने के लिए रेगेक्स पर भरोसा करना अच्छा नहीं है। एक के लिए, एकमात्र वैध एसआईडी संस्करण 1 है इसलिए यह रेगेक्स S-9-(\d+-){1,14}\d+ मान्य होगा जब 9 मान्य संस्करण नहीं है। हालांकि रेगेक्स को केवल संस्करण 1 की अनुमति देने के लिए ठीक करना एक नए एसआईडी संस्करण या यहां तक ​​कि एक पूरी तरह से नया एसआईडी प्रारूप भी विफल होना चाहिए। ऐसा करने का बेहतर तरीका सिस्टम को यह तय करने देता है कि एसआईडी मान्य है या नहीं। अगर सिड स्वरूप अमान्य है (अगर, उदाहरण के लिए संस्करण 1 नहीं है या उप-अधिकारियों की संख्या 15 या 1 से भी कम समय खत्म हो गया है) निर्माता एक ArgumentException फेंक होगा

string notSureIfSID = "S-9-5-76-1812374880-3438888550-261701130-6117"; 
bool sidIsValid = false; 
bool sidIsAccount = false; 
try { 
    SecurityIdentifier sid = new SecurityIdentifier(notSureIfSID); 
    sidIsValid = true; 
    sidIsAccount = sid.IsAccountSid(); 
} 
catch (ArgumentException) { 
    // Handle invalid SID 
} 

: बस यह करते हैं। यदि आप यह जांचना चाहते हैं कि एसआईडी एक वास्तविक मौजूदा खाता है, तो SecurityIdentifier पर IsAccountSid पर कॉल करें।

संबंधित मुद्दे

 संबंधित मुद्दे