Gerar detalhes e princípios do código bidimensional

 Bidimensional códigos, também conhecido como código QR, QR significa Quick Response, o dispositivo é um super popular nos últimos anos, uma codificação móvel, é mais do que os códigos de barras tradicionais código de barras pode armazenar mais informações, mais dados podem ser representados por digite: Por exemplo: personagens, números, japonês, chinês, e assim por diante. Dois dias para aprender os detalhes sobre a imagem código gerado bidimensional, acho que essa coisa é um algoritmo criptográfico, em que uma escrita deste artigo, para expô-lo. Para as pessoas de aprendizagem estudiosa.

Basics

 Primeiro, vamos falar sobre o código bidimensional, um total de 40 dimensões. A versão oficial chamado Version. Versão 1 é uma matriz de 21 x 21, versão 2 é uma matriz de 25 x 25, versão 3 do tamanho 29, cada um dos aumentando uma versão, uma vez que irá aumentar o tamanho de 4, a fórmula é: (V-1) * 4 + 21 ( V é um número de versão) máximo versão 40, (40-1) * 4 + 21 = 177, de modo que o máximo de 177 x 177 quadrado.

 Aqui olhamos para um exemplo de código bidimensional:

padrão de posicionamento

  • Pattern Detection posição posicionar padrão para os marcadores de tamanho código bidimensional retangulares. O padrão de três posicionamento branco Bianjiao Separadores para padrões de detecção Postion. A razão pela qual três em vez de quatro meios que você pode identificar três de um retângulo.
  • Os padrões de sincronização são também utilizados para o posicionamento. A razão é a necessidade de ter tamanhos padrão bidimensional raiz código de fio 40, após o tamanho é muito grande, ou quando a varredura verificação pode ser torto.
  • Padrões de alinhamento única versão 2 ou mais (incluindo Version2) Eastern código bidimensional requer, ele também é usado para o posicionamento.
  • Os dados funcionais
  • Informações formato presente em todas as dimensões, o formato usado para armazenar dados.
  • Informações da versão em > = Versão 7 acima, a área reservada precisa de dois 3 x 6 algumas versões informações armazenadas.
  • símbolos de dados e códigos de correção de erros
  • Onde para além dos descritos acima, onde o resto dos símbolos de dados armazenados Código de Dados de correção de erros Código e um código de correção de erros.
  • codificação de dados
  •  Digamos, por codificação de dados. código QR suporta a seguinte codificação:
  •   modo numérico  codificada digitalmente, de 0 a 9. Se o número de dígitos para ser codificados não é um múltiplo de três, em seguida, o último um ou dois dígitos restante é convertido em 7bits ou 4, 10,12,14bits então cada um dos outros três dígitos são compilados, ed tamanho longa depende do código bidimensional (uma tabela da tabela 3 abaixo ilustra este ponto)
  •   modo alfanumérico  codificação de caracteres. 0-9 compreende, maiúscula de A a Z (não minúsculas), e o símbolo * $% + - /: incluindo espaços. Esses personagens serão mapeadas para uma tabela de índice de caractere. Em que SP é a seguinte :( um espaço, personagem Char, valor que é o valor do índice) é o processo de codificar o par de caracteres fora, e, em seguida, convertido no quadro binário 45, e, em seguida, convertido em um 11bits binários, se a última há um one-off, ele se transformaria em um 6bits binários. O número de caracteres requerido modo de codificação e compilado 9, 11 ou 13 de binário (na seguinte tabela Tabela 3) Dependendo do tamanho Versão

  •   modo byte , Byte código, caracteres podem ser ISO 8859-1-0-255. Alguns scanner de código bidimensional pode detectar se a codificação UTF-8.
  •   modo de Kanji  Este é um código japonês, mas também double-byte codificação. O mesmo também pode ser usado codificação chinês. caráter japonês e chinês codificação irá subtrair um valor. Depois de dois 16 caracteres em 0X8140 para 0X9FFC irá subtrair 8140, os personagens de 0XE040 para 0XEBBF subtrair 0XC140, então o resultado do hexadecimal de dois bits ex-out multiplicado por 0xC0, em seguida, adicione: if ary da última vez na codificação de 13bit. No exemplo abaixo:

  •   Modo estendido Interpretação Channel (ECI)  Usado principalmente para conjuntos de caracteres especiais. Nem todos os scanners suportam essa codificação.
  •   Modo Append estruturado  Para a codificação híbrido, isto é, o código bidimensional contém uma variedade de formatos de codificação.
  •   modo FNC1  Esta codificação principalmente para algumas indústrias especiais ou indústria com. Por exemplo, os códigos de barras GS1 e similares.
  •  Para simplificar, os três não serão discutidos mais adiante neste artigo.
  •  As duas tabelas a seguir,
  • Tabela 2 é a vários formato de codificação do "número", escreve isto na informação do formato. Nota: Os chineses são 1101
  • A Tabela 3 mostra as diferentes versões (tamanho) do código bidimensional, com os números mais baixos, os caracteres e o modo de Kanji byte, para o número binário indivíduo codificada de bits. (Especificações do código bidimensional, há uma variedade de codificação mesa normas será mencionado mais tarde)

  •  Vamos olhar alguns exemplos,
  • Exemplo 1: digitalmente codificado
  • Versão 1 em tamanho, correção de erro está no nível H, o código: 01234567
  • 1. As figuras divididos em três grupos: 01234567
  • 2. transformá-los em binário: 012 transformar em 0000001100; 345 transformar em 0101011001; 67 transformar-se em 1.000.011.
  • 3. binário encadear estes três: 000000110001010110011000011
  • 4. O número de dígitos binários convertidos em (versão 1-H é de 10 bits): 8 dígitos binários é 0000001000
  • 5. Os marcadores codificados 0001 e os códigos digitais aplicados ao passo frontal 4: 10000110001000000100000000011000101011001
  • Exemplo Dois: Codificação de caracteres
  • No caso em que o tamanho da versão 1, o nível de correcção de erros H, a codificação: AC-42
  • 1. Localize o AC-42 Índice das cinco palavras (10,12,41,4,2) da tabela de índice de caractere
  • 2. vinte e dois pacotes: (10, 12) (41,4) (2)
  • 3. cada conjunto é convertido num 11bits binários:
  • (10, 12) é igual a 10 * 45 + 12462 em vez 00111001110
  •  (41,4) 41 * 45 + 1849 é igual a 4 por sua vez, em 11100111001
  •  (2) 2 é igual a uma vez 000010
  • 4. ligado ao binário: 0011100111011100111001000010
  • 5. O número de caracteres convertida em binário (Versão 1-H de 9 bits): 5 caracteres, convertido em 5000000101
  • 6. cabeça 0010 mais que codifica e número de identificação passo de codificação 5: 00111001110111001110010010000000101000010
  • Terminator e caráter acolchoada
  •  Se tivermos uma seqüência OLÁ mundo a ser codificado, de acordo com os dois exemplos acima, obtemos a seguinte codificação,
  • OlÁ WORLD codificada codificação de caracteres 00100000010110110000101101111000110100010111001011011100010011010100001101
  •  Nós também gostaríamos de acrescentar Terminator:
  • OlÁ WORLD caracteres codificados final codificação 011110001101000101110010110111000100110101000011010000001000000101101100001011
  • Imprensa 8bits rearranjo
  •  Se você somar nem toda a codificação é um múltiplo de 8 e ainda temos o suficiente para trás 0, como o anterior, um total de 78 bits, então temos de acrescentar dois zeros, pressione 8 bits dividido em muitos grupos:
  •  0.010.000.001.011.0110.000.101.101.111.0001.101.000.101.110.0101.101.110.001.001.10101000011010000 00
  • símbolos cheios (Padding Bytes)
  •  Finalmente, se se não atingiu o limite máximo do número de bits, precisamos adicionar algum código acolchoada (Enchimento Bytes), Enchimento Bytes é repetir os seguintes dois bytes: 1110110000010001 (Ambos Binary Coded Decimal é de 236 e 17, eu não sei por quê, só sei que Spec está escrito assim) Bits limites máximos para cada para cada nível de correção de erros Versão, você pode ver QR Spec página 28-32 da Tabela-7 uma mesa.
  •  Suponha que precisa de correção de erro nível de codificação é Q Versão 1, então as suas maiores necessidades 104 bits, enquanto acima de nós apenas 80 bits, portanto, necessidade de fazer-se 24 bits, que é necessário três bytes de enchimento, nós Adicionar três, obtendo assim o seguinte código:
  •  0.010.000.001.011.0110.000.101.101.111.0001.101.000.101.110.0101.101.110.001.001.1010.100.001.101.000.000 111011000.001.000.111.101.100
  •  Os dados acima é codificado código, chamado de Dados Codewords, cada 8bits chamado de palavra-chave, temos esses dados, além de informações de código de correção de erro.
  • código de correção de erros
  •  Acima, falamos de alguns dos o nível de correção de erros, correção de erros Código Nível, código bidimensional, existem quatro níveis de correção de erros, razão pela qual código bidimensional estão com defeito pode varrer, razão pela qual algumas pessoas em posição central do código bidimensional Junte-ícone.
  • nível de palavra nível de nível G capacidade de correcção de erros de palavras de código de 7% M pode ser corrigido de 15% pode ser corrigido nível Q palavra de 25% pode ser corrigido de 30% de palavra de código H pode ser corrigido
  •  Assim, o código QR é a forma como os dados adicionados com código de correção de erro? Em primeiro lugar, precisamos de código do pacote de dados, ou seja, em diferentes Block, e em seguida, executa a codificação para cada bloco de correção de erros, como os pacotes, podemos ver o QR Code Spec página 33 a 44 da Tabela-13 a Tabela- tabela de definição 22. Note-se que os dois últimos:
  • Número de erro de código de blocos de correção  : Como muitos blocos precisam pontos.
  • Error Correction código por Blocks : O número de cada bloco de código, o número de chamada de código, isto é, o número de bytes de 8 bits.

  •  Por exemplo: o acima do nível de correcção de erros Versão 5 + Q: requer quatro blocos (blocos 2 é um conjunto de dois, com um total de dois), dois blocos em cada um do primeiro conjunto de 15 bits de dados + 9 bits para cada um dos um código de correcção de erro (Nota: na tabela de palavras de código é um byte de 8 bits) (Nota ainda: a última fórmula em um caso (c, k, r) é: C = k + 2 * r, tal como explicado na nota de rodapé: corrigindo código de erro é inferior a metade da capacidade do código de correção de erro)
  •  O diagrama a seguir é um exemplo de um 5-Q (porque o formato binário para gravação de fazer muito grande, então eu uso o decimal, podemos ver cada pedaço de código de correção de erro tem 18 palavras-código, que é de 188bits binário número)
  • código de correcção de erros de dados para cada pedaço bloco 11678.570.134.873.885.194.1195.061.861.033.821.319.91145115247241223.229.248.154.117392246154111861611112.466.671.181.342.42738 é 8.622.198.199.146.687.2049.660.202.182.124.157.2001.342.712.920.917.163.163120133211822302.471.195.071.181.348.738826.134.151.507.148.116.177212761.337.524.223.876.195.23018910108240192141270247118861.946.151.501.623.617.236236.172.362.351.595. 1724173147593.310.640.255.17282213132178236
  •  Nota: O código de correção de erro código bidimensional é principalmente através da correção de erros Reed-Solomon (Reed - Solomon algoritmos de correção de erro) para alcançar. Para este algoritmo, para mim, é bastante complexo, há uma série de cálculos matemáticos, tais como: divisão polinomial, o número 1-255 mapeado para a enésima potência de 2 (0 < = N < Coisa = 255) Galois campo Galois campo como um deus, e correção de erros com base em fórmulas matemáticas com base em estas, porque minha infra-estrutura de dados é pobre, muito complicado para mim, por isso estou moda de curta duração pouco não entender completamente, ainda está aprendendo, então eu estou aqui para dizer essas coisas não vai começar. Também por favor me perdoe. (Claro que, se um amigo é muito clara, muito numerosas para pedir me ensinar)
  • A codificação definitiva
  • colocação intercaladas
  •  Se você acha que podemos começar a desenhar, você está errado. tecnologia Chaos código bidimensional não terminar, levá-la cada código de palavras-código de erro e dados de código de correção alternadamente juntos. Como alternando-o, as regras são as seguintes:
  •  Para que os símbolos de dados: as primeiras palavras de código de cada bloco estão dispostas em cis adquirir é boa, em seguida, tomar o primeiro do segundo, e assim por diante. Como: As palavras de código de dados no exemplo acima, como se segue:
  • bloco 167857013487388519411950618610338
  • bloco 224624666711813424273886221981991466
  • Bloco 31822302471195071181348738826134151507 bloco 4702471188619461515016236172361723617236
  •  Vamos dar a primeira coluna: 67, 246, 182, 70
  •  E, em seguida, tomar a segunda coluna: 67, 246, 182, 70, 85246230, 247
  •  E assim por diante: 67, 246, 182, 70, 85246230, 247 ......... ........., 38,6,50,17,7,236
  •  Para código de correção de erro, que é o mesmo:
  • 28720496602021821241572001342712920917163163120133 bloco bloco bloco 121319911451152472412232292481541171541118616111139314811617721276133752422387619523018910108240192141 bloco 423515951732414759331064025517282213132178236
  •  E tomado como símbolos de dados para obter: 213,87,148,235,199,204,116,159, ...... ...... 39133141236
  •  Em seguida, em seguida, os dois conjuntos (código após o código de correção de erros nos dados) juntos para dar:
  •  67, 246, 182, 70, 85, 246, 230, 247, 70, 66, 247, 118, 134, 7, 119, 86, 87, 118, 50, 194, 38, 134, 7, 6, 85, 242, 118, 151, 194, 7, 134, 50, 119, 38, 87, 16, 50, 86, 38, 236, 6, 22, 82, 17, 18, 198, 6, 236, 6, 199, 134, 17, 103, 146, 151, 236, 38, 6, 50, 17, 7, 236, 213, 87, 148, 235, 199, 204, 116, 159, 11, 96, 177, 5, 45, 60, 212, 173, 115, 202, 76, 24, 247, 182, 133, 147, 241, 124, 75, 59, 223, 157, 242, 33, 229, 200, 238, 106, 248, 134, 76, 40, 154, 27, 195, 255, 117, 129, 230, 172, 154, 209, 189, 82, 111, 17, 10, 2, 86, 163, 108, 131, 161, 163, 240, 32, 111, 120, 192, 178, 39, 133, 141, 236
  •  Esta é a nossa área de dados.
  • Bits restante
  •  Finalmente juntamente Bits lembrete, por algum QR versão, o acima não é suficiente comprimento, mais Bits restantes, tais como: a versão acima de 5Q código bidimensional, mais os sete bits, Bits restante, mais de zero muito bem. Quantas Restante pouco sobre o que precisa Version, você pode ver a definição da tabela na página 15 do da Tabela-1 do Código QR Spec.
  • Figura desenho código bidimensional
  • Pattern Detection posição
  •  Primeiro, um primeiro padrão desenhado na detecção de posição três cantos. (Versão importa o que o tamanho deste padrão é tão grande)

  • Padrão alinhamento
  •  Em seguida, desenhe um padrão e, em seguida, Alinhamento (Versão Não importa o que o tamanho deste padrão é tão grande)

  •  Alinhamento no local, você pode ver a Table-E.1 na página 81 da tabela de definição Spec Código QR (a tabela não é forma completa)

  •  Abaixo está um exemplo da tabela acima Version8 (6,24,42)

  • Padrão sincronismo
  •  Em seguida é a linha padrão Timing (isto vai sem dizer)

  • Informações Format
  •  A próxima é a Formação de Informação, a parte azul na figura abaixo.

  • Informação de formato é de 15 bits de informação, cada posição de bit, como mostrado na FIG Módulo escuro :( notar que os dados, ele nunca irá ocorrer)

  • Estes 15 bits incluem:
  • 5 bits de dados, em que:, 2 bits são utilizados para representar o tipo de Correcção de Erros Nível, 3 th bits representam o uso do que Máscara
  • 10 bits de correção de erros. Principalmente calculado pelo Código BCH
  •  Em seguida, 15 bits também gostaria de fazer com 101.010.000.010.010 operação XOR. Isso garante que não porque escolhemos os níveis de correção de erros e 000 da máscara 00, resultando em todo o branco, o que aumentará a dificuldade de nosso scanner de reconhecimento de imagem.
  •  Aqui está um exemplo:

  •  Erro Correção Nível sobre a tabela a seguir:

  •  Máscara padrão na parte traseira, como mostrado na Tabela 23.
  • Informações da versão
  • O próximo é Informações da versão (Esta codificação requer 7 mais adiante), a parte azul na figura abaixo.

  •  Informações da versão total de 18 bits, incluindo o número da versão de 6 bits e 12 bits de código de correção de erro, o seguinte é um exemplo:

  •  Sua posição de enchimento é a seguinte:

  • Código de dados e correção de erros
  •  Em seguida, em seguida, preencha a final de codificação, a final codificado preenchido da seguinte forma: Iniciar a partir do canto inferior esquerdo ao longo da linha vermelha encher nossos respectivos bits, 1 é preto, o branco é 0. Se você encontrar a zona de não-dados acima, o desvio ou ignorar.

  • O padrão de máscara
  •  Desta forma, o preenchimento em nosso mapa, mas talvez esses pontos não são equilibrados, se uma grande área de aparecer blocos em branco ou preto, vai dizer-nos difícil de varredura identificou. Então, o que precisamos fazer operação de mascaramento (por, não o suficiente para o complexo) Spec QR de dizer, QR tem oito máscara que você pode usar, como mostrado abaixo: em que cada máscara fórmulas em cada gráfico abaixo. O chamado máscara, colocá-lo claramente, é para gerar acima gráfico e fazer a operação XOR. Máscara e só XOR área de dados, não afetará as áreas funcionais. ( Nota: selecione a máscara é também um algoritmo adequado )

  •  Mascarar o seu código de identificação que se segue :( i, j correspondem ao X na FIG., Y)

  •  Aqui estão algumas cuida da máscara, podemos ver alguns dos XOR a máscara dos dados se torna mais fragmentado.

  •  Máscara após o código bidimensional em no desenho final.
  •  Bem, você pode tentar escrever sobre o programa de código QR, é claro, você pode usar a Internet para encontrar uma biblioteca de Reed Soloman algoritmo de correção de erros, ou olhar para o código-fonte de outras pessoas é como conseguir isso complicado codificação.
Pesado! O direito de reunir-se com boa aluguer ou grande mercado
Anterior
Bolos palmas comparáveis, uma compra é dezenas, este Baozi Pu ao lado pedonal Nanjing Road Street é muito ocupado todos os dias!
Próximo