Corpus de teste público
Nossas afirmações de compatibilidade de scanners são tão boas quanto as evidências nas quais são baseadas. Esta página é o corpus, as entradas que submetemos a teste de regressão em nossas famílias de codificadores, mais o comportamento da câmera do telefone que você pode auditar por conta própria sem nos levar pela palavra.
Baixar corpus.zip JSON de fixtures + CSV + metodologia + README. ~4 KB.
Carregando versão…
Como usar o corpus
Cada vetor de teste está em /test-vectors/fixtures.json. Um objeto JSON por tipo com os campos de entrada e as subcadeias decodificadas esperadas. Buscado ao vivo deste site, sem cópias obsoletas.
Pegue o mapa de fields de qualquer fixture, insira os valores no gerador para esse tipo e clique em Gerar. O QR resultante é bit a bit idêntico ao que nosso CI processa em ida e volta.
Aponte uma câmera iPhone, câmera Android, Google Lens, scanner industrial (Zebra, Honeywell, Datalogic) ou leitor específico do app (app bancário, autenticador) para o QR gerado. Confirme que o texto decodificado contém cada subcadeia expect desse fixture.
Se um scanner da sua frota retornar uma decodificação que não corresponda ao fixture, abra um issue. Vamos reproduzir, adicionar seu scanner à matriz de compatibilidade pública e (se for um bug do codificador) enviar uma correção.
Resultados de escaneamento esperados
Renderizado a partir do mesmo conjunto de dados da matriz de compatibilidade e da linha "Funciona em" de cada página de tipo, então os três não podem discordar entre si. O arquivo completo de fixtures em /test-vectors/ tem 33 entradas, uma por família de codificador que testamos em regressão; não é uma linha por tipo de produto, e não afirmamos que seja.
| Tipo | Entrada do fixture | iPhone Camera | Android Camera | Scanner profissional |
|---|---|---|---|---|
| URL | https://example.com/test | Abre o linkA1 | Abre o linkA5 | DecodificaA8 |
| WiFi | WIFI:S:MyNet;T:WPA;P:...;; | Conecta à redeA1 | Conecta à redeA5 | Decodifica o payloadA8 |
| WiFi Enterprise (EAP) | WPA2-EAP PEAP identity=alice@corp | iOS 17+, relatadoU | Decodifica; conectar depende do fabricanteU | Decodifica o payloadQ |
| vCard | FN=Alice ORG=Acme ... | Adicionar aos ContatosA1 | Adicionar aos ContatosA5 | Decodifica o payloadA8 |
| TOTP | otpauth://totp/...?secret=JBSW... | O app autenticador lêA9, A10 | O app autenticador lêA9, A10 | Decodifica o URIA8 |
| eSIM | LPA:1$rsp.example.com$K2-LM... | iOS 17.4+ provisionaA4 | Android 13+ provisionaU | Decodifica o URIQ |
| Bitcoin (BIP-21) | bitcoin:1A1zP1eP... | Abre o app de carteiraQ | Abre o app de carteiraQ | Decodifica o URIQ |
| SEPA (EPC) | BCD header + name + IBAN + amount | Apenas string brutaQ | Apenas string brutaQ | Decodifica a string brutaQ |
| Swiss QR-bill | SPC header + IBAN + address + amount | Apenas string brutaQ | Apenas string brutaQ | Decodifica a string brutaQ |
| Micro QR | Compact payload | Sem decodificaçãoV, U | Sem decodificaçãoG | Leitores industriaisZ |
| rMQR | Rectangular payload | Sem decodificaçãoU | Sem decodificaçãoG | Firmware mais recente da Zebra, Scandit e CognexZ |
| GS1 Digital Link | https://id.gs1.org/01/09506000134352 | Abre a URLQ | Abre a URLQ | O firmware do PDV interpreta os AIsQ |
| Aztec | Arbitrary payload | Sem decodificaçãoA2 | Google Lens, algumas variantesA7 | NativoA8 |
| Data Matrix | Arbitrary payload | Sem decodificaçãoA2 | Google LensA6 | NativoA8 |
| PDF417 | AAMVA or arbitrary | Sem decodificaçãoA2 | Google Lens, inconsistenteA7 | NativoA8 |
| AAMVA driver license | @\n\x1e\rANSI 636014100002DL... | Fluxo compatível com carteira no iOS 17+A3 | Somente apps compatíveis com carteiraU | NativoA8 |
| EAN-13 / UPC-A | 0012345678905 | Sem decodificaçãoAp | Google LensG | Todo PDV de varejoA8 |
| Code 128 | ABC-123 | Sem decodificaçãoAp | Google LensG | NativoA8 |
Como ler as marcas
- ✓: lê a partir do app de câmera padrão, sem precisar de app adicional
- ~: lê sob uma condição indicada na célula (um app específico, versão do SO ou modo)
- ✗: não decodifica; você precisa de um app de scanner ou hardware
Evidência
- A: our own device test; the number is the row in the attestation log
- Ap: Apple's support page describes the Camera app and Code Scanner as reading QR codes and lists no other symbology
- G: Google Lens decodes the ML Kit barcode formats: Codabar, Code 39, Code 93, Code 128, EAN-8, EAN-13, ITF, UPC-A, UPC-E, Aztec, Data Matrix, PDF417 and QR Code; Micro QR and rMQR are not on the list
- Z: Zebra lists Micro QR and rectangular Micro QR among the DS8100 series' 2D symbologies
- V: Apple's Vision framework decodes Micro QR for third-party apps since iOS 15; that is a developer API, not the Camera app
- Q: a standard QR symbol, so decoding is the attested QR result; the question is what the phone does with the payload
- U: not in our attestation log yet; from vendor documentation or field reports, treat as provisional
O que significa "resultado de escaneamento esperado"
- Decodes, Decodifica, o leitor nativo do telefone retorna o payload sem precisar de um app separado.
- Partial, Parcial, a decodificação depende de um app específico (autenticador, carteira, banco) ou de uma versão específica do OS.
- No decode, Sem decodificação, câmera nativa não retorna nada. Requer scanner ou leitor especializado.
- As letras pequenas após cada resultado indicam a evidência: A mais um número é uma linha do log de atestação abaixo; outras letras são documentação de fornecedores, listadas sob cada tabela. Um U significa que ainda não testamos essa célula em nossos próprios dispositivos.
Notas de metodologia
- Todos os fixtures são de ida e volta. Nosso CI gera cada código no Chromium sem cabeça, o decodifica de volta via API
BarcodeDetectordo navegador e verifica a correspondência de subcadeia. Um CI verde significa que o corpus é internamente consistente. - Os resultados do scanner nesta tabela são de testes manuais em dispositivos reais. Sem síntese. iPhone 15 Pro no iOS 18.3, Pixel 8 no Android 14, imager Zebra DS8100 no firmware CAAACS00-002-R06.
- Publicamos resultados negativos. Se a câmera iPhone se recusa a decodificar uma simbologia (Data Matrix, Aztec, PDF417), isso é 'Sem decodificação' na tabela, não uma renomeação de 'leitor nativo'.
- O corpus é versionado. Quando adicionamos um tipo ou corrigimos um bug do codificador, a entrada de fixture correspondente é enviada no mesmo commit. O changelog registra cada mudança de fixture, e o corpus.VERSION.txt carrega o hash do arquivo de fixtures a partir do qual o ZIP atual foi criado.
Log de atestação de frota de scanners
Cada execução manual em dispositivo, datada. Linhas são adicionadas quando adquirimos hardware novo ou um usuário reporta uma discrepância; um resultado nunca muda silenciosamente, ele ganha uma nova linha.
| # | Device | OS / app | Corpus slice | Result | Date | Notes |
|---|---|---|---|---|---|---|
| A1 | iPhone 15 Pro | iOS 18.3, native Camera | All QR fixtures | pass | 2026-04-10 | |
| A2 | iPhone 15 Pro | iOS 18.3, native Camera | Aztec, PDF417, Data Matrix | fail | 2026-04-10 | Nenhum decodifica nativamente (esperado, veja /standards/non-qr-2d/) |
| A3 | iPhone 15 Pro | iOS 18.3, native Camera | AAMVA PDF417 | partial | 2026-04-10 | O fluxo compatível com carteira no iOS 17+ oferece Adicionar à Wallet; o PDF417 bruto não é devolvido |
| A4 | iPhone 15 Pro | iOS 18.3, Wallet | eSIM LPA | pass | 2026-04-12 | O fluxo de Adicionar eSIM é acionado corretamente |
| A5 | Pixel 8 | Android 14, native Camera | All QR fixtures | pass | 2026-04-10 | |
| A6 | Pixel 8 | Android 14, Google Lens | Data Matrix | pass | 2026-04-10 | |
| A7 | Pixel 8 | Android 14, Google Lens | Aztec, PDF417 | partial | 2026-04-10 | Algumas variantes decodificam; o suporte é inconsistente |
| A8 | Zebra DS8100 | firmware CAAACS00-002-R06 | All 2D + 1D fixtures | pass | 2026-04-11 | Leitor industrial (imager), referência canônica |
| A9 | Google Authenticator | v7.0+ (iOS/Android) | TOTP, HOTP | pass | 2026-04-12 | Somente SHA-1, 6 dígitos (ignora os parâmetros algorithm/digits conforme o perfil de fato do Google) |
| A10 | 1Password | v8 (iOS/Android/macOS) | TOTP, HOTP | pass | 2026-04-12 | Suporte completo à RFC, incluindo SHA-256, SHA-512, 8 dígitos |
Em breve
- Artefatos pré-renderizados. O ZIP atual inclui fixtures + metodologia + CSV. Uma revisão futura adicionará SVG + PNG pré-renderizados de cada fixture para que você possa inserir diretamente em um harness de frota de scanners. Etapa de navegador sem cabeça em tempo de compilação pendente.
- Atestação de frota de scanners. O log de dispositivos datado é publicado nesta página e cresce cada vez que verificamos contra um novo dispositivo.
- Verificação de terceiros. Um laboratório de segurança independente executa o corpus através de uma frota de scanners e publica um atestado assinado. Pendente, encomendado; relatório será publicado aqui quando chegar.
Veja também
- /test-vectors/, JSON completo de fixtures e tabela pesquisável.
- /compatibility/, matriz de compatibilidade de scanners ao vivo.
- /standards/, páginas de referência por padrão.
- /print-size/, guia de impressão física que acompanha o corpus.