Brevi ID alfanumerici unici protetti da errori di trascrizione

4

Per alcuni metodi di pagamento, gli utenti compilano moduli cartacei con un ID di riferimento a 9 cifre. Gli ID numerici hanno il difetto che gli utenti possono commettere errori di trascrizione (cifre perse, cifre duplicate, cifre scambiate). È possibile rilevare banalmente quegli errori aggiungendo un checksum (ad esempio basato su modulo dello standard ISO 7064). Ma come puoi evitare quegli errori? L'unico modo in cui posso pensare al momento è di rendere i codici più brevi codificando l'ID numerico in un set di caratteri alfanumerici estesi. Ma poi si apre un'altra fonte di errori che è la somiglianza dei caratteri e gli errori OCR.

Le mie domande sono:

  • C'è un set di caratteri abbastanza grande da creare una riduzione delle cifre, ma ha ancora bassi tassi di errore in OCR / scrittura umana? Siamo stati relativamente rigidi e abbiamo creato ACDEFKLMNPRTWXYZ349 .
  • Fa la differenza se creiamo il checksum dopo o prima della codifica? Anche il checksum deve essere codificato, quindi probabilmente ha senso codificare dopo il checksum.
  • Esiste già un'implementazione standard o ampiamente utilizzata?

Al momento il nostro piano è di utilizzare i seguenti passaggi:

  • Crea un checksum base11 dall'ID numerico con MOD 70-2 ISO 7064
  • Converti l'ID base10 e il checksum base11 in un "numero" base22 (base22 perché ACDEFKLMNPRTWXYZ349 è lungo 22 caratteri).
  • Mappa i due "numeri" base22 (che usano 0-9 e A-L come cifre) al nostro set di 22 caratteri.

C'è un modo migliore?

    
posta chiborg 25.09.2017 - 17:21
fonte

1 risposta

0

Un modo potenzialmente migliore, se tutti gli utenti del sistema condividono una lingua comune (ad esempio l'inglese), è di utilizzare un sistema simile a quello utilizzato da what3words . L'idea è di creare un dizionario di parole che possa essere riconosciuto in modo univoco anche in caso di probabili errori di ortografia.

Questo, ovviamente, non è un compito facile, ma resta il fatto che con un dizionario di almeno mille parole ben scelte, tre parole sono sufficienti per rappresentare un codice a nove cifre, se permettiamo che si ripetano parole identiche e l'ordine delle parole da importare.

Per minimizzare il rischio di errore, potrebbe essere meglio non ripetere mai una parola e ignorare l'ordine delle parole. Quindi perdi sei permutazioni nella codifica e hai bisogno di due parole aggiuntive per consentire di evitare la ripetizione. Pertanto, il dizionario deve contenere 1820 parole. (La radice cubica di sei miliardi, più due, arrotondata per eccesso.)

Con quattro parole, è sufficiente una dimensione del dizionario di poco inferiore a 400.

Naturalmente, un piccolo insieme di lingue diverse può anche essere supportato, offrendo all'utente una scelta linguistica quando si presenta il codice che deve essere scritto. Ma le liste di parole devono essere composte indipendentemente per ogni lingua. Per esempio. non è una buona idea lasciare che una lista di parole sia la traduzione di un'altra, poiché l'obiettivo principale è quello di avere parole che siano chiare e facili da scrivere.

    
risposta data 06.12.2018 - 11:55
fonte

Leggi altre domande sui tag