Spiegazione · Con esempi pratici

Come funzionano le checksum

I numeri di carta, gli IBAN, i codici fiscali e gli indirizzi crittografici contengono tutti una o due cifre aggiuntive nascoste, calcolate dalle altre. Se si sbaglia a digitare un carattere, i calcoli non tornano più: ecco come un validator può rilevare immediatamente un errore di battitura, in modalità offline, senza dover chiedere mai a una banca o a una blockchain.

Cos'è una checksum

Una checksum (o cifra di controllo) è una ridondanza voluta. Quando un numero viene emesso, una o più delle sue cifre non vengono scelte liberamente: sono calcolate dalle altre secondo una regola fissa. Chiunque conosca questa regola può ricomputare quelle cifre e confrontarle. Se corrispondono, il numero è internamente coerente; altrimenti, c'è stato un errore di battitura, di lettura o di corruzione.

Questo è tutto ciò che promette una checksum. Non dice nulla sul fatto che l'account esista, chi ne sia il proprietario o cosa contenga: un concetto ripetuto da ogni validator presente su questo sito, poiché i due concetti sono facilmente confondibili.

Esempio pratico 1 – Luhn, l'algoritmo per i numeri di carta.

Luhn è utilizzato da Visa, Mastercard e dalla maggior parte delle altre carte di pagamento. Prendiamo l'esempio classico 7992 7398 713. Partendo dall'ultima cifra a destra, raddoppia ogni seconda cifra; se il risultato del raddoppio è un numero a due cifre, somma le sue cifre tra loro. Infine, somma tutti i valori ottenuti.

CifraPosizione partendo da destraDoppiato?Contato come
3Cifra di controllo3
1Secondo da destra1 × 2 = 22
7Terzo7
8Quarto8 × 2 = 16 → 1 + 67
9Quinto9
3Sesto3 × 2 = 66
7Settimo7
2Ottavo2 × 2 = 44
9Nono9
9Decimo9 × 2 = 18 → 1 + 89
711°7

La colonna di destra dà come risultato 3 + 2 + 7 + 7 + 9 + 6 + 7 + 4 + 9 + 9 + 7 = 70. Settanta è divisibile per dieci, quindi il numero è valido. Modificando anche un solo cifra, il totale smette di essere multiplo di dieci. Provalo sul Verifica Carta di Credito (Luhn): esegue esattamente questi calcoli sul tuo dispositivo.

Esempio pratico 2 — somma ponderata (ISBN-10)

Molti numeri di identificazione nazionali utilizzano una somma ponderata: si moltiplica ogni cifra per un peso fisso, si sommano i risultati e si verifica il resto della divisione. L'ISBN-10 ne è l'esempio più chiaro. Per 0-306-40615-2 i pesi vanno da 10 a 1:

0×10 + 3×9 + 0×8 + 6×7 + 4×6 + 0×5 + 6×4 + 1×3 + 5×2 + 2×1 = 132

132 corrisponde esattamente a 11 × 12, quindi il resto della divisione modulo 11 è zero e l'ISBN è valido. Il CPF del Brasile, il PESEL della Polonia e decine di altri identificatori seguono lo stesso schema con i propri pesi e moduli: ecco perché un Validatore ID in blocco può controllarne migliaia in un secondo.

Esempio pratico 3 — IBAN e mod 97

I numeri di conto bancario internazionali utilizzano lo standard ISO 7064 mod 97-10, uno schema più robusto con due cifre di controllo. Prendiamo l'esempio standard GB82 WEST 1234 5698 7654 32:

  1. Verifica la lunghezza in base al paese: un IBAN britannico ha 22 caratteri. ✓
  2. Sposta le prime quattro cifre alla fine: WEST12345698765432GB82.
  3. Sostituisci ogni lettera con due cifre (A = 10 … Z = 35): W→32, E→14, S→28, T→29, G→16, B→11, ottenendo 3214282912345698765432161182.
  4. Dividi quel numero per 97. Il resto deve essere esattamente 1 — ed effettivamente lo è.

Poiché 97 è un numero primo e maggiore di qualsiasi scambio di due cifre, il mod 97 rileva ogni errore di un singolo carattere e ogni trasposizione; solo circa una stringa casuale su 97 potrebbe risultare valida per caso. Il Validatore IBAN mostra se ogni livello di controllo ha esito positivo o negativo.

Indirizzi crittografici: checksum generati da hash

Gli indirizzi Bitcoin ed Ethereum impongono standard più elevati, poiché un errore di battitura li rende inutilizzabili per sempre. Gli indirizzi Bitcoin legacy (1…, 3…) utilizzano Base58Check: il payload dell'indirizzo viene elaborato due volte tramite SHA-256 e i primi quattro byte del risultato vengono aggiunti come checksum. Un singolo carattere errato modifica completamente l'hash, quindi la probabilità che un errore sfugga è di circa uno su quattro miliardi. Gli indirizzi più recenti bc1… usano Bech32 o Bech32m, un codice correttivo che garantisce il rilevamento di qualsiasi errore che interessi fino a quattro caratteri. L'EIP-55 di Ethereum nasconde il proprio checksum nel pattern di lettere maiuscole e minuscole.

Il Validatore indirizzi Bitcoin e l'Validatore indirizzi Ethereum implementano questi algoritmi nel browser e si verificano autonomamente confrontandosi con i vettori di test ufficiali ad ogni caricamento della pagina.

Panoramica dei schemi

SchemaUtilizzato daRilevaProbabilità che un errore casuale passi inosservato
Luhn (mod 10)Carte di credito e debito, IMEI, molti documenti d'identità nazionaliOgni errore di un singolo digit e la maggior parte degli scambi adiacentiCirca 1 su 10
ISO 7064 mod 97-10IBAN, alcuni codici fiscali e numeri di aziendaOgni singolo errore e ogni trasposizioneCirca 1 su 97
Somma ponderata, mod 10 o 11ISBN-10, CPF brasiliano, PESEL polacco e molti altri codici identificativiErrori singoli e la maggior parte delle trasposizioniCirca 1 su 10 o 1 su 11
Base58Check (doppio SHA-256, 4 byte)Indirizzi Bitcoin legacy (1…, 3…)Qualsiasi errore di battitura, con probabilità schiaccianteCirca 1 su 4 miliardi
Bech32 / Bech32m (codice BCH)Indirizzi Bitcoin SegWit e Taproot (bc1…)Garantito: qualsiasi errore riguarda al massimo 4 caratteriInferiore a 1 su un miliardo
EIP-55 (formattazione keccak-256)Indirizzi EthereumErrori di battitura, dovuti al modello di lettere maiuscole e minuscoleMolto basso per l'input con lettere maiuscole e minuscole miste

Perché un validatore dovrebbe eseguirsi sul tuo dispositivo

Tutto quanto sopra consiste in operazioni aritmetiche sui numeri che già possiedi. Non c'è motivo per cui un validatore invii un numero di carta di credito, un codice fiscale o un indirizzo del portafoglio a un server — e c'è un ottimo motivo per non farlo. Ogni validatore presente su questo sito viene eseguito localmente; l'elenco degli strumenti offline li raggruppa, e la nostra guida per verificare se uno strumento carica i tuoi dati mostra come confermarlo per qualsiasi sito in venti secondi.

FAQ

Un checksum valido significa che il numero è reale o attivo?

No. Un checksum dimostra soltanto che i numeri sono internamente coerenti — che il numero potrebbe esistere. Non può dirti se l'account è aperto, chi ne è proprietario o qual è il suo saldo. Ogni validatore su questo sito lo indica nella pagina, perché questa distinzione è importante.

Qual è la probabilità che un numero errato venga comunque accettato?

Dipende dallo schema utilizzato. Un singolo cifra di controllo mod-10 permette il passaggio di circa 1 errore casuale su 10; il mod 97 dell'IBAN ne lascia passare circa 1 su 97; una checksum Base58Check di 4 byte ne permette il passaggio di circa 1 su 4 miliardi. La proprietà fondamentale è che gli errori tipici commessi dagli esseri umani — una cifra sbagliata o due cifre scambiate — vengono tutti rilevati.

Perché alcuni identificatori non hanno affatto una checksum?

Gli schemi più vecchi o più semplici sono stati progettati per essere consultati in un registro anziché verificati offline, e alcuni sistemi di numerazione risalgono addirittura a prima di questa pratica. Per questi casi, un validatore può soltanto controllare la lunghezza e il formato.

È sicuro incollare il numero della mia carta o del mio documento d'identità in un validatore?

Solo se la validazione avviene sul tuo dispositivo. Una checksum è un calcolo aritmetico sulle cifre che già possiedi, quindi non esiste alcun motivo legittimo per cui un validatore debba inviarle a un server. Puoi verificare che lo strumento funzioni localmente con il test in modalità aereo descritto nella nostra guida per capire se trasmette i tuoi dati.

Qual è la differenza tra una checksum, un hash e la crittografia?

Una checksum è una breve cifra di controllo pensata per rilevare errori di battitura accidentali. Un hash crittografico è un'impronta lunga progettata in modo tale che anche un cambiamento intenzionale sia rilevabile e l'originale non possa essere recuperato. La crittografia trasforma i dati in modo che possano essere letti solo con una chiave. Base58Check utilizza un hash per generare la propria checksum, ed è per questo che è così difficile ingannarlo per caso.