Pergunta

Digamos que você tenha um sistema no qual um valor-chave bastante longo possa ser comunicado com precisão a um usuário na tela, por e-mail ou em papel;mas o usuário precisa ser capaz de comunicar a chave com precisão, lendo-a pelo telefone ou lendo-a e digitando-a novamente em alguma outra interface.

Qual é uma "boa" maneira de codificar a chave para tornar a leitura/audição/digitação fácil e precisa?

Pode ser um número de fatura, um ID de documento, um ID de transação ou algum outro valor abstrato.Digamos, para fins desta discussão, que o valor-chave subjacente seja um número grande, digamos 40 dígitos na base 10.

Alguns pensamentos:

Chaves mais curtas são geralmente melhores

  • um valor de base 10 de 40 dígitos pode não caber no espaço fornecido e é fácil se perder no meio de
  • o mesmo valor poderia ser representado na base 16 em 33-34 dígitos
  • o mesmo valor poderia ser representado na base 36 em 26 dígitos
  • o mesmo valor pode ser representado na base 64 em 22-23 dígitos

Personagens que não podem ser confundidos visualmente são melhores

  • por exemplo.uma codificação que inclua O (oh) e 0 (zero), ou S (ess) e 5 (cinco), pode ser ruim
  • Esse problema depende da fonte/face usada para exibir a chave, que você pode controlar em alguns casos (como impressão em papel), mas não pode controlar em outros (como páginas da web e e-mail).
  • Também depende se você pode controlar o uso exclusivo de letras maiúsculas e/ou minúsculas - por exemplo.D maiúsculo (dee) pode parecer O (oh), mas d minúsculo (dee) não;enquanto l minúsculo (ell) parece 1 (um), enquanto L maiúsculo (ell) não.(Com exceções para fontes/faces especialmente exóticas).

Personagens que não podem ser confundidos verbalmente/auditivamente entre si são melhores

  • a (sim) 8 (oito)
  • B (abelha) C (cee) D (dee) E (ee) g (gee) p (xixi) t (tee) v (vee) z (zee) 3 (três)
  • Este problema depende da qualidade de áudio do canal ponta a ponta - desafio maior se a base de usuários esperada tiver um problema de fala, ou precisar falar através de uma máscara de gás, ou se o canal de comunicação incluir rádios CB ou interrupções. Sistemas telefônicos VOIP.

Adicionar um ou dois dígitos de verificação detectaria erros, mas não ajudaria a resolvê-los.

Uma caixa de diálogo do tipo alfa - bravo - charlie - delta pode ajudar com erros de audição, mas não com erros de leitura.

Possíveis escolhas de codificação:

  • Base 64 – compacto, mas com muitos caracteres difíceis de verbalizar (sublinhado, travessão etc.)
  • Base 34 - 0-9 e A-Z, mas com O (oh) e I (sim) deixados de fora como os mais fáceis de confundir com dígitos
  • Base 32 - igual à base 34, mas deixe de fora o 0 (zero) e o 1 (um) também

Existe uma codificação geralmente reconhecida que seja uma solução razoável para este cenário?

Foi útil?

Solução

Quando ouvi pela primeira vez, gostei do artigo Uma proposta para Proquints:Identificadores que são legíveis, soletrados e pronunciáveis.Ele codifica dados como uma sequência de consoantes e vogais.No entanto, está vinculado ao idioma inglês.(Porque em alemão, f e v soam iguais, portanto não devem ser usados ​​ambos.) Mas gosto da ideia geral.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top