Un prefisso telefonico sembra un timbro di località. Sta accanto a un indirizzo nello stesso modulo, è spesso l’unica parte del numero che sembra geografica, ed è allettante trattarlo come un ulteriore campo da incrociare con una città. Quell’istinto era ragionevole decenni fa e oggi non è affidabile.
Questo articolo spiega come siano effettivamente strutturati i codici di composizione internazionali e i prefissi nazionali, perché i numeri mobili e la portabilità del numero rompano il legame geografico, e che cosa un controllo di coerenza tra indirizzo e telefono possa onestamente imporre nei dati di test o in produzione.
Codice paese, prefisso e numero dell’abbonato
Un numero di telefono internazionale ha tre parti: un codice di composizione nazionale, una parte di destinazione nazionale che può includere un prefisso regionale e il numero dell’abbonato. I codici di composizione nazionali sono brevi — da una a tre cifre — e sono assegnati come parte di un piano di numerazione globale, che è ciò che rende prevedibile la composizione internazionale.
All’interno di un paese, la struttura della parte nazionale è stabilita dall’autorità di regolamentazione di quel paese, e varia enormemente. Alcuni paesi usano un numero nazionale a lunghezza fissa con un prefisso regionale sempre della stessa lunghezza. Altri usano numeri a lunghezza variabile, dove il prefisso e la parte dell’abbonato si scambiano cifre a seconda della regione e del servizio. Alcuni abbreviano il codice quando si compone a livello nazionale e lo richiedono quando si compone dall’estero.
Due conseguenze ne derivano per chi memorizza questi dati. Primo, lo stesso numero ha diverse forme scritte valide, e differiscono in più della punteggiatura: la forma internazionale può includere un prefisso che la forma nazionale omette, e il raggruppamento delle cifre può cambiare. Secondo, la lunghezza totale di un numero ha un massimo definito ma non un unico valore globale, quindi una rigida regola di lunghezza respingerà numeri validi da qualche parte.
Il prefisso è ancora un luogo?
Meno di una volta, e sempre meno ogni anno. Parecchi sviluppi ordinari erodono il legame tra un numero e un luogo.
- I numeri mobili spesso non portano alcuna informazione geografica. In molti paesi sono emessi da blocchi non legati a una regione, quindi un numero non ti dice nulla su dove si trovi il suo proprietario.
- La portabilità del numero consente a un abbonato di conservare un numero mentre si sposta tra operatori, e in diversi paesi anche tra regioni. Un numero emesso in un luogo può essere in uso altrove.
- La telefonia su internet scollega il numero da qualsiasi linea fisica. Un numero può essere acquistato in un paese e ricevuto in un altro senza che chi chiama se ne accorga.
- Le persone si trasferiscono e conservano i propri numeri. I numeri di rete fissa vengono spesso mantenuti dopo un trasloco all’interno dello stesso paese.
L’affermazione accurata è che un prefisso registra dove un numero è stato emesso per la prima volta, nella migliore delle ipotesi. Non è una posizione attuale e non è una prova di residenza.
Che cosa può davvero imporre un controllo di coerenza?
Non molto, e conoscere i limiti è ciò che rende utile il controllo. Sono disponibili tre livelli di forza, e andrebbero scelti deliberatamente.
Una regola rigida è una che può essere imposta senza falsi rifiuti: il numero corrisponde alla forma attesa per il paese dichiarato, contiene solo i caratteri consentiti e la sua lunghezza rientra nell’intervallo che quel paese permette. Queste sono sicure da imporre al momento dell’inserimento.
Un segnale debole è uno che vale la pena segnalare ma non bloccare: il prefisso corrisponde a una regione diversa da quella dell’indirizzo, o il numero è un mobile dove il modulo implica una rete fissa. Questi meritano un avviso in uno strumento interno e non meritano mai un fallimento rigido su un modulo pubblico.
Un’ipotesi statistica — ricavare una città da un numero, o dedurne un operatore, e memorizzarla come fatto — è quella da evitare del tutto. Sarà sbagliata abbastanza spesso da essere dannosa, e poiché l’output sembra un campo pulito, nessuno a valle lo metterà in discussione.
Perché i dati di test hanno comunque bisogno del controllo di coerenza
I dati di test sono il luogo in cui un’ipotesi geografica lasca fa più danni, perché le fixture sono costruite a mano e di cui poi ci si fida. Se una fixture accoppia un numero del piano di numerazione di un paese con un indirizzo in un altro, ogni test che tocca il numero passa senza testare nulla, e un difetto reale nel campo del telefono resta nascosto fino alla produzione.
I controlli utili per una serie di fixture sono modesti. Il codice di composizione nazionale corrisponde al paese dell’indirizzo. La lunghezza e l’insieme di caratteri del numero corrispondono al piano di quel paese. La parte nazionale è plausibile per il tipo di numero che il campo dichiara di contenere. Qualsiasi cosa oltre — affermare che il prefisso corrisponda alla città nel record — afferma qualcosa che non è vero nemmeno dei dati reali, e una fixture che lo impone addestra il team su una regola falsa.
Le fixture dovrebbero anche includere i casi scomodi: un numero scritto in forma internazionale e lo stesso numero in forma nazionale, un numero con un prefisso regionale che non corrisponde all’indirizzo e un numero mobile senza alcuna informazione regionale. La differenza tra quei casi e i controesempi è il senso dell’insieme. La forma di una serie di fixture ben organizzata è descritta in dati di indirizzo nelle fixture di test.
Per gli sviluppatori: memorizzazione, raggruppamento e visualizzazione
Memorizza il codice di composizione nazionale separatamente dal numero nazionale. La coppia è inequivocabile; un unico campo che contiene un numero internazionale in un formato localmente convenzionale non lo è, e ogni consumatore reimplementa allora l’analisi per recuperare le parti.
Memorizza il numero nazionale come una stringa di cifre, senza punteggiatura né raggruppamento. La punteggiatura è una questione di visualizzazione, e le regole di raggruppamento differiscono tra i paesi e persino tra i tipi di numero, quindi memorizzare la forma raggruppata blocca una decisione di formattazione che sarà sbagliata da qualche parte. Normalizza in input, a un unico confine, come per qualsiasi identificatore.
Per la visualizzazione, mantieni le regole di formattazione per paese accanto alle altre convenzioni del paese. E fai attenzione al prefisso internazionale — il segno più e le cifre che lo seguono sono l’unica forma globalmente inequivocabile, mentre il prefisso usato per raggiungere una linea internazionale varia da paese a paese e non fa parte del numero.
Infine, tratta un numero di telefono come dato personale allo stesso modo di un indirizzo. Identifica un individuo, quindi le regole di minimizzazione, conservazione e ambiente di test che valgono per gli indirizzi valgono anche qui. Gli obblighi condivisi sono esposti in privacy dei dati di indirizzo. Se i tuoi dati portano anche codici di paese, le insidie delle diverse forme sono trattate in codici ISO di paese e suddivisione.
Passi successivi
Prendi la colonna dei telefoni nel tuo schema e controlla tre cose: che il codice paese sia memorizzato separatamente, che la parte nazionale sia testo e senza punteggiatura e che la validazione sia limitata alla forma anziché alla geografia. Poi aggiungi una fixture in cui il numero e l’indirizzo provengono deliberatamente da regioni diverse, e assicurati che i tuoi test si aspettino che sia accettata con un avviso anziché rifiutata. Sia l’indirizzo sia il numero per un record campione sono disponibili nel generatore di indirizzi. Quel record è sintetico — assemblato per esercitare il modulo, non per fare una chiamata o consegnare qualcosa.