2013-07-11 14 views
9

Ich erhalte Telefonnummern von einem mobilen Gerät, Format variiert von internationalen Format oder nicht.Vergleichen von "Handy-Nummern" - und/oder internationalen Format

Szenario (ZA-Formate nur für das Beispiel):

Registrierte Zahlen in der Datenbank sind immer internationales Format: +27827177982

Zahlen I empfangen kann beispielsweise variieren +27827177982 = 27827177982 = 0827177982 - internationale Vorwahl für Nummer +27

Wie kann ich es das internationale Format entsprechen, auch wenn ich das internationale Format nicht erhalten ???


Beachten Sie:

ich nicht Umwandlung tun kann nur für 1-Region.

Gibt es eine einfache Möglichkeit zum Vergleichen von Mobilfunknummern für alle Regionen?

Präfixe liegt in einer Menge von Zeichen Referenz: http://en.wikipedia.org/wiki/List_of_country_calling_codes


Meine Ideen:

  • Vergleichen Sie die letzten 9 Zeichen der Zahl, wird dies die Region Präfix ausschließen .. Aber hat jede Region nur 9 Zeichen ohne Präfix?

  • Schleife durch die Datenbank Vergleichen Sie die Telefonnummern ein paar Mal, z. überprüfen letzten 9 Zahlen - wenn keine Übereinstimmung - prüfen letzten 10 usw. (aber kann unerwünschte Begegnungen verursachen)


Jede Hilfe sehr

+0

das Herkunftsland von mindestens einer Telefonnummer zu kennen (vorausgesetzt, Sie immer zwei vergleichen), ist hier sehr hilfreich ... Dann können Sie einen festen Algorithmus bauen ... Ich habe das schon ein paar Mal gemacht, lass es mich wissen, wenn du noch Hilfe brauchst :) – Grantly

Antwort

8

geschätzt würde Sie möchten aussehen dazu eine Bibliothek zu verwenden. Zum Beispiel Google libphonenumber Bibliothek mit einem C# port being here. Insbesondere können diese beiden Methoden einen Blick wert sein in (Hervorhebung von mir)

isNumberMatch - wird auf einem Konfidenzniveau, ob zwei Zahlen könnte gleich sein.

getExampleNumber/getExampleNumberByType - liefert gültige Beispiel Zahlen für alle Länder/Regionen, mit der Option angeben, welche Art von Beispiel Telefonnummer benötigt.

+0

Sieht sehr vielversprechend aus! Vielen Dank! Ich werde es versuchen und dich wissen lassen. –

+0

Froh ich könnte helfen :) – keyboardP

0

In den meisten Ländern (die USA eine bemerkenswerte Ausnahme), nicht-internationale Zahlen mit einem 0 beginnen, so wird die Lösung so etwas wie:

  • Wenn das Land auf einer Liste von Ausnahmen Behandle es speziell.
  • sonst
    • Wenn erste Zeichen 0, entfernen Sie es und international ist + Ländercode
    • Stellen Sie sicher, erste Zeichen hinzufügen.

Es gibt keine einfache Antwort auf diese, weil es keine international festgelegte Regeln sind nicht, wie Telefonnummern zu arbeiten.

0

Wie wäre es mit so etwas? Dies wird geschrieben aus der Spitze von meinem Kopf:

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.... 
}