I libri e le pubblicazioni periodiche portano identificatori che sembrano cugini e si comportano come parenti con abitudini diverse. Entrambi terminano con un carattere calcolato dai caratteri che lo precedono, quindi entrambi possono essere controllati offline; l’identificatore dei libri ha attraversato due lunghezze nel corso della sua vita, e l’identificatore delle pubblicazioni periodiche ha mantenuto una forma più corta e fissa.
La parte interessante non è l’aritmetica, che segue lo stesso schema di somma ponderata visto altrove, ma la gestione dell’input. La stampa, i cataloghi e i sistemi bibliotecari punteggiano questi numeri in modi incoerenti, e la lettera che può comparire nella posizione finale manda in crisi qualsiasi routine che abbia presunto che ci fossero solo cifre.
Come si calcolano le cifre di controllo ISBN e ISSN?
Il meccanismo è quello familiare. A ogni carattere del corpo viene assegnato un peso che dipende dalla sua posizione, i valori ponderati vengono sommati e il totale viene ridotto a un unico carattere finale. Un codice è internamente coerente quando il carattere finale corrisponde a ciò che il corpo produce.
Ciò che differisce dall’aritmetica dei codici a barre è l’alfabeto. Il corpo di un numero di libro può essere tutto cifre, ma il suo carattere finale non è limitato alle cifre da zero a nove; una di queste famiglie di identificatori riserva una lettera al caso in cui l’aritmetica semplice lasci un valore che una cifra non può esprimere. Quel singolo carattere è sufficiente a mandare in crisi un’implementazione che instrada questi valori attraverso un campo intero.
Nessuna delle due famiglie dovrebbe essere verificata solo alla fine di una catena. Questi identificatori vengono copiati a mano dal retro di un frontespizio, incollati da fogli di calcolo dei fornitori e digitati nelle interfacce delle biblioteche, e ognuno di quei passi è un punto in cui una cifra può cambiare senza che cambi la forma.
I valori citati in questo articolo sono descritti tramite le loro regole anziché riportati. Nessun numero reale di libro o di pubblicazione periodica è riprodotto, e una regola descritta non dice nulla sul fatto che una particolare pubblicazione esista.
I due sistemi di numerazione dei libri e come differiscono
L’identificatore dei libri ha attraversato un cambio generazionale. La forma più vecchia è quella più corta; la forma attuale è più lunga, e le posizioni iniziali in più fanno spazio a un catalogo molto più grande ora che l’editoria è cresciuta.
| Proprietà | Forma più corta del libro | Forma più lunga del libro |
|---|---|---|
| Lunghezza del corpo | Meno posizioni | Più posizioni |
| Posizioni iniziali | Porta un gruppo registrato più piccolo | Preceduta da un prefisso fisso |
| Carattere di controllo | Un carattere finale | Un carattere finale |
| Relazione | Si incontra ancora su scorte più vecchie | Standard per le nuove pubblicazioni |
Entrambe le forme restano in circolazione. Un negozio che vende stock usato, una biblioteca che conserva acquisizioni più vecchie e un importatore che riceve pallet misti incontreranno tutti la forma più corta, e una routine che riconosce solo la lunghezza attuale rifiuterà materiale perfettamente valido.
L’identificatore delle pubblicazioni periodiche è una famiglia separata con la propria forma fissa più corta. Non è un numero di libro a cui sono state tolte delle posizioni; la sua aritmetica e la sua ponderazione appartengono allo schema delle pubblicazioni periodiche, e trattare uno come un troncamento dell’altro produce caratteri di controllo che non corrispondono mai.
Quando il carattere di controllo è la lettera X
La lettera compare a causa del modulo. Dividi per un numero maggiore di dieci e il resto può atterrare su un valore che nessuna singola cifra può portare. Anziché scartare quel resto, o spostarlo nell’intervallo lecito e perdere la distinzione, lo schema gli riserva una lettera.
Ne derivano tre conseguenze pratiche. Un validatore deve accettare la lettera nella posizione finale e solo in quella finale, quindi un corpo contenente una lettera fallisce il set di caratteri mentre una lettera finale è lecita. Qualsiasi passo di analisi che presuma cifre deve essere allentato per quel singolo campo. E la lettera ha una sola combinazione di maiuscole e minuscole, poiché la regola ne fissa la forma; ridurre prima le maiuscole resta l’istinto giusto, ma la mappatura deve atterrare sulla forma che lo schema definisce.
La memorizzazione è il fallimento silenzioso in questo caso. Una colonna intera non può contenere una lettera, e una routine che elimina i caratteri non numerici prima del controllo cancellerà proprio il carattere che dovrebbe verificare. Conservare gli identificatori in un campo di testo fin dall’inizio evita una migrazione scomoda in seguito.
Perché i trattini devono essere rimossi prima del controllo
Questi numeri sono stampati in gruppi, e dove cadono i trattini è una questione di presentazione che varia tra editori, sistemi e paesi. Il raggruppamento non fa parte dell’identificatore, e non è uguale ovunque per lo stesso numero.
Poiché i gruppi si spostano, qualsiasi validazione che consumi la stringa così come è stampata fallirà in modo imprevedibile. La regola è normalizzare prima: elimina i separatori, rimuovi gli spazi circostanti, riduci le maiuscole e minuscole, e solo allora controlla il set di caratteri, la lunghezza e il carattere finale.
È anche per questo che un validatore dovrebbe conservare la stringa originale accanto a quella normalizzata. L’originale è ciò che l’utente ha letto dalla pagina, ed è ciò con cui confronterà quando l’input risulterà sbagliato. La catena descritta per la validazione generale dei numeri fa lo stesso punto: la separazione della presentazione dal contenuto viene prima di qualsiasi aritmetica.
Perché un titolo rinumerato va controllato con entrambi i numeri?
Perché una pubblicazione che attraversa il cambio di sistemi può legittimamente portare due identificatori, ed entrambi possono essere ancora in uso da qualche parte nella catena. Una scheda di catalogo creata prima del cambiamento può contenere la forma più corta, mentre l’elenco attuale di un fornitore contiene quella più lunga, e un sistema che ne comprende solo una segnalerà una discrepanza dove non esiste.
Gestire questo è un problema di corrispondenza anziché di aritmetica. Controllare correttamente entrambe le forme ti dice che ciascuna stringa è internamente coerente; non ti dice che le due stringhe descrivono lo stesso titolo. Fare quell’affermazione richiede una mappatura mantenuta da chi ha assegnato i numeri, e inventare la mappatura togliendo delle posizioni è un modo affidabile per fondere due titoli non correlati.
Lo schema si generalizza a qualsiasi identificatore riemesso. Quando uno schema cambia la sua lunghezza, la sua regola di controllo o la sua assegnazione, aspettati un periodo in cui entrambe le generazioni sono attive, e progetta il modello di dati per due valori anziché uno.
Per gli sviluppatori: normalizzazione e messaggi di errore
Un breve elenco di decisioni copre la maggior parte dei problemi che questi schemi causano.
- Normalizza rimuovendo i separatori e riducendo le maiuscole e minuscole, poi verifica l’alfabeto lecito, compresa una lettera finale consentita.
- Scegli la regola dal numero di cifre, e tieni separate le regole per entrambe le lunghezze del libro e per le pubblicazioni periodiche.
- Restituisci un messaggio che nomini quale regola è stata applicata, così un utente che ha incollato il tipo sbagliato di numero può vederlo.
- Memorizza gli identificatori come testo ovunque, comprese le colonne dei database e gli indici di ricerca.
- Quando un valore fallisce, mostra la forma normalizzata contro cui hai verificato, poiché è quella che l’aritmetica ha effettivamente visto.
L’aritmetica stessa appartiene alla stessa famiglia basata sul modulo di quelle confrontate nella panoramica degli algoritmi cifra di controllo, anche se l’alfabeto e la regola della lettera finale rendono questi schemi i membri scomodi. I codici a barre, che lo stesso sistema di magazzino o biblioteca gestisce spesso fianco a fianco, sono trattati in Cifre di controllo EAN UPC.
Passi successivi
Prendi un valore per ciascuna generazione del numero di libro e un numero di serie, e conferma che la tua routine li accetti tutti e tre dopo la normalizzazione e rifiuti ciascuno quando cambia un singolo carattere interno. Lo strumento di validazione dei numeri ti mostrerà la formulazione del giudizio, e vale la pena di controllare che la tua interfaccia distingua una discordanza di formato da una prova di cifra di controllo fallita.