Digamos que tiene un sistema en el que un valor clave bastante largo se puede comunicar con precisión a un usuario en pantalla, por correo electrónico o en papel; pero el usuario necesita poder comunicarle la clave de manera precisa leyéndola por teléfono o leyéndola y escribiéndola en otra interfaz.Codificación que minimiza la lectura incorrecta/mal escrito/mal oído
¿Cuál es una "buena" manera de codificar la clave para hacer que la lectura/audición/mecanografía fácil & precisa?
Esto podría ser un número de factura, una identificación de documento, una identificación de transacción u otro valor abstracto. Digamos, por el bien de esta discusión, el valor de la clave subyacente es un número grande, digamos de 40 dígitos en la base 10.
algunas reflexiones:
Shorter claves son generalmente mejores
- un 40 el valor 10 de la base de dígitos puede no caber en el espacio dado, y es fácil perderse en el medio de
- el mismo valor podría representarse en la base 16 en 33-34 dígitos
- el mismo valor podría estar representados en base 36 en 26 dígitos
- el mismo valor podría ser representada en base 64 en 22-23 dígitos
caracteres que no pueden ser visualmente confundido entre sí son mejores
- p.ej una codificación que incluye tanto O (oh) como 0 (cero), o S (ess) y 5 (cinco), podría ser incorrecta
- Este problema depende de la fuente/cara utilizada para mostrar la clave, que puede ser capaz de controlar en algunos casos (como imprimir en papel) pero no puede controlar en otros (como páginas web y correo electrónico).
- También depende de si puede controlar el uso exclusivo de mayúsculas y/o minúsculas, p. mayúscula D (dee) puede parecerse a O (oh) pero minúscula d (dee) no; mientras que la minúscula l (ell) parece un 1 (uno) mientras que la mayúscula L (ell) no. (Con excepciones para fuentes/caras especialmente exóticas).
caracteres que no pueden ser verbalmente/auditivamente confundido entre sí son mejores
- un (ay) 8 (ocho)
- B (abeja) C (cee) D (dee) E (ee) g (gee) p (pip) t (tee) v (vee) z (zee) 3 (tres)
- Este problema depende de la calidad de audio del canal de extremo a extremo - mayor desafío si la base de usuarios prevista podría tener un impedimento de voz, o puede tener que hablar a través de una máscara de gas, o el canal de comunicación podría incluir radios CB o sistemas telefónicos VOIP picados.
Agregar un dígito de control o dos detectaría errores pero no ayudaría a resolver los errores.
Un diálogo de tipo alfa - bravo - charlie - delta puede ayudar con los errores de audición, pero no con los errores de lectura.
opciones posibles de codificación:
- Base 64 - compacto, pero demasiados difíciles de verbalizar caracteres (subrayado, guiones etc.)
- Base 34 - 0-9 y AZ pero con O (oh) y I (aye) omitido como el más fácil de confundir con los dígitos
- Base 32 - igual que la base 34 pero omita el 0 (cero) y 1 (uno) también
I s hay una codificación generalmente reconocida que es una solución razonable para este escenario?
Utilice ICAO (http://en.wikipedia.org/wiki/NATO_phonetic_alphabet)? – ninjalj