2013-07-11 11 views
9

Otrzymuję numery telefonów z urządzeń przenośnych, format różni się od formatu międzynarodowego lub nie.Porównywanie "numerów komórkowych" i/lub formatu międzynarodowego

Scenariusz (ZA formatuje tylko dla przykładu):

Zarejestrowane numery w bazie danych są zawsze Format międzynarodowy: +27827177982

Liczby otrzymam może być różna, np +27827177982 = 27827177982 = 0827177982 - międzynarodowy prefiks dla numeru jest +27

Jak mogę dopasować go do formatu międzynarodowego chociaż nie otrzymują format międzynarodowy ???


Pamiętaj:

nie mogę zrobić konwersję tylko przez 1 regionu.

Czy istnieje prosty sposób porównywania numerów telefonów komórkowych we wszystkich regionach?

Prefiksy waha się w ilości znaków odniesienia: http://en.wikipedia.org/wiki/List_of_country_calling_codes


Moje pomysły:

  • Porównaj ostatnie 9 znaków numeru, to wyklucza regionu prefiks .. ale czy każdy region ma tylko "9 znaków bez prefiksu"?

  • Przeprowadź pętlę w bazie danych, porównując kilka numerów telefonicznych kilka razy, np. sprawdzić za ostatnie 9 liczb - jeśli nie pasuje - sprawdź ostatnich 10 itd (Ale może powodować niepożądane mecze)


Każda pomoc będzie znacznie Należy zauważyć

+0

znając kraj pochodzenia przynajmniej jeden numer telefonu (zakładając, że są zawsze porównując dwa), jest bardzo pomocny tutaj ... Następnie można zbudować solidne algorytmu ... Zrobiłem to kilka razy, daj mi znać, jeśli nadal potrzebujesz pomocy :) – Grantly

Odpowiedz

8

Możesz zajrzeć do korzystania z biblioteki do tego. Na przykład biblioteka Google libphonenumber z C# port being here. W szczególności, te dwie metody mogą być warte patrząc w kopalni (nacisk)

isNumberMatch - Pobiera poziom ufności czy dwa numery mogłyby być takie same.

getExampleNumber/getExampleNumberByType - zapewnia prawidłowe numery przykładem dla wszystkich krajów/regionów, z opcją wskazujący, który jest potrzebny typ numeru telefonu przykładem.

+0

Wygląda bardzo obiecująco! Dzięki! Dam ci szansę i dam ci znać. –

+0

Cieszę się, że mogłem pomóc :) – keyboardP

0

W większości krajów (USA jest chlubnym wyjątkiem), numery Niemiędzynarodowe rozpocząć od 0, więc rozwiązanie będzie coś takiego:

  • Jeśli kraj jest na liście wyjątków Zajmij się tym specjalnie.
  • inaczej
    • Jeśli pierwszy znak to 0, należy go usunąć i dodać międzynarodowego numeru kierunkowego
    • Zapewnienie pierwszy znak jest +.

Nie ma żadnej łatwej odpowiedzi na to, bo nie ma międzynarodowo ustalonych reguł nie, jak numery telefonów pracy.

0

Co powiecie na coś takiego. To jest odpisane szczycie mojej głowie:

string sourcePhoneNumber = "...."; 
string phoneNumber = "...."; 

int baseRegionCountryCode = 44; 

if (phoneNumber.StartsWith("0") && !phoneNumber.StartsWith("00")) 
{ 
    phoneNumber = phoneNumber.SubString(0, 1); 
    phoneNumber = String.Format("{0}{1}", baseRegionCountryCode, phoneNumber); 
} 
else if (phoneNumber.StartsWith("+")) 
{ 
    phoneNumber = phoneNumber.Replace("+", "00"); 
} 

if (sourcePhoneNumber == phoneNumber) 
{ 
    // do something awesome.... 
} 
Powiązane problemy