MartinR: Telefonnummer in Datenbanken! Wenn das nur so einfach wäre.

Hi, bin die letzten Tage mal wieder auf ein richtig nettes Problem gestoßen das ich dem Forum nicht vorenthalten möchte. Jeder der schon mal eine Datenbank aufgesetzt hat kennt es. Erst schaut man wie das denn am klügsten umzusetzen ist. Schnell findet man ausführliche Erklärungen zu Normalformen um Redundanzen zu reduzieren und immer wieder den Hinweis Daten zu atomisieren. Ich hatte Telefonnummer bisher oft in einer char oder varchar gespeichert man möchte ja die führende 0 nicht verlieren. Dann dachte ich letztens das es doch super wäre hier ein etwas eleganteren Code zu erstellen.

So wie es im SelfHTML Forum vorgeschlagen wurde.

Naürlich hatte ich auch eine Anwendung für welche diese Änderung notwendig war. Also atomisieren (zerlegen) wir die Telefonnummer in ihre Komponenten. Da man den User nicht dazu zwingen will seine Telefonnummer in 200 Felder einzutragen und natürlich auch ein Datenbestand hat schreibt man sich dafür eine Funktion. Erstmal trivial gibt es eine Landesvorwahl also + oder 00 am Anfang. Dann einfach die nächsten zwei stellen z.B.49 für Deutschland speichern. Dummerweise gibt es Landesvorwahlen ein-, zwei- und dreistellig. Genauso geht es bei den Ortsvorwahlen weiter auch hier alles von zwei- bis fünfstellig zu finden.

Man könnte nun natürlich Arrays mit den Präfixen, Landesvorwahlen, Ortsvorwahlen usw. erzeugen und dann das passende suchen. Jedoch kommt mir das etwas sehr rechen- und speicherintensiv vor. Außerdem bräuchte man für jedes Land ein Array mit den Ortsvorwahlen.

Hat von euch jemand einen guten Vorschlag wie man so etwas elegant und professionel programmiert?

  1. Hi,

    Erstmal trivial gibt es eine Landesvorwahl also + oder 00 am Anfang.

    oder 011 oder 0011 oder …

    Dann einfach die nächsten zwei stellen z.B.49 für Deutschland speichern. Dummerweise gibt es Landesvorwahlen ein-, zwei- und dreistellig.

    Genauso geht es bei den Ortsvorwahlen weiter auch hier alles von zwei- bis fünfstellig zu finden.

    Ich glaube kaum, daß es unter der Landesvorwahl 378 zwei- oder gar noch-mehr-stellige Ortsvorwahlen gibt. 378 ist San Marino (bei etwas über 30000 Einwohnern im ganzen Staat lohnt sich das vermutlich nicht). Ähnliches dürfte für andere Zwergstaaten gelten …

    Man könnte nun natürlich Arrays mit den Präfixen, Landesvorwahlen, Ortsvorwahlen usw. erzeugen und dann das passende suchen. Jedoch kommt mir das etwas sehr rechen- und speicherintensiv vor. Außerdem bräuchte man für jedes Land ein Array mit den Ortsvorwahlen.

    Wenn Du prüfen/splitten willst, bleibt wohl nix anderes übrig, als entsprechende Listen vorzuhalten.

    Hat von euch jemand einen guten Vorschlag wie man so etwas elegant und professionel programmiert?

    Es gibt z.B. von Google eine API dafür (zumindest in Java als downloadbares jar-File, ob's das auch für andere Sprachen gibt, weiß ich nicht).

    cu,
    Andreas a/k/a MudGuard

    1. Die API schaue ich mir mal an Danke für den Tip!

  2. Hat von euch jemand einen guten Vorschlag wie man so etwas elegant und professionel programmiert?

    Für Deutschland hab ich mal sowas gemacht…

    1. Das sieht toll aus schaue ich mir an. Danke für den Hinweis!

      1. Hallo MartinR,

        Amtliche Quelle für deutsche Vorwahlen

        Rolf

        --
        sumpsi - posui - clusi
  3. Hallo MartinR,

    kann es dir passieren, dass du Nummern des NANP speichern musst? Die folgen einer anderen Logik als der Rest der Welt.

    Rolf

    --
    sumpsi - posui - clusi
    1. Stimmt in Nordamerika ist die Vorwahl +1 und dann folgt sie einer anderen Logik als bei uns. Was jedes Vorhaben noch komplizierter macht.