Laden...

[gelöst] Algorithmus zur Telefonnummeridentifikation

Erstellt von Andreas.May vor 16 Jahren Letzter Beitrag vor 16 Jahren 4.362 Views
Andreas.May Themenstarter:in
915 Beiträge seit 2006
vor 16 Jahren
[gelöst] Algorithmus zur Telefonnummeridentifikation

Hallo,

habe einen kleinen Algorithmus geschrieben um telefonnumemrn zu identifizieren.
Leider bin ich mir nicht sicher ob der Weg den ich eingeschlagen wirklich der Richtige ist. Leider muss ich dafür etwas ausholen...

Bisher habe ich eine normalisierung der Telefonnummern vorgenommen und diese daher in einheitlichen Formaten vorliegen:

+(41) 07731 / 6470 - 2 wird zu 0041773164702
6470 wird zu 004977716470
usw.

Die Normierung sieht also immer so aus:
00<Ländervorwahl><Ortsvorwahl ohne 0><Rufnummer><Nebenstelle>

Bekomme ich also einen Anruf von Tante Louise so erhallte ich eine normierte nummer. Z.B. 004977716570.

Für das Suchen der Telefonnummer habe ich die Vorgabe das man anhand von variablen Anzahl von Stellen ungefähre Nummern suchen kann. Diese liegen zwischen 0 für einen Volltreffer bis 1-7 Stellen. Momentan habe ich das so gelöst das ich eine SQL Abfrage starte die mir alle Telefonnummern zurückliefert deren letzten Stellen mit der des Suchkriteriums übereinstimmen.

Sprich, bei Tante Louise 004977716570 mit 4 Stellen als Suchekriterium. Erhallte ich alle Telefonnummern die mit *6570 Enden.

Jetzt zum Problem ich soll die "Trefferqualität" darstellen mit 3 bunten Bildern 😉

Grün = 100%ige Treffer
Gelb = 99-50%ige Treffer
Rot = 49-20%ige Treffer
Alles unter 20% fällt raus...

Also habe ich mir gedacht, ich überprüfe jede Stelle von beginn an ob diese mit dem Suchkriterium überinstimmt.

Bei Tante Louise mit Suchkriterium "004977716570" mit 4 Stellen als Suche, erhallte ich also ersteinmal 3 Treffer die mit *6570 Enden.

(Die Leerzeichen sind nur der Übersichtlichkeit drinnen)

1.) 0041 7561 6570
2.) 0049 7772 6570
3.) 0049 7771 6570

1.)
0041 7561 6570 (1. Datensatz)
0049 7771 6570 (Tante Louise)
TTTT T = 5 Treffer

2.)
0049 7772 6570 (2. Datensatz)
0049 7771 6570 (Tante Louise)
TTTT TTT = 7 Treffer

3.)
0049 7771 6570 (3. Datensatz)
0049 7771 6570 (Tante Louise)
TTTT TTTT TTTT = 12 Treffer

Soo nun rechne ich das Prozentual um, dafür nehme ich den Treffer und teile diese durch die Länge der gesuchten Telefonnummer.

Bei Tante Louise wäre das bei der Nummer 004977716570 die Zeichenlänge 12;

1.) 5 / 12 = 0,41~ = 41% = Rot
2.) 7 / 12 = 0,58~ = 58% = Gelb
3.) 12 / 12 = 1 = 100% = Grün

Soo bis jtzt sieht es so aus als wäre das ganze absoluter Unsinn, da man Tante Louise ja eigentlich viel einfacher finden könnte und ich gleich weis habe ich Tante Louise in der Datenbank ja oder nein.

Nur geht es dabei um etwas anderes, ich lege eine Telefonnummer von einer Zentrale an, werde aber von einen Mitarbeiter der Zentrale "mit Nebenstellennummer" angerufen. So soll ich ermitteln können, zu welcher wahrscheinlichkeit der Anrufer, zu welcher Firma gehören könnte - wenn ich diesen noch nicht als Kontak gespeichert habe. Oder ich möchte nach Telefonnummern suchen können bei denen ich nur Teilweise die Telefonnummer kenne - so komisch das auch klingt 😉

Soweit habe ich bereits alles schon realisiert aber ich fürchte das dieser Weg nicht der Richtige zur berechnung einer Trefferwahrscheinlichkeit ist. Aber irgendwie stehe ich zurzeit auf dem Schlauch... Vielleicht weis ja jemand einen bessere Weg.

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

U
1.688 Beiträge seit 2007
vor 16 Jahren

Hallo,

mag sein, dass ich noch nicht alles ganz verstanden habe. Aber warum vergleichst Du die Nummern von hinten? Dort sind doch für Deine Anwendungsfälle die meisten Unterschiede.

Ja, Telefone machen das (meist?) so, um Namen anzuzeigen. Doch ist es hier nicht eher unsinnig, weiter zu suchen, wenn sich schon die Landesvorwahl unterscheidet? Auch Anrufe aus Telefonzentralen unterscheiden sich eben gerade in den hinteren Nummern (den Nebenstellen).

4.506 Beiträge seit 2004
vor 16 Jahren

Hallo Andreas.May,

grundsätzlich ist doch so alles richtig was Du machst (Ich sehe nicht, dass Du Telefonnummern von hinten vergleichst).

Eine Erkennung, ob eine Rufnummer von einer Telefonzentrale, oder von einer Nebenstelle kommt ist ohne Telekom Informationen schlichtweg unmöglich.

Aber folgende Informationen könnten Dir vielleicht weiterhelfen:
Um über einen Deutschen Telefonanschluß (Ausland fällt vollständig aus dem Rahmen!) eindeutig identifiziert werden zu können bedarf es eine Präzession von einer Telefonnummer mit maximal 10 Stellen. Davon werden aber die Stellen für eine Ortsvorwahl abgezogen.
Normalerweise z.B. 1234-911876

Kürzere Nummern sind nur noch aus Kompatibilitätszwecken aus dem Deutschen Post Telefonnetz erhalten, werden aber neu nicht mehr vergeben.

Problem: Großstädten. Frankfurt hat so viele Telefonanschlüsse, dass ein Nummernkreis mit 6 Stellen nicht ausreichen würde. Lösung, die hier praktiziert wird: Die Ortsvorwahl wird verkürzt (Frankfurt: 69 -> Damit sind es dann 8 Stellen)

Jetzt gibt es auch noch die Problematik mit Telefonzentralen. Diese können einen erweiterten Nummernkreis aufnehmen. So ist z.B. auch folgende Nummer "gültig" (syntaktisch):
1234-911876 333

Da wird die "333" dann einfach an den Anschluß 1234-911876 weitergeleitet, ohne dass das vom Telefonprovider verarbeitet wird. Die Telefonzentrale nimmt dann die 333 entgegen und kann diese dann an eine spezielle Nebenstelle verbinden (verbinden ist hier technisch gesehen wirklich das richtige Wort).

Also:

  • Es bedarf Informationen über alle Ortskennzahlen, damit eine Abgrenzung zwischen "eigentlicher" Nummer und der Ortskennzahl ermöglicht wird.
  • Es bedarf noch weiterer Informationen, ob es sich um eine alte "Deutsche Post" Nummer handelt, und diese dann die vorgeschriebene Anzahl Stellen unterschreitet.

-> Ich unterstelle mal, dass in Deinem Fall hier diese Informationen nicht zu beschaffen sind, zumal sie immer aktuell gehalten werden müssten.

Quintessenz:
Ich behaupte, dass Deine Überprüfung auf Trefferwahrscheinlichkeit das Maximum an überprüfungsmöglichkeit ist, und dass das so weit ich das Verstanden hab in Ordnung ist.

*Jetzt hab ich aber Schwielen an den Händen 😉*

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

3.971 Beiträge seit 2006
vor 16 Jahren

Aus meiner Zeit (Azubi) bei der Telekom, weiß ich, dass eine Rufnummer (ohne führende Nullen) maximal 12 stellig ist. Auf dem Display erscheinen allerdings nicht mehr als 10. Anlagenanschlüssen fangen immer mit 11 und dann eine Nummer.

Eine Liste (Access-Datenbank) gibts unter Bundesnetzagentur. Die Liste ist von Dezember 12.

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

U
1.688 Beiträge seit 2007
vor 16 Jahren

Hallo,

(Ich sehe nicht, dass Du Telefonnummern von hinten vergleichst).

Momentan habe ich das so gelöst das ich eine SQL Abfrage starte die mir alle Telefonnummern zurückliefert deren letzten Stellen mit der des Suchkriteriums übereinstimmen.

Sprich, bei Tante Louise 004977716570 mit 4 Stellen als Suchekriterium. Erhallte ich alle Telefonnummern die mit *6570 Enden.

Insofern würde doch Beispiele wie die Nebenstellennummern 1234-911876 333 von vornherein gar nicht berücksichtigt.

Andreas.May Themenstarter:in
915 Beiträge seit 2006
vor 16 Jahren

Super vielen Dank euch allen!
Die Nummern von vorne durchzugehen ist wirklich besser, habs mir mal Anhand der Liste vom ONB angesehen und ausprobiert.

Bei Tante Louise wäre bei 004977716570 mit 4 Stellen das Suchkriterium 00497771*.
Somit bekäme ich viel weniger falsche Treffer bei denen z.B. die Länder oder gar Ortsvorwahl schonmal falsch ist.

Danach kann ich ja wie gehabt durchgehen 🙂

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

4.506 Beiträge seit 2004
vor 16 Jahren

Hallo ujr und Andreas.May,

ist mir überhaupt nicht in den Sinn gekommen die TelNr. von hinten anfangen zu vergleichen, und den von ujr zitierten Abschnitt muss ich irgendwie überlesen haben.

Aber schön, wenn sich alle in der Lösung einig sind 😁

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

Andreas.May Themenstarter:in
915 Beiträge seit 2006
vor 16 Jahren

Hrhr, na ja wenn man es recht überlegt ist die Lösung ja ziemlich einfach. Nur wenn man Tagelang irgendwelche T-SQL normierungen angeht sieht man den Wald vor lauter Bäumen nicht mehr 🙂

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(