¿Codificación que minimice las lecturas erróneas, las escrituras erróneas o las faltas de expresión?
-
10-12-2019 - |
Pregunta
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 debe poder comunicarle la clave con precisión leyéndola por teléfono o leyéndola y escribiéndola nuevamente en alguna otra interfaz.
¿Cuál es una "buena" forma de codificar la clave para que leerla, escucharla o escribirla sea fácil y precisa?
Podría ser un número de factura, un ID de documento, un ID de transacción o algún otro valor abstracto.Digamos, por el bien de esta discusión, que el valor clave subyacente es un número grande, digamos 40 dígitos en base 10.
Algunos pensamientos:
Las claves más cortas son generalmente mejores
- un valor de base 10 de 40 dígitos puede no caber en el espacio dado y es fácil perderse en medio de
- el mismo valor podría representarse en base 16 en 33-34 dígitos
- el mismo valor podría representarse en base 36 en 26 dígitos
- el mismo valor podría representarse en base 64 en 22-23 dígitos
Los personajes que no se pueden confundir visualmente entre sí son mejores.
- p.ej.una codificación que incluya tanto O (oh) como 0 (cero), o S (ess) y 5 (cinco), podría ser mala
- Este problema depende de la fuente/cara utilizada para mostrar la clave, que es posible que pueda controlar en algunos casos (como la impresión en papel) pero no 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.e.La D mayúscula (dee) puede parecerse a O (oh), pero la d minúscula (dee) no;mientras que la l minúscula (ell) parece un 1 (uno), mientras que la L mayúscula (ell) no lo sería.(Con excepciones para fuentes/rostros especialmente exóticos).
Los personajes que no se pueden confundir verbal o auditivamente entre sí son mejores.
- a (ay) 8 (ocho)
- B (abeja) C (cee) D (dee) E (ee) g (gee) p (pee) t (tee) v (vee) z (zee) 3 (tres)
- Este problema depende de la calidad de audio del canal de extremo a extremo; un desafío mayor si la base de usuarios esperada pudiera tener un impedimento del habla, o tuviera que hablar a través de una máscara antigás, o si el canal de comunicación pudiera incluir radios CB o interrupciones. Sistemas telefónicos VOIP.
Agregar uno o dos dígitos de control detectaría errores pero no ayudaría a resolverlos.
Un diálogo de tipo alfa - bravo - charlie - delta puede ayudar con los errores de audición, pero no con los de lectura.
Posibles opciones de codificación:
- Base 64: compacto, pero con demasiados caracteres difíciles de verbalizar (guiones bajos, guiones, etc.)
- Base 34: 0-9 y A-Z, pero con O (oh) y I (sí) excluidos como los más fáciles de confundir con dígitos.
- Base 32: igual que la base 34, pero omite también el 0 (cero) y el 1 (uno).
¿Existe una codificación generalmente reconocida que sea una solución razonable para este escenario?
Solución
Cuando lo escuché por primera vez, me gustó el artículo. Una propuesta para Proquints:Identificadores legibles, deletreables y pronunciables.Codifica datos como una secuencia de consonantes y vocales.Aunque está ligado al idioma inglés.(Porque en alemán, f
y v
suenan iguales, por lo que no deberían usarse ambos). Pero me gusta la idea general.