यहां Google लाइब्रेरी का उपयोग किए बिना अंतर्राष्ट्रीय फोन नंबर के आधार पर देश को प्राप्त करने के लिए एक समाधान है।
मुझे पहले यह बताएं कि देश का पता लगाना इतना मुश्किल क्यों है। कुछ देशों का देश कोड 1 अंक, 2, 3 या 4 अंक है। यह काफी सरल होगा। लेकिन देश कोड 1 का उपयोग न केवल अमेरिका के लिए किया जाता है, बल्कि कनाडा और कुछ छोटे स्थानों के लिए भी किया जाता है:
1339 यूएसए
1340 वर्जिन आइलैंड्स (कैरेबियन आइलैंड्स)
1341 यूएसए
1342
1343 कनाडा का इस्तेमाल नहीं किया गया
अंक 2..4 तय करते हैं, अगर यह यूएस या कनाडा है या ... देश का पता लगाने का कोई आसान तरीका नहीं है, जैसे पहले xxx कनाडा हैं, बाकी यूएस।
मेरे कोड के लिए, मैंने एक वर्ग को परिभाषित किया जो हमेशा अंकों के लिए जानकारी रखता है:
public class DigitInfo {
public char Digit;
public Country? Country;
public DigitInfo?[]? Digits;
}
संख्या में पहले अंक के लिए एक पहला सरणी DigitInfos रखता है। दूसरे अंक का उपयोग IndexInfo.Digits में एक सूचकांक के रूप में किया जाता है। जब तक अंक खाली न हो, तब तक कोई भी उस अंक श्रृंखला को नीचे नहीं ले जाता है। यदि देश को परिभाषित किया गया है (अर्थात शून्य नहीं है) तो वह मूल्य वापस मिल जाता है, अन्यथा कोई भी देश जो पहले परिभाषित किया गया है:
country code 1: byPhone[1].Country is US
country code 1236: byPhone[1].Digits[2].Digits[3].Digits[6].Country is Canada
country code 1235: byPhone[1].Digits[2].Digits[3].Digits[5].Country is null. Since
byPhone[1].Country is US, also 1235 is US, because no other
country was found in the later digits
यहाँ वह विधि है जो देश को फोन नंबर के आधार पर लौटाती है:
public static Country? GetCountry(ReadOnlySpan<char> phoneNumber) {
if (phoneNumber.Length==0) return null;
var isFirstDigit = true;
DigitInfo? digitInfo = null;
Country? country = null;
foreach (var digitChar in phoneNumber) {
var digitIndex = digitChar - '0';
if (isFirstDigit) {
isFirstDigit = false;
digitInfo = ByPhone[digitIndex];
} else {
if (digitInfo!.Digits is null) return country;
digitInfo = digitInfo.Digits[digitIndex];
}
if (digitInfo is null) return country;
country = digitInfo.Country??country;
}
return country;
}
बाकी कोड (दुनिया के हर देश के लिए digitInfos, टेस्ट कोड, ...) यहां पोस्ट किए जाने के लिए बहुत बड़ा है, लेकिन यह Github पर पाया जा सकता है:
https://github.com/PeterHuberSg/WpfhindowsLib/blob /मास्टर / WWFWindowsLib/CountryCode.cs
कोड एक WPF TextBox का हिस्सा है और लाइब्रेरी में ईमेल पतों आदि के लिए अन्य नियंत्रण भी शामिल हैं। एक अधिक विस्तृत विवरण कोडप्रोजेक्ट पर है: अंतर्राष्ट्रीय फोन नंबर सत्यापन विस्तार से बताया गया