Chiedi a dieci paesi come si presenta un numero di identità nazionale e otterrai dieci risposte diverse, non perché i numeri siano segreti ma perché ogni registro è stato progettato per conto proprio. Alcuni stati pubblicano l’aritmetica che chiude il numero, alcuni pubblicano solo una descrizione della sua forma, e alcuni non pubblicano nulla oltre al fatto che il numero esiste.
Questa disomogeneità è la caratteristica che definisce il campo, ed è il motivo per cui un validatore internazionale generico non può essere scritto. Ciò che si può scrivere è un validatore che sa, per ogni paese che supporta, quanto è autorizzato a controllare — e che lo dice chiaramente nel giudizio.
Perché i numeri di identità nazionali non possono essere validati allo stesso modo?
Perché non esiste un’autorità internazionale che emetta i numeri di identità nazionali. Ognuno appartiene a un registro nazionale con la propria legislazione, le proprie convenzioni e la propria storia, e nulla obbliga un paese a documentare la sua numerazione per gli estranei.
Dove esiste la documentazione, anch’essa varia nel tipo. Un algoritmo di cifra di controllo pubblicato è una specifica completa: data una stringa candidata, l’aritmetica può decidere. Un formato pubblicato è una specifica parziale: può rifiutare una stringa malformata ma non potrà mai approvare come autentica una stringa ben formata. Un registro che non pubblica né l’una né l’altro lascia al mondo esterno nulla da implementare, qualunque sia la logica interna del numero.
Progettare attorno a questa varietà significa trattare la copertura come una matrice anziché come un booleano. Per ogni paese che il tuo prodotto tocca, registra quale dei tre livelli si applica, e lascia che il giudizio segua dal livello invece di fingere che ogni paese offra la stessa garanzia.
Tutti i valori d’identità discussi qui sono descrizioni illustrative di regole pubblicate anziché riproduzioni. Nessun numero di identità reale compare in questo articolo, e il fatto che una regola sia descritta non implica che una particolare stringa sia mai stata emessa.
I paesi che pubblicano il loro algoritmo di cifra di controllo
Alcuni registri specificano completamente il carattere finale: i pesi, il modulo e la regola per la cifra finale sono tutti nella documentazione pubblica. Sono i casi più facili, e sono anche quelli in cui un validatore aggiunge il massimo valore, perché un singolo carattere digitato male viene intercettato prima che il numero raggiunga qualsiasi registro.
La famiglia di aritmetica coinvolta è quella consueta basata sul modulo, passata in rassegna in Algoritmi cifra di controllo, e uno schema nazionale è di solito un insieme specifico di parametri al suo interno. Una manciata di paesi applica il membro della famiglia mod-10 che raddoppia e somma; altri usano una disposizione mod-11, ed è per questo che la mappatura dal resto al carattere differisce da un caso all’altro.
Anche qui la precisione conta. Sapere che un paese usa un controllo modulare non è la stessa cosa che conoscerne i parametri, e implementare un’approssimazione plausibile produce una routine che accetta la maggior parte dei valori e silenziosamente non concorda con lo standard su tutti gli altri.
I paesi che pubblicano un formato ma nessun algoritmo
Il livello intermedio è il più ampio e il più scomodo. Il registro documenta quanti caratteri contiene un numero, quali di essi sono cifre e spesso quale componente identifica una regione o un periodo di nascita, ma non pubblica mai una regola aritmetica. Il numero di previdenza sociale degli Stati Uniti e il permanent account number dell’India si collocano entrambi in questo livello — ampiamente usati, documentati a fondo nella forma, e privi di qualsiasi algoritmo pubblico di cifra di controllo.
Un validatore che affronta uno schema di solo formato può comunque fare un lavoro utile. Può rifiutare stringhe della dimensione sbagliata, stringhe contenenti caratteri illeciti e stringhe che contraddicono la struttura documentata delle componenti. Ciò che non può fare è calcolare qualcosa dal corpo e confrontarla, perché non c’è nulla di pubblicato da calcolare.
Il giudizio deve riflettere questo. Uno schema di solo formato produce un risultato di solo formato, e la formulazione dovrebbe dire che la forma è confermata mentre la validità non può esserlo. Segnalare un simile valore come valido è un’affermazione falsa precisamente del tipo che il vocabolario dei quattro giudizi esiste per impedire.
Cosa accade quando un numero corrisponde a più paesi?
Due paesi possono concordare per caso. Se entrambi usano una lunghezza simile e un set di caratteri simile, una singola stringa può soddisfare completamente entrambi gli insiemi di regole — e se i due schemi usano anche un’aritmetica paragonabile, la stessa stringa può persino superare entrambe le cifre di controllo. Nulla è andato storto; specifiche sovrapposte producono semplicemente appartenenze sovrapposte.
La tentazione è indovinare. Un modulo che presume silenziosamente il paese più probabile, o il paese della localizzazione del browser dell’utente, inventa informazioni che l’input non conteneva. Dedurre una nazionalità da una stringa è sia inaffidabile sia un’attività categoricamente diversa dal validare un formato.
La presentazione onesta è un elenco. Mostra ogni schema che la stringa soddisfa, in un ordine stabile, e lascia che l’utente — o il sistema a valle con un contesto migliore — scelga. Quando nulla corrisponde, segnala uno schema non riconosciuto anziché un numero non valido, perché la seconda affermazione è una che il validatore non è in grado di fare.
Lunghezza e set di caratteri sono solo un punto di partenza
Entrambi i controlli sono economici, ed entrambi sono spesso scambiati per l’intero compito. La sola lunghezza intercetta caratteri persi e ripetuti; il solo set di caratteri intercetta l’alfabeto sbagliato. Nessuno dei due dice qualcosa sulla relazione tra i caratteri.
Quella relazione è precisamente ciò che un numero nazionale autentico possiede e una stringa casuale no. Dove il registro pubblica la relazione, un validatore può verificarla; dove il registro la tiene privata, nessuna quantità di astuzia la recupera. Tentare di decodificare a ritroso una regola non pubblicata da un campione di numeri reali è sia inaffidabile sia un cattivo uso del tempo di chiunque, dato che il risultato è un’ipotesi presentata con l’autorità di una specifica.
Mantieni i livelli ordinati e i messaggi specifici. Un utente il cui input è fallito sulla lunghezza vuole sentir parlare di lunghezza, e uno il cui input ha superato tutto tranne il carattere finale vuole sentir parlare del carattere finale.
Per gli sviluppatori: trattare le regole nazionali come dati
La conseguenza pratica di tutta questa varietà è che le regole non dovrebbero essere compilate nel percorso di codice che decide il giudizio.
- Memorizza un record per schema: il paese, il set di caratteri leciti, la forma e il livello di copertura — algoritmo, solo formato o nessuno.
- Memorizza i parametri per gli schemi che pubblicano l’aritmetica, e lascia il campo vuoto anziché indovinare per gli altri.
- Instrada ogni input attraverso i record che corrisponde e restituisci un elenco, non un singolo vincitore.
- Mantieni distinti i quattro giudizi nei tuoi tipi, così un chiamante non può accidentalmente trattare un risultato di solo formato come un’approvazione.
- Data l’insieme di regole e rendi il suo aggiornamento una modifica ai dati, perché le convenzioni nazionali cambiano e una tabella codificata in modo fisso diventa silenziosamente sbagliata.
Dove un prodotto gestisce valori d’identità di più paesi, la questione della privacy merita la stessa cura dell’aritmetica. La panoramica degli algoritmi cifra di controllo copre come questi schemi si confrontano tra registri, e la validazione CPF CNPJ è un esempio svolto di un paese i cui due numeri fiscali seguono regole interne diverse.
Passi successivi
Elenca i paesi da cui il tuo prodotto accetta numeri di identità, e contrassegna ciascuno come algoritmo, solo formato o non pubblicato. Poi conferma che la tua interfaccia dica qualcosa di diverso per ognuno di quei tre casi; lo strumento di validazione dei numeri dimostra la formulazione per ogni livello di copertura, e vale la pena di controllare che nessun messaggio presenti un risultato di solo formato come un’approvazione.