Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Klatsch und Tratsch (https://www.delphipraxis.net/34-klatsch-und-tratsch/)
-   -   Telefonnummer check (https://www.delphipraxis.net/185349-telefonnummer-check.html)

p80286 2. Jun 2015 12:55

Telefonnummer check
 
Hallo zusammen,
ich darf mir aussuchen ob ich arbeite!
Soeben wurde mir eine erkleckliche Anzahl Telefon/Faxnummern auf den Tisch gekippt, als Garnutur die Frage "Kann man die in das richtige Format bringen und überprüfen?"
Darum meine Frage an Euch, gibt es so etwas wie ein Wählsimulatior bzw. ein Prüfprogramm für Telefonnummern wobei die Kreativität der Erfasser kaum zu schlagen ist:
  • 123456
  • 12 34 56
  • 0209123456
  • 02 09 12 34 56
  • 0209-123456
  • 209-123456
  • 49-209-123456
  • 0049 (0)209-123456
  • +49-209-123456
  • ++49/209/123-456
Ein paar Variationen habe ich jetzt bestimmt vergessen. Bevor ich versuche alles selbst zu machen, gibt's da schon was fertiges oder habt Ihr einen Tip wo man z.B. Listen von Vorwahlen etc. bekommen kann.
(mein Vorteil, wenn ich sage, das dauert zu lange geht's an irgendeinen externen Dienstleister:stupid:)


vielen dank im Vorraus
K-H

Sir Rufo 2. Jun 2015 13:02

AW: Telefonnummer check
 
Wenn du neben den Eingabewerten auch noch das erwartete Ergebnis schreiben würdest, dann könnte man dazu auch etwas sagen :stupid:

JasonDX 2. Jun 2015 13:35

AW: Telefonnummer check
 
Wenn du nur nationale Telefonnummern hast, sollte es machbar sein. Es gibt höchstwahrscheinlich eine Spezifikation, und relativ sicher auch eine Library, die das prüft.

Ansonsten, wenn du auch internationale Nummern hast, hast du meiner Erfahrung nach 2 Optionen: Finde eine library online, die das für dich erledigt, oder gibs auf/ab.
Wir haben intern eine Bibliothek die internationale Telefonnummern validieren und formatieren muss, und ein knapper Blick darüber zeigt, wie chaotisch das ganze sein kann. Das kann bei "einfachen" Dingen anfangen wie optionale oder verpflichtende führende Nullen bei Vorwahlen, bis hin zu Telefonnummern, keine Nummern, sondern Email-Adressen sind.

Was hier mit Zeitzonen erklärt wird, gilt IMO auch für Telefonnummern.

stahli 2. Jun 2015 14:07

AW: Telefonnummer check
 
Der DP-abtrünnige - schämen sollte er sich! - jensw_2000 befasst sich mit Rufnummernnormalisierung und diversen Prüfungen...
Vielleicht gibt es dort etwas für Euch: www.innovasoft.de

Kralle 2. Jun 2015 14:33

AW: Telefonnummer check
 
Moin,

hier gibt es alle deutschen Vorwahlnummer als PDF http://www.bundesnetzagentur.de/Shar...cationFile&v=3

Die Nummernspalte in z.B. eine Textdatei kopieren und Du hast schonmal eine Vergleichsliste.

Zitat:

Zitat von p80286 (Beitrag 1303891)
  • 123456
  • 12 34 56

    Keine Null am Anfang: Rufnummer im eigenen Vorwahlnummernbereich. Leerzeichen raus und mit entsprechender Vorwahl speichern.
  • 0209123456
  • 02 09 12 34 56
  • 0209-123456

    Null am Anfang: Leerzeichen raus, die ersten 3, dann 4 und dann 5 Nummern (wenn keine Bindestrich enthalten ist) mit obiges Liste vergleichen
  • 209-123456

    Hmmm.
  • 49-209-123456
  • 0049 (0)209-123456
  • +49-209-123456
  • ++49/209/123-456

    hier überlegen ob Du solche Nummern mit 00 oder +49 oder ++49 schreiben willst und entsprechend anpassen und den Mittelteil mit obigesr Liste vergleichen

Welche Strukturen es bei deutschen Rufnummern gibt findest Du hier:
http://www.bundesnetzagentur.de/cln_...html?nn=268384

Vielleicht hilft das als Anschubs weiter.

Gruß HEiko

p80286 2. Jun 2015 15:13

AW: Telefonnummer check
 
Erst einmal vielen Dank!

@Sir Rufo
Das Ergebnis sollte eine gültige formatierte Rufnummer sein - in diesem Beispiel +49(209)123456 oder aber eine Fehlermeldung "ungültige Ländervorwahl" oder etwas ähnliches.

@Kralle
ich schau da mal rein vielen Dank!
(Internationale Vorwahlen gibt's ja wie Sand am Meer)

@Stahli & @JasonDX
Das Angebot des Abtrünnigen scheint zu passen, dann wäre das Zeug auch weg!



K-H

himitsu 2. Jun 2015 16:06

AW: Telefonnummer check
 
209-123456
49-209-123456

Bei den Beiden ist eh alles im Arsch.

Alles, was man nicht eingeben kann und man nirgendwo rauskommt (jedenfalls nicht da, wo gewollt), kann nicht automatisch behandelt werden, denn ohne die 0 oder das + am Anfang, sind das "eindeutig" lokale Telefonnummern, im aktuellen Vorwahlbereich.
Daß es sich eigentlich um 0 und 00/+ handelt, ist ja nur durch die ebenfalls zufälligen mit angezeigten anderen Datensätze erkenntlich, also für den Menschen zumindestens.


Du kannst dir natürlich auch elektronische Telefonbücher besorgen und die Telefonnummern damit abgleichen, über eine entsprechende Fuzzy-Logic.

Dejan Vu 2. Jun 2015 17:09

AW: Telefonnummer check
 
DIN5008, E.123 bringt dich nicht weiter?

p80286 8. Jun 2015 13:39

AW: Telefonnummer check
 
Zitat:

Zitat von Dejan Vu (Beitrag 1303932)
DIN5008, E.123 bringt dich nicht weiter?

pardon, daß ich mich erst jetzt rühre,
Nein, Formatvorschriften gibt es ja zur genüge,nur niemanden der sich daran hält:stupid:

Gruß
K-H

Luckie 8. Jun 2015 13:52

AW: Telefonnummer check
 
Ist es wirklich so schwer oder denke ich zu simpel?

1. Alle Zeichen löschen die keine Ziffer sind (Klammer, Leerzeichen, Bindestrich, ...)
2a. Fängt die Ziffernfolge mit 0 an haben wir eine Telefonnumer mit Vorwahl. Optional: Ziffernfolge in einer Vorwahl Datenbank suchen (auch Mobilfunkanbieter überprüfen), um sie mit einem Leerzeichen von eigentlichen Telefonnummer abzutrennen, wenn gewünscht.
2b. Fangt die Ziffernfolge nicht mit einer 0 an und ist länger als acht Ziffern, haben wir eine Telefonnumer mit Ländervorwahl. Plus davor setzen. Optional: In einer Datenbank Ländervorwahl suchen, dann Vorwahl suchen, dann entsprechen mit Leerzeichen trennen, wenn gewünscht.
3. Ziffernfolge entsprechend er Formatierungsregeln formatieren.

vagtler 8. Jun 2015 13:54

AW: Telefonnummer check
 
Ich glaube, 2b ist schon ein Problem...

Luckie 8. Jun 2015 13:59

AW: Telefonnummer check
 
In wie fern?

p80286 8. Jun 2015 14:22

AW: Telefonnummer check
 
Wenn Du meinen Arbeitgeber erreichen willst, hast du immer eine 7Stellige Durchwahl, es soll sogar 9 Stellige Nummern in Deutschland geben. In den USA sind 9 stellige Nummern soweit ich weiß alles andere als unüblich.
Eigentlich bräuchte es eine "dummy-Wählanlage":
Geht nach dem Wählen ein Ruf hinaus, ist es eine gültige Nummer, ob der Teilnehmer der richtige ist, steht auf einem anderen Blatt. Geht der Ruf noch während des Wählens heraus, ist zumindest der erste Teil der Nummer gültig, ob der Teilnehmer der richtige ist, ist dann doch sehr fraglich.
Und kommt "Kein Anschluß unter dieser Nummer" oder etwas entsprechendes, dann ist die Nummer wohl Schrott.

Aber das ist jetzt nicht mehr mein Problem:stupid:

Gruß
K-H

himitsu 8. Jun 2015 15:23

AW: Telefonnummer check
 
Zitat:

Zitat von Luckie (Beitrag 1304526)
1. Alle Zeichen löschen die keine Ziffer sind (Klammer, Leerzeichen, Bindestrich, ...)

Was passiert eigentlich, wenn man die Städtevorwahl hinter der Landesvorwahl mit 0 eingibt?

Zitat:

0049 (0)209-1
Eigentlich wird diese 0 ja nicht eingegeben.

Popov 8. Jun 2015 15:39

AW: Telefonnummer check
 
Zitat:

Zitat von Luckie (Beitrag 1304526)
Ist es wirklich so schwer oder denke ich zu simpel?

1. Alle Zeichen löschen die keine Ziffer sind (Klammer, Leerzeichen, Bindestrich, ...)

Jajn. Ich weiß nicht wie das heute ist, aber früher musste man bei einer Telefonaanlage für die Weiterleitung etwa eine Sekunde (etwa) Pause einlegen. Deshalb signalisierte gelegentlich das Bindestrich die Pause die einzulegen war.

Ansonsten stimme ich dir zu, einfach alles was nicht Zahl oder + ist, weg.

- hat die Telefonnummer keine 0 davor, ist es eine Nummer für Ortsgespräch.
- hat die Telefonnummer eine 0 davor, ist es ein Ferngespräch, aber innerhalb des Landes. Die 0 sagt aus, dass es eine Vorwahl ist. Folgt eine 2 bis 9, sind das Ortsvorwahlen. Eine 1 an der zweiten Stelle nach der 0 hat eine andere Bedeutung, welche, hängt von der nächsten Zahl ab. So sind 015... Handynummer, 018... Servicenummer, usw. Zurück zu der 2 bis 9 an zweiter Stelle. In der Regel Ortsvorwahlen, aber 0700, 0800, 0900, usw. haben auch eine spezielle Bedeutung.
- hat die Telefonnummer zwei 0, also 00, ist es eine internationale Vorwahl, zb 0049 für Deutschland
- alternativ kann man statt zwei Nullen, also 0049 auch +49 eingeben.

//EDIT:

Änderung in Grau

sh17 8. Jun 2015 15:49

AW: Telefonnummer check
 
es gibt aber auch 5-stellige (inkl. 0) Ortsvorwahlen in Deutschland...

In der Schweiz sind sie fest zweistellig, soweit ich das richtig weiss

sh17 8. Jun 2015 15:50

AW: Telefonnummer check
 
Zitat:

Zitat von himitsu (Beitrag 1304538)
Zitat:

Zitat von Luckie (Beitrag 1304526)
1. Alle Zeichen löschen die keine Ziffer sind (Klammer, Leerzeichen, Bindestrich, ...)

Was passiert eigentlich, wenn man die Städtevorwahl hinter der Landesvorwahl mit 0 eingibt?

Zitat:

0049 (0)209-1
Eigentlich wird diese 0 ja nicht eingegeben.

geht nicht, darf nicht eingegeben werden.

Sir Rufo 8. Jun 2015 16:02

AW: Telefonnummer check
 
Geht nicht ist keine Lösung - die Frage ist, wie soll darauf reagiert werden bzw. was wird erwartet?

Das war ja auch meine Frage ganz am Anfang.

Welches Ergebnis wird erwartet, wenn
Delphi-Quellcode:
'0049(0)209-123456'
verarbeitet werden soll?
Es ist durchaus denkbar, auf diese
Delphi-Quellcode:
'(0)'
zu reagieren (z.B. weglassen, wenn davor eine internationale Vorwahl vorhanden ist).

Das wird dann aber schon etwas spannender, denn damit das korrekt und immer funktioniert, muss man alle Vorwahlziffern und Landesvorwahlen kennen und entsprechend behandeln. Das ist eben aufwändiger, als wenn man diese Darstellung einfach als ungültig abweisen kann.

BTW. Unterschiedliche Länder haben unterschiedliche Vorwahlziffern, das ist nicht immer zwangsweise die 0 oder 00 (in Deutschland ja, woanders kann es anders sein).

sh17 8. Jun 2015 16:25

AW: Telefonnummer check
 
Ich denke mal man kommt ohne Vorwahlenliste nicht weiter, eben wegen unterschiedlicher Längen.

(Wäre das nicht was für ein gemeinsames Projekt bei Delphi-Praxis-GitHub)

p80286 8. Jun 2015 16:32

AW: Telefonnummer check
 
Zitat:

Zitat von Sir Rufo (Beitrag 1304550)
.

Welches Ergebnis wird erwartet, wenn
Delphi-Quellcode:
'0049(0)209-123456'
verarbeitet werden soll?

das Ergebnis sollte
Delphi-Quellcode:
+49(209)123456
sein.
Und diese Tel.Nummer sollte gültig sein.
Wie Dejan Vu schon angedeutet hat, gibt es verschiede Normen/Vorschläge wie Telefonnummern notiert werden sollten. Und Benutzer sollten sich daran halten.

Zitat:

Zitat von Sir Rufo (Beitrag 1304550)
BTW. Unterschiedliche Länder haben unterschiedliche Vorwahlziffern, das ist nicht immer zwangsweise die 0 oder 00 (in Deutschland ja, woanders kann es anders sein).

[/QUOTE]
Ein paar Informationen sind hier zu finden.

Gruß
K-H

Zitat:

Zitat von sh17 (Beitrag 1304559)
Ich denke mal man kommt ohne Vorwahlenliste nicht weiter, eben wegen unterschiedlicher Längen.

(Wäre das nicht was für ein gemeinsames Projekt bei Delphi-Praxis-GitHub)

Hier findet man z.B. die internationalen Vorwahlen:
http://www.wtng.info/wtng-cod.html#WZ3

himitsu 8. Jun 2015 17:17

AW: Telefonnummer check
 
Und jetzt noch eine Telefonanlage, wo man z.B. mit einer 0 erstmal aus der Firma raus muß, um ins Festnetz zu kommen. :angle2:

Dejan Vu 8. Jun 2015 17:39

AW: Telefonnummer check
 
Zitat:

Zitat von p80286 (Beitrag 1304523)
Zitat:

Zitat von Dejan Vu (Beitrag 1303932)
DIN5008, E.123 bringt dich nicht weiter?

pardon, daß ich mich erst jetzt rühre,
Nein, Formatvorschriften gibt es ja zur genüge,nur niemanden der sich daran hält.

Über diese Vorschriften habe ich eine Heuristik entwickelt, die alle möglichen Telefonnummern, auch solche der Form (030) 12345-67/80 (das sind 2), +4969123456789 und +49(0)8913123123 erkennt bzw. als korrekt oder falsch klassiert. Diese Vorschriften definieren nämlich, wie eine vollständige Nummer aussieht bzw. wie viele Ziffern sie in dem jeweiligen Land hat bzw. haben muss. Das ist ein Ansatzpunkt, um die Intension des Verfassers der Zahlenkolonne zu erraten, denn deine Heuristik soll ja keine zufälligen Ziffern-Sonderzeichenfolgen erkennen sondern Telefonnummern. Und sie soll nur die Spreu vom Weizen trennen.

Und manchmal geht es eben nicht: Mit 049361... kann Erfurt mit D-Vorwahl (0 vergessen) oder Leezdorf gemeint sein. Diese Mehrdeutigkeiten sind aber selten.

Mit einer Vorwahlliste ist dann der Rest doch kein Problem mehr.

Klaus01 8. Jun 2015 17:41

AW: Telefonnummer check
 
Zitat:

Zitat von himitsu (Beitrag 1304569)
Und jetzt noch eine Telefonanlage, wo man z.B. mit einer 0 erstmal aus der Firma raus muß, um ins Festnetz zu kommen. :angle2:

.. das hat ja primär nichts mehr mit der Gültigkeit einer Telefonnummmer zu tun.
Das ist eine Abhängigkeit von wo ich die Telefonnummer nutzen will.

Grüße
Klaus

Luckie 8. Jun 2015 19:40

AW: Telefonnummer check
 
Zitat:

Zitat von himitsu (Beitrag 1304569)
Und jetzt noch eine Telefonanlage, wo man z.B. mit einer 0 erstmal aus der Firma raus muß, um ins Festnetz zu kommen. :angle2:

Die null gehört aber nicht zur Telefonnummer, wie sie im Telefonbuch steht.

himitsu 8. Jun 2015 22:12

AW: Telefonnummer check
 
Im Telefonbuch der Firma schon. :angle2:

Sir Rufo 8. Jun 2015 22:33

AW: Telefonnummer check
 
Zitat:

Zitat von himitsu (Beitrag 1304599)
Im Telefonbuch der Firma schon. :angle2:

Definitiv nein, diese Amtsholkennziffer gehört zum Wahl-Kontext, und diese muss auch nicht zwangsläufig eine 0 sein.

Jasocul 9. Jun 2015 06:44

AW: Telefonnummer check
 
Um die Verwirrung auf die Spitze zu treiben:
In manchen Ländern muss die führende 0 der Ortskennziffer auch bei Auslandstelefonaten mitgewählt werden. Oder es darf nur eine 0 bei der Landeskennziffer verwendet werden.
Zitat:

Aber welche Nummer muss nun gewählt werden?
Um aus dem Ausland z.B. nach Berlin (Deutschland) zu telefonieren ist folgende Telefonnummer zu wählen:

0049-30-Teilnehmer-Telefonnummer

Dabei steht “00″ für den Zugang zum lokalen Telefonnetz, die “49″ steht für die Länderkennung von Deutschland, und die “30″ ist die Ortsvorwahl von Berlin. Angehängt wird dann die normale Teilnehmer-Telefonnummer.
Die führende “0″ muss in manchen Ländern jedoch weggelassen werden. Je nachdem von wo aus Sie also nach Deutschland telefonieren kann die Nummer auch wie folgt aussehen:

049-30-Teilnehmer-Telefonnummer

Vielleicht fragen Sie sich nun, warum die zu wählende Ortsvorwahl für Berlin bei diesen Beispielen “30″ und nicht “030″ lautet? Ganz einfach. Die führende Null ist die sogenannte Verkehrsausscheidungsziffer, die bei Auslandsanrufen meist wegfällt. Eine Ausnahme ist hier z.B. Italien, wo diese “0″ immer mitgewählt werden muss.
Quelle

Dejan Vu 9. Jun 2015 06:49

AW: Telefonnummer check
 
Ich hatte den Eindruck, hier ginge es um Telefonnummern aus Deutschland.

Jasocul 9. Jun 2015 07:00

AW: Telefonnummer check
 
Zitat:

Zitat von Dejan Vu (Beitrag 1304608)
Ich hatte den Eindruck, hier ginge es um Telefonnummern aus Deutschland.

Glaube ich nicht. Der TE hat ja zwischendurch selbst auf Nummern anderer Länder hingewiesen.
Und wenn die Nummern auf das Handy übertragen werden, damit bei einer (Geschäfts-)Reise ins Büro telefoniert werden kann?
Ich meine mich auch erinnern zu können, dass es Länder gibt, bei denen man auch aus Deutschland die Ortskennziffer mitwählen muss. Aber es ist schon ein paar Jahre her, dass ich mich mit dem Problem rumgeschlagen habe. Kann also durchaus sein, dass es da inzwischen eine Angleichung gegeben hat.

Sir Rufo 9. Jun 2015 07:03

AW: Telefonnummer check
 
Zitat:

Zitat von Dejan Vu (Beitrag 1304608)
Ich hatte den Eindruck, hier ginge es um Telefonnummern aus Deutschland.

Ja, wenn man den gleichen Tunnelblick wie die Ersteller der Testdaten hat :mrgreen:

Aber wenn man einmal dran ist, dann kann man das auch gleich generell lösen, bzw. diese generelle Lösing mit im Auge haben.

Dejan Vu 9. Jun 2015 07:11

AW: Telefonnummer check
 
Ich wollte den Rahmen des Threads nicht sprengen, daher mein Einwand. Allerdings habe ich nicht alle Posts im Kopf.

Aus USA muss man z.B. 1149 wählen, um nach D zu kommen. Deshalb ist die internationale Vorwahl auch ein '+', sodass man seine Nummern auch im Ausland wählen kann.

Zunächst muss man aber die Nummern korrekt erkennen und dazu ist es notwendig, auch das Ursprungsland zu kennen, also das Land, in dem die Nummer eingetippt wurde.

Meine Lösung geht davon aus, das die Ersteller der Nummern in einem Land leben, d.h. sie haben entweder die Nummer ohne Vorwahl, oder mit Ortsvorwahl oder mit internationaler Vorwahl eingegeben. Dann haben Sie Trennzeichen oder keine und trennen unterschiedliche Nummern mit einem Sonderzeichen, wobei u.U. nur die letzten Ziffern getrennt sind: 0123-456789 / 90. Das Verfahren entfernt bzw. normalisiert nacheinander störende Zeichen und Fragmente. Am Ende wird versucht, die Doppelung aufzulösen. Was dann übrigbleibt, sieht wie eine formatierte Nummer aus und besteht meine Unittests.

Gemäß dem Motto 'YAGNI' würde ich zudem keine Weltlösung anstreben, sondern das Problem im Rahmen der Aufgabenstellung lösen, wobei ich Erweiterungsmöglichkeiten beim Design nicht außer acht lasse.

Sir Rufo 9. Jun 2015 07:19

AW: Telefonnummer check
 
Ja, wie schon erwähnt benötigt man für die korrekte Verarbeitung/Interpretation den Kontext. Genauso wie man das für Dezimalzahlen benötigt, die von einem String wieder in eine Zahl überführt werden sollen.

Jasocul 9. Jun 2015 07:28

AW: Telefonnummer check
 
Zitat:

Zitat von Dejan Vu (Beitrag 1304613)
Ich wollte den Rahmen des Threads nicht sprengen, daher mein Einwand.

Der Einwand ist auch legitim. Ob die zusätzlichen Dinge berücksichtigt werden sollen, muss der TE entscheiden. Ich wollte das nur nicht unerwähnt lassen, weil ich selbst schonmal darüber gestolpert bin.

Sir Rufo 9. Jun 2015 07:43

AW: Telefonnummer check
 
So etwas in der Art hatten wir auch schon

http://www.delphipraxis.net/1251627-post12.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz