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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top