Indovinare il prefisso internazionale di un numero di telefono

4

Questo è il problema con cui sto lavorando: dato un numero di telefono da qualsiasi parte del mondo e alcune informazioni sulla posizione (stato, provincia, eventualmente nome del paese se sono fortunato, ecc.), restituire il codice ISO del paese per quel numero.

Ai fini di questa domanda, non mi concentrerò sulle informazioni sulla posizione, in quanto ciò fornisce una soluzione alternativa per determinare il codice paese che non ha nemmeno bisogno di utilizzare il numero di telefono (tuttavia, sarebbe utile per scopi di convalida)

Quando ho iniziato a lavorare sul problema, speravo che esistesse un modo deterministico per capirlo perché c'era una sorta di standard internazionale là fuori. Divenne immediatamente evidente che uno non esiste per i numeri di telefono. Esistono standard all'interno dei paesi, tra paesi (ad esempio, NANP ), ma nessuno standard internazionale unificato.

Giocare con libphonenumbers per alcuni giorni, sembra essere in grado di fornire una convalida accurata di un numero di telefono se mi viene fornito un codice paese (ad esempio: CA per Canada, GB per il Regno Unito, ecc.)

La libreria fornisce due metodi: isPossibleNumber e isValidNumberForRegion . Questo è il codice che sto usando

boolean isValid;
PhoneNumber number;
PhoneNumberUtil util = PhoneNumberUtil.getInstance();

String numStr = "(123) 456-7890";
for (String r : util.getSupportedRegions())
{
    try {
        // check if it's a possible number
        isValid = util.isPossibleNumber(numStr, r);
        if (isValid)
        {
            number = util.parse(numStr, r);

            // check if it's a valid number for the given region
            isValid = util.isValidNumberForRegion(number, r);
            if (isValid)
                System.out.println(r + ": " + number.getCountryCode() + ", " + number.getNationalNumber());
        }
    } catch (NumberParseException e)
    {
        e.printStackTrace();
    }
}

Quindi, ad esempio, se ho preso un numero di telefono arbitrario come +44 20 7930 4832 e l'ho eseguito attraverso il metodo, otterrei il seguente risultato

GB: 44, 2079304832

Ora, suppongo che mi venga dato il prefisso (a volte è lì). Se non mi fosse stato dato il prefisso, potrei ottenere qualcosa come 20 7930 4832 , ei risultati non sono così belli

DE: 49, 2079304832
US: 1, 2079304832
GB: 44, 2079304832
FI: 358, 2079304832
AX: 358, 2079304832
RS: 381, 2079304832
CN: 86, 2079304832
NZ: 64, 2079304832
IN: 91, 2079304832
IR: 98, 2079304832
JP: 81, 2079304832

Dato un numero di telefono, posso eseguirlo attraverso tutte le diverse regole per ogni paese e filtrare l'elenco da 244 a circa 20 o meno se sono fortunato, ma non sono sicuro se c'è qualcos'altro potrebbe fare per cercare di indovinare il paese.

    
posta That Umbrella Guy 13.02.2014 - 22:08
fonte

2 risposte

6

Gli switch telefonici possono capirlo, quindi ci deve essere un metodo per la follia. E, infatti, c'è:

I codici Paese sono disposti in un albero, dove si inizia dalla radice e si scende in un sottoalbero in base al valore di ogni cifra. Quando hai raggiunto un nodo foglia, sei a qualcosa che potrebbe essere un codice paese. Qualsiasi cifra oltre a quelle che hai utilizzato per trovare un nodo foglia in un albero dovrebbe essere decodificata in base al piano di numerazione locale.

Ad esempio, il codice Paese +1 è semplice: copre il piano di numerazione del Nord America. Qualsiasi numero che inizi con +1 rientrerà in tale piano; non ci sono altri paesi al suo interno con numeri come +12 o +123 . Se vuoi sapere se un numero +1 è gli Stati Uniti o il Canada, dovresti cercare le tre cifre successive (il prefisso) in una tabella che ti indicherà tali informazioni. (La Russia, il Kazakistan e alcuni altri territori sono allo stesso modo sul piano di numerazione russo, che occupa l'intero +7 del ramo.)

Il ramo +2 ha dieci rami secondari. Tutto +20 è Egitto, +27 è Sud Africa e +28 non è assegnato. Come sopra, nessun paese diverso dall'Egitto ha un codice paese che inizia con +20 . I rimanenti sette prefissi sono divisi in dieci modi ciascuno. +21 è suddivisa in dieci modi in +210 fino a +219 e copre paesi come Sud Sudan, Marocco e Algeria. +22 è diviso in +220 fino a +229 per Gambia, Senegal, Mauritania, ecc.

L'albero di cui hai bisogno per questo può essere facilmente generato da un elenco dei codici Paese e dei loro paesi.

    
risposta data 18.05.2014 - 00:06
fonte
2

[T]hese numbers aren't clients we're working with. They are the calls that our clients have made, which can be anyone, anywhere in the world. Depending on how the service provider chooses to format their data, we may or may not have all of the information we need.

Sempre pronto ad aiutare la comunità di intercettazioni! : D

Su una nota più seria, quanto impegno avresti bisogno di spendere? I requisiti di accuratezza sono rigorosi e hai bisogno di sottolineare quanto sei sicuro nella risposta?

Ci sono un certo numero di euristiche che immagino possano essere utili.

  1. Numeri di telefono ridotti a città / aree. Se il numero di telefono corrisponde a una città con 2 milioni di persone e un gruppo di città con 6k persone, è molto probabile che provenga dal paese con la grande città. (Forse lo stesso può essere fatto con i corrieri?)

  2. Hai un timestamp dalla chiamata? È più probabile che una chiamata avvenga vicino all'orario di lavoro. Ciò potrebbe rendere meno probabili alcuni fusi orari.

  3. Hai l'altro numero di telefono nella chiamata? È possibile che i chiamanti abbiano maggiori probabilità di trovarsi negli stessi paesi o vicini, o paesi che condividono almeno una lingua. Forse non è così utile, dato che dici che i tuoi clienti possono chiamare chiunque nel mondo.

  4. Hai una sorta di cronologia delle chiamate per client? Se non riesci a restringere un numero di telefono, ma è probabilmente in un paese con cui il tuo cliente comunica spesso, questo è un altro markup per quella probabilità.

Forse queste supposizioni extra possono ridurlo a tre o cinque probabili sospetti. Rimane comunque un gioco di indovinelli senza il prefisso internazionale. In particolare, mentre ogni criterio potrebbe renderlo più probabile che sia l'ABC nazionale, non corrispondere ai criteri non lo rende impossibile.

    
risposta data 17.04.2014 - 21:53
fonte

Leggi altre domande sui tag