Depois de ler seus comentários, isso parece mais razoável. Só não tinha certeza se você pretendia codificar megabytes de dados como este.
Eu recomendaria, de acordo com a sugestão de Oliver, aumentar a densidade de dados emprestando uma página da cifra de Bacon , que as gangues de prisão costumam usar para codificar mensagens ocultas em missivas escritas em 2 estilos diferentes de script - geralmente superior vs. caracteres minúsculos ou caracteres vs. caracteres cursivos, por exemplo
Hey mOM, WHAT's FOR diNNeR TODAY? = ABBBA AAAAA BAAAB BAABA AAAAA
= P A S T A
No entanto, como seu objetivo não é a estegnografia, basta usá-lo para expandir seu conjunto de glifos. Com isso, você pode ter até 114 glifos usando caracteres alfanuméricos impressos e cursivos ou 12996 pontos de código usando codificação de caracteres duplos.
No entanto, como todas as contagens de glifos maiores que 15 e menores que 256 são essencialmente iguais para uma cifra direta de dados binários (ou seja, você ainda precisará de 2 caracteres para representar cada byte, oferecendo uma densidade de dados de 4 bits por caractere em todos os casos), você pode usar os 98 pontos de código extras / glifos / 12740 para detecção / correção de erros.
As maneiras de fazer isso incluem:
- Escolha um conjunto dos 256 combos de caracteres mais fáceis de ler / gravar. Se qualquer outra combinação de caracteres ocorrer, você sabe que é um erro de cópia.
- Use duas versões do caractere final como um bit de paridade.
Crie 50 conjuntos diferentes de glifos de 16 caracteres. Você pode usá-los para codificar codificar dados de correção de erros.
Por exemplo, {set 1}{set 1}
significa que os próximos 3 petiscos são iguais 0x000
, {set 1}{set 2}
iguais 0x001
etc.
Você pode usar isso para representar mais de 2500 dos 4096 possíveis valores de 1,5 byte. Da mesma forma, você pode usar apenas 16 conjuntos para representar todos os valores do byte a seguir, fornecendo 100% de redundância sem aumentar o comprimento dos dados codificados.
Como alternativa, você pode usar os glifos extras para compactação adicional:
- Implemente a codificação de largura variável escolhendo 98 pontos de código de caractere único. Isso reduziria o tamanho médio do conteúdo codificado em cerca de 20%.
- Implemente algo semelhante à codificação de execução usando diferentes conjuntos de glifos ou combinações de conjuntos de glifos para representar nibbles / bytes repetidos. Por exemplo
Ab
= aba
; aB
= abab
; AB
= ababab
...
- Use os glifos ou pontos de código extras para representar "palavras" e "frases" repetidas em seus dados. Embora os dados pré-compactados provavelmente tenham um alto nível de entropia, não sei quão eficaz isso seria.
Para reduzir ainda mais os erros de cópia, eu exibia o conteúdo codificado em linhas de grade e copiava em papel gráfico. Se você pode usar papel de carta personalizado com cores alternadas de coluna / linha ou uma grade quadriculada no estilo tabuleiro de xadrez com colunas com letras e linhas numeradas para pesquisas rápidas, isso aumentaria ainda mais a precisão da cópia.
Você também pode combinar um layout de grade alternativo com estilos de caracteres alternados como uma forma fácil de detecção de erros. Ou seja, se as colunas ímpares sempre estiverem em maiúsculas, se o transcritor estiver escrevendo letras minúsculas em colunas ímpares, eles saberão que cometeram um erro e poderão começar a rastrear novamente para ver onde aconteceu.
Embora sua principal prioridade seja a precisão, eu usaria uma codificação binária +
código Hamming . Usando um código Hamming (12, 8) reduzido em papel gráfico padrão, você pode caber apenas 187 bytes, codificando apenas 124 bytes de dados. Mas pode ser transcrito muito rapidamente (uma barra para 1, nada para 0) e fornecer uma correção de erro única. Aplicar um bit de paridade extra (13, 8) forneceria SECDED (correção de erro único, detecção de erro duplo). Usando um código hamming padrão como (15, 11) ou (31, 26), você obtém uma eficiência ainda melhor com 137 e 156 bytes de dados por folha, respectivamente. É possível obter taxas de código ainda mais altas, dependendo da precisão que você acha que seu transcritor pode ser.
Uma codificação binária também seria mais fácil de ler (em voz alta) e OCR / OMR.