Progettazione per la convalida dei numeri di telefono

2

Diciamo che abbiamo un sistema di registrazione che finalizza la creazione di un account inviando SMS all'utente i dettagli del nuovo account.

Questo sistema potrebbe essere utilizzato da persone di tutto il mondo, quindi diciamo che stiamo usando un'API online che può inviare SMS a livello internazionale indipendentemente dal corriere del destinatario. Poiché vogliamo massimizzare l'uso di questo sistema, dovremmo ovviamente considerare i diversi modi in cui i diversi paesi rappresentano i numeri di telefono: (esempio sollevato da collegamento )

754-3010,         Local number 
(541) 754-3010,   Domestic number
+1-541-754-3010,  International
1-541-754-3010,   Dialed in the US
001-541-754-3010, Dialed from Germany
191 541 754 3010, Dialed from France

Qual è il modo migliore per rappresentare il numero di telefono immesso al momento dell'invio a un'API? Trivially (basato sulla mia propria rappresentanza locale in Australia) potrei pensare:

{   "nationCode" : "+61",   "number" : "0400100200" }

Tuttavia, come mostrano gli esempi precedenti, diverse rappresentazioni regionali potrebbero non garantire che un pubblico internazionale digiti qualcosa sullo schermo come farò io.

Avendo recentemente imbattuto in libphonenumber , sembra che un'idea migliore potrebbe essere accettare una stringa grezza come rappresentata dall'utente, ma anche catturare il paese dal quale proviene il numero dell'utente. Con queste due informazioni, la libreria sembra essere in grado di fare il trucco:

  PhoneNumber swissNumberProto = phoneUtil.parse(swissNumberStr, "CH");

Qualcuno ha suggerimenti migliori su come risolvere questo problema? Mi rendo conto che sì, è possibile massimizzare l'usabilità per un utente e lasciare che digitino ciò che vogliono - ma il compromesso è il lavoro manuale che sarebbe necessario per correggere i numeri cattivi; e se il sistema dipende da numeri validi per inviare SMS, l'intervento manuale è chiaramente un prezzo alto da pagare.

    
posta f1dave 16.03.2018 - 03:26
fonte

2 risposte

2

Un'ulteriore complicazione che dovrai gestire è che il modo in cui componi il numero può variare se stai chiamando dall'interno o dall'esterno del Paese. Un numero del Regno Unito viene in genere scritto nel modulo 04321 123456 o (04321) 123456. Quando lo si scrive come un numero internazionale, questo diventerebbe +44 (0) 4321 123456.

Ciò che non è ovvio è che lo 0 iniziale non dovrebbe essere composto al di fuori del Regno Unito, ma dovrebbe provenire dall'interno del Regno Unito.

    
risposta data 16.03.2018 - 13:47
fonte
1

È un problema complicato. Non solo ci sono differenze nella lunghezza e nel formato del numero di telefono di ciascun paese. Ma anche diversi modi di esprimere quel numero con parentesi e trattini, ecc.

Dalla libreria di Google puoi vedere che hanno file di dati per operatore, che presumibilmente devono essere gestiti.

Di recente ho provato a registrarsi per un account sul sistema di prenotazione biglietti della Indian Rail senza avere un numero di telefono indiano; Ti suggerisco di accettare semplicemente la stringa digitata e di non costringere i tuoi clienti a dover twittare te per attivare il loro account.

    
risposta data 16.03.2018 - 11:14
fonte

Leggi altre domande sui tag