Como Validar Checksums de Código de Barras e Usar Leitura Compatível com Formatos em C
Os checksums dos códigos de barras ajudam a detectar erros de substituição. Por exemplo, um único dígito invertido em uma etiqueta EAN-13 pode enviar um pacote para o armazém errado. A leitura com reconhecimento de formato fornece uma camada adicional de validação, restringindo o decodificador às simbologias esperadas. Essa abordagem reduz os falsos positivos causados por ruído de fundo e diminui o tempo de verificação, ignorando detectores de formato desnecessários.
O IronBarcode realiza a verificação de checksum automaticamente durante a decodificação. O algoritmo de dígito verificador de cada simbologia é executado por padrão, e os códigos de barras que falham são descartados antes que os resultados sejam retornados. A propriedade BarcodeReaderOptions.ExpectBarcodeTypes limita as leituras a formatos específicos, enquanto RemoveFalsePositive adiciona uma verificação secundária para leituras ambíguas.
Este guia explica como validar checksums de código de barras, restringir leituras a formatos esperados e combinar ambas as técnicas em um controle de qualidade em camadas usando BarcodeReaderOptions.
Início Rápido: Validar Códigos de Barras com Restrições de Checksum e Formato
Configure BarcodeReaderOptions com ExpectBarcodeTypes e RemoveFalsePositive para restringir as leituras às simbologias esperadas com verificação automática de checksum.
:path=/static-assets/barcode/content-code-examples/how-to/checksum-and-format-validation/quickstart.cs
using IronBarCode;
// Format-constrained read with false-positive removal.
// Limit the decoder to EAN-13 and Code128; checksums are
// validated automatically and failures are silently discarded.
var options = new BarcodeReaderOptions
{
ExpectBarcodeTypes = BarcodeEncoding.EAN13 | BarcodeEncoding.Code128,
RemoveFalsePositive = true,
Speed = ReadingSpeed.Balanced
};
BarcodeResults results = BarcodeReader.Read("label.png", options);
Imports IronBarCode
' Format-constrained read with false-positive removal.
' Limit the decoder to EAN-13 and Code128; checksums are
' validated automatically and failures are silently discarded.
Dim options As New BarcodeReaderOptions With {
.ExpectBarcodeTypes = BarcodeEncoding.EAN13 Or BarcodeEncoding.Code128,
.RemoveFalsePositive = True,
.Speed = ReadingSpeed.Balanced
}
Dim results As BarcodeResults = BarcodeReader.Read("label.png", options)
Fluxo de trabalho mínimo (5 etapas)
- Baixe a biblioteca IronBarcode do NuGet
- Crie uma instância de
BarcodeReaderOptions - Defina
ExpectBarcodeTypespara as simbologias presentes no pipeline - Ative
RemoveFalsePositivepara verificação secundária - Chame
BarcodeReader.Readpara decodificar; os checksums são validados automaticamente durante a decodificação.
Como Validar Checksums de Código de Barras?
O IronBarcode valida os checksums durante a decodificação de acordo com a especificação de cada simbologia. Por exemplo, ao ler um código de barras EAN-13, o dígito verificador Mod10 é calculado a partir dos primeiros 12 dígitos e comparado ao 13º. Se os dígitos não coincidirem, o código de barras é rejeitado silenciosamente e não aparece na coleção BarcodeResults. Essa abordagem se aplica a todos os formatos com dígito verificador obrigatório, incluindo UPC-A, UPC-E, EAN-8, Código 128, ITF e outros.
Este modelo implícito difere de bibliotecas que expõem uma alternância explícita. A tabela abaixo compara as duas abordagens:
| Aspecto | IronBarcode | Aspose.BarCode |
|---|---|---|
| Gatilho de validação | Automático; executa durante cada decodificação. | Explícito: ChecksumValidation.On / Off / Default |
| Ação do desenvolvedor necessária | Nenhum; códigos de barras inválidos são excluídos dos resultados. | Defina BarcodeSettings.ChecksumValidation antes de ler. |
| Desativar soma de verificação | Não exposto; as somas de verificação são sempre aplicadas para formatos obrigatórios. | Sim; ChecksumValidation.Off ignora a verificação. |
| Formatos de checksum opcional (Code 39) | Utiliza Confidence + RemoveFalsePositive para filtrar leituras de baixa qualidade. | Habilite explicitamente com EnableChecksum.Yes |
| Comportamento de falha | Código de barras omitido silenciosamente dos resultados | O código de barras pode apresentar um valor de checksum separado para inspeção manual. |
Para simbologias com checksums opcionais, como Código 39, a biblioteca usa pontuação de confiança e RemoveFalsePositive em vez de uma opção para ativar/desativar o checksum.
Entrada
Uma etiqueta de prateleira de armazém Código 128 (caminho de sucesso) e uma imagem em branco sem código de barras (caminho de falha).
warehouse-rack.png (caminho de sucesso)
blank-no-barcode.png (caminho de falha — nenhum código de barras presente)
:path=/static-assets/barcode/content-code-examples/how-to/checksum-and-format-validation/checksum-confidence.cs
using IronBarCode;
// Constrain reads to 1D formats and enable secondary verification.
// ConfidenceThreshold rejects decodes where the ML detector falls below 85%,
// acting as a quality gate for optional-checksum symbologies like Code39.
var options = new BarcodeReaderOptions
{
ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional,
RemoveFalsePositive = true,
ConfidenceThreshold = 0.85,
Speed = ReadingSpeed.Detailed
};
BarcodeResults results = BarcodeReader.Read("warehouse-rack.png", options);
foreach (BarcodeResult result in results)
{
// Each result has passed checksum validation (mandatory formats)
// and the 85% confidence threshold, so no additional filtering is needed.
Console.WriteLine($"[{result.BarcodeType}] {result.Value} page={result.PageNumber}");
}
if (results.Count == 0)
{
Console.Error.WriteLine("No valid barcodes found. Possible causes:");
Console.Error.WriteLine(" - Check digit mismatch (barcode silently rejected)");
Console.Error.WriteLine(" - Confidence below 85% threshold");
Console.Error.WriteLine(" - Format not in ExpectBarcodeTypes");
}
Imports IronBarCode
' Constrain reads to 1D formats and enable secondary verification.
' ConfidenceThreshold rejects decodes where the ML detector falls below 85%,
' acting as a quality gate for optional-checksum symbologies like Code39.
Dim options As New BarcodeReaderOptions With {
.ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional,
.RemoveFalsePositive = True,
.ConfidenceThreshold = 0.85,
.Speed = ReadingSpeed.Detailed
}
Dim results As BarcodeResults = BarcodeReader.Read("warehouse-rack.png", options)
For Each result As BarcodeResult In results
' Each result has passed checksum validation (mandatory formats)
' and the 85% confidence threshold, so no additional filtering is needed.
Console.WriteLine($"[{result.BarcodeType}] {result.Value} page={result.PageNumber}")
Next
If results.Count = 0 Then
Console.Error.WriteLine("No valid barcodes found. Possible causes:")
Console.Error.WriteLine(" - Check digit mismatch (barcode silently rejected)")
Console.Error.WriteLine(" - Confidence below 85% threshold")
Console.Error.WriteLine(" - Format not in ExpectBarcodeTypes")
End If
Saída
Caminho para o Sucesso
O código de barras da estante do armazém retornou como RACK-A1-LOT-7382 na página 0. Ele ultrapassou o limite de confiança de 85% e passou pela validação de checksum, então aparece em BarcodeResults.
Caminho de Falha
Aumentar o valor de ConfidenceThreshold acima do seu valor padrão de 0,7 torna esse controle ainda mais rigoroso para simbologias de checksum opcionais, como o Código 39.
Com a validação de checksum resolvida, o próximo passo é restringir o leitor aos formatos de código de barras que seu pipeline espera.
Como Usar a Leitura de Código de Barras Sensível ao Formato?
O enum BarcodeEncoding é um tipo de flags, permitindo que vários formatos sejam combinados usando o operador OR bit a bit. A configuração ExpectBarcodeTypes limita o leitor a esses formatos e ignora a detecção de outros.
| Valor | Categoria | Descrição | Checksum |
|---|---|---|---|
BarcodeEncoding.All | Meta | Todos os formatos suportados (comportamento padrão) | Por formato |
BarcodeEncoding.AllOneDimensional | Meta | Todos os formatos lineares (1D), incluindo empilhado | Por formato |
BarcodeEncoding.AllTwoDimensional | Meta | Todos os formatos de matriz/rede (2D) | Por formato |
BarcodeEncoding.Código 128 | 1D | Alfanumérico de alta densidade (logística, transporte) | Obrigatório (Mod103 ponderado) |
BarcodeEncoding.EAN13 | 1D | Identificação de produto de varejo, 13 dígitos | Obrigatório (Mod10) |
BarcodeEncoding.QRCode | 2D | Matriz de alta capacidade (URLs, dados estruturados) | ECC de Reed-Solomon |
BarcodeEncoding.Código 39 | 1D | Alfanumérico (defesa, automotivo) | Opcional (Mod43) |
BarcodeEncoding.UPCA | 1D | Varejo norte-americano, 12 dígitos | Obrigatório (Mod10) |
BarcodeEncoding.DataMatrix | 2D | Matriz compacta (eletrônica, indústria farmacêutica) | ECC de Reed-Solomon |
BarcodeEncoding.PDF417 | 2D | Empilhados (carteiras de identidade, transporte) | ECC de Reed-Solomon |
Além da velocidade, restringir o conjunto de formatos funciona como um mecanismo de validação: códigos de barras com qualquer simbologia não listada são excluídos dos resultados, mesmo que estejam fisicamente presentes na imagem.
Entrada
Uma etiqueta de envio Código 128 (caminho de sucesso) e um código QR que não corresponde à restrição de aceitar apenas Código 128 (caminho de falha).
shipping-label.png (caminho de sucesso — Código 128 corresponde à restrição)
qr-format-mismatch.png (caminho de falha — QR rejeitado pelo filtro somente Código 128)
:path=/static-assets/barcode/content-code-examples/how-to/checksum-and-format-validation/format-constrained.cs
using IronBarCode;
// Constrained read: only Code128 barcodes are returned.
// Faster because the reader skips all other format detectors.
var constrainedOptions = new BarcodeReaderOptions
{
ExpectBarcodeTypes = BarcodeEncoding.Code128,
Speed = ReadingSpeed.Faster,
ExpectMultipleBarcodes = false
};
// Broad read: all supported formats are scanned.
// Useful for verification or when the image format is unknown.
var broadOptions = new BarcodeReaderOptions
{
ExpectBarcodeTypes = BarcodeEncoding.All,
Speed = ReadingSpeed.Detailed,
ExpectMultipleBarcodes = true
};
string imagePath = "shipping-label.png";
BarcodeResults constrained = BarcodeReader.Read(imagePath, constrainedOptions);
Console.WriteLine($"Constrained: {constrained.Count} Code128 barcode(s) found");
BarcodeResults broad = BarcodeReader.Read(imagePath, broadOptions);
Console.WriteLine($"Broad: {broad.Count} barcode(s) found across all formats");
foreach (BarcodeResult result in broad)
{
Console.WriteLine($" [{result.BarcodeType}] {result.Value}");
}
Imports IronBarCode
' Constrained read: only Code128 barcodes are returned.
' Faster because the reader skips all other format detectors.
Dim constrainedOptions As New BarcodeReaderOptions With {
.ExpectBarcodeTypes = BarcodeEncoding.Code128,
.Speed = ReadingSpeed.Faster,
.ExpectMultipleBarcodes = False
}
' Broad read: all supported formats are scanned.
' Useful for verification or when the image format is unknown.
Dim broadOptions As New BarcodeReaderOptions With {
.ExpectBarcodeTypes = BarcodeEncoding.All,
.Speed = ReadingSpeed.Detailed,
.ExpectMultipleBarcodes = True
}
Dim imagePath As String = "shipping-label.png"
Dim constrained As BarcodeResults = BarcodeReader.Read(imagePath, constrainedOptions)
Console.WriteLine($"Constrained: {constrained.Count} Code128 barcode(s) found")
Dim broad As BarcodeResults = BarcodeReader.Read(imagePath, broadOptions)
Console.WriteLine($"Broad: {broad.Count} barcode(s) found across all formats")
For Each result As BarcodeResult In broad
Console.WriteLine($" [{result.BarcodeType}] {result.Value}")
Next
Saída
Caminho para o Sucesso
A etiqueta de envio tem o valor SHIP-2024-00438. A leitura restrita detecta imediatamente, já que o Código 128 é o que o filtro espera, e a leitura ampla confirma o mesmo resultado em todos os formatos.
Caminho de Falha
Resultados vazios de uma leitura restrita são um sinal de validação, não um erro; Registre a discrepância para revisão.
Para fluxos de trabalho que misturam tipos de código de barras (por exemplo, uma nota de embalagem com um código de produto EAN-13 e um número de rastreamento Código 128), combine os formatos esperados:
:path=/static-assets/barcode/content-code-examples/how-to/checksum-and-format-validation/multi-format-combine.cs
using IronBarCode;
// Combine multiple format flags with | to scan for more than one symbology
// in a single pass. Each BarcodeResult.BarcodeType identifies which format
// was decoded, enabling downstream routing logic per symbology.
var options = new BarcodeReaderOptions
{
ExpectBarcodeTypes = BarcodeEncoding.EAN13 | BarcodeEncoding.Code128,
ExpectMultipleBarcodes = true
};
Imports IronBarCode
' Combine multiple format flags with Or to scan for more than one symbology
' in a single pass. Each BarcodeResult.BarcodeType identifies which format
' was decoded, enabling downstream routing logic per symbology.
Dim options As New BarcodeReaderOptions With {
.ExpectBarcodeTypes = BarcodeEncoding.EAN13 Or BarcodeEncoding.Code128,
.ExpectMultipleBarcodes = True
}
Cada código retornado BarcodeResult.BarcodeType identifica qual formato foi decodificado, permitindo o roteamento subsequente.
Quais Simbologias Suportam Validação de Checksum?
Nem todos os formatos de códigos de barras usam checksums da mesma maneira. A tabela a seguir mapeia simbologias comuns às suas características de detecção de erros, o que informa o quão agressivamente definir ConfidenceThreshold e RemoveFalsePositive para cada formato:
| Simbologia | Tipo de Checksum | Obrigatório? | Recomendação |
|---|---|---|---|
| EAN-13 / EAN-8 | Mod10 | Sim | Configurações padrão suficientes; verificação de soma de verificação sempre aplicada. |
| UPC-A / UPC-E | Mod10 | Sim | Configurações padrão suficientes; dígito verificador corrigido automaticamente na gravação. |
| Código 128 | Peso Mod103 | Sim | Configurações padrão suficientes; obrigatórias conforme especificação |
| Código 39 | Mod43 | Opcional | Aumente ConfidenceThreshold para 0.8+ e ative RemoveFalsePositive |
| Codabar | Mod16 | Opcional | Semelhante ao Código 39; use a confiança como critério de qualidade. |
| ITF | Mod10 | Opcional | Ative RemoveFalsePositive para formatos intercalados |
| Código QR / DataMatrix | ECC de Reed-Solomon | Sempre | Correção de erros estruturais; nenhuma configuração adicional necessária. |
| PDF417 | ECC de Reed-Solomon | Sempre | Assim como em QR/DataMatrix, a correção de erros é inerente. |
Para simbologias 2D como QR, DataMatrix e PDF417, a correção de erros está integrada na estrutura de codificação. Esses formatos podem se recuperar de danos parciais sem depender de um simples dígito verificador. O código ConfidenceThreshold ainda se aplica durante a fase de detecção de aprendizado de máquina, enquanto a etapa de decodificação se beneficia da redundância inerente à simbologia.
Agora que ambas as técnicas foram compreendidas, vamos combiná-las em um único padrão de validação pronto para produção.
Como Combinar Checksums com Restrições de Formato?
O padrão pronto para produção define ExpectBarcodeTypes, RemoveFalsePositive, ConfidenceThreshold e Speed em um único objeto BarcodeReaderOptions. Juntos, eles formam um mecanismo de controle em camadas: as restrições de formato restringem o espaço de busca, a validação de checksum garante a integridade dos dados, o limiar de confiança filtra decodificações marginais e a remoção de falsos positivos adiciona uma segunda etapa de verificação.
Entrada
Três códigos de barras de leitura POS do diretório pos-scans/ usados como caminho de sucesso: dois EAN-13 e um UPC-A. Uma etiqueta de prateleira de armazém Código 128 é usada como caminho de falha — a restrição EAN-13/UPC-A a rejeita e registra uma linha REJECT.
pos-scan-1.png (sucesso)
pos-scan-2.png (sucesso)
pos-scan-3.png (sucesso)
warehouse-rack.png (falha — Código 128 rejeitado)
:path=/static-assets/barcode/content-code-examples/how-to/checksum-and-format-validation/combined-validation.cs
using IronBarCode;
// Layered validation for retail POS: EAN-13, UPC-A, and UPC-E only.
// Each property adds a distinct filter to the read pipeline.
var options = new BarcodeReaderOptions
{
// Layer 1: format constraint, accept only retail symbologies
ExpectBarcodeTypes = BarcodeEncoding.EAN13 | BarcodeEncoding.UPCA | BarcodeEncoding.UPCE,
// Layer 2: confidence threshold, reject decodes below 80%
ConfidenceThreshold = 0.8,
// Layer 3: false-positive removal, runs a secondary verification pass
RemoveFalsePositive = true,
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = false,
// Require 3 agreeing scan lines to reduce phantom reads from noisy images
MinScanLines = 3
};
string[] scanFiles = Directory.GetFiles("pos-scans/", "*.png");
foreach (string file in scanFiles)
{
BarcodeResults results = BarcodeReader.Read(file, options);
if (results.Count == 0)
{
// No barcode passed all validation layers
Console.Error.WriteLine($"REJECT {Path.GetFileName(file)}: "
+ "no valid EAN-13/UPC barcode (checksum, confidence, or format mismatch)");
continue;
}
BarcodeResult primary = results.First();
// Post-read assertion: verify the decoded format matches expectations.
// ExpectBarcodeTypes already constrains the reader; this check documents
// intent and surfaces unexpected results during future changes.
if (primary.BarcodeType != BarcodeEncoding.EAN13
&& primary.BarcodeType != BarcodeEncoding.UPCA
&& primary.BarcodeType != BarcodeEncoding.UPCE)
{
Console.Error.WriteLine($"UNEXPECTED FORMAT {Path.GetFileName(file)}: "
+ $"got {primary.BarcodeType}, expected EAN-13/UPC");
continue;
}
Console.WriteLine($"OK {Path.GetFileName(file)}: [{primary.BarcodeType}] {primary.Value}");
}
Imports IronBarCode
Imports System.IO
' Layered validation for retail POS: EAN-13, UPC-A, and UPC-E only.
' Each property adds a distinct filter to the read pipeline.
Dim options As New BarcodeReaderOptions With {
' Layer 1: format constraint, accept only retail symbologies
.ExpectBarcodeTypes = BarcodeEncoding.EAN13 Or BarcodeEncoding.UPCA Or BarcodeEncoding.UPCE,
' Layer 2: confidence threshold, reject decodes below 80%
.ConfidenceThreshold = 0.8,
' Layer 3: false-positive removal, runs a secondary verification pass
.RemoveFalsePositive = True,
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = False,
' Require 3 agreeing scan lines to reduce phantom reads from noisy images
.MinScanLines = 3
}
Dim scanFiles As String() = Directory.GetFiles("pos-scans/", "*.png")
For Each file As String In scanFiles
Dim results As BarcodeResults = BarcodeReader.Read(file, options)
If results.Count = 0 Then
' No barcode passed all validation layers
Console.Error.WriteLine($"REJECT {Path.GetFileName(file)}: " &
"no valid EAN-13/UPC barcode (checksum, confidence, or format mismatch)")
Continue For
End If
Dim primary As BarcodeResult = results.First()
' Post-read assertion: verify the decoded format matches expectations.
' ExpectBarcodeTypes already constrains the reader; this check documents
' intent and surfaces unexpected results during future changes.
If primary.BarcodeType <> BarcodeEncoding.EAN13 AndAlso
primary.BarcodeType <> BarcodeEncoding.UPCA AndAlso
primary.BarcodeType <> BarcodeEncoding.UPCE Then
Console.Error.WriteLine($"UNEXPECTED FORMAT {Path.GetFileName(file)}: " &
$"got {primary.BarcodeType}, expected EAN-13/UPC")
Continue For
End If
Console.WriteLine($"OK {Path.GetFileName(file)}: [{primary.BarcodeType}] {primary.Value}")
Next
Saída
Caminho para o Sucesso
Todas as três imagens de leitura do PDV foram aprovadas. O leitor retornou os valores 5901234123471, 4006381333931 e 012345678905. Cada um correspondia ao EAN13 | UPCA | O filtroUPCE` tinha um checksum Mod10 válido e um nível de confiança superior a 0,8.
Caminho de Falha
Definir MinScanLines como 3 aumenta o número mínimo de linhas de leitura coincidentes necessárias para que um código de barras 1D seja válido; O valor padrão é 2. Aumentar esse valor reduz o risco de leituras fantasmas causadas por linhas de varredura ruidosas, mas pode fazer com que códigos de barras finos ou parcialmente danificados sejam perdidos. Em ambientes de ponto de venda (PDV) com etiquetas impressas de alta qualidade, o valor 3 é uma escolha conservadora que reforça a validação sem afetar a produtividade.
A asserção pós-leitura BarcodeType é uma defesa em profundidade: ExpectBarcodeTypes já filtra, mas a verificação explícita documenta a intenção e detecta desvios de configuração sem custo de tempo de execução. Para otimização de velocidade, ReadingSpeed.Faster é adequado para rótulos limpos impressos à máquina; Os códigos Detailed e ExtremeDetail recuperam códigos de barras danificados ou mal iluminados, ao custo de tempos de leitura mais longos.
Quais são os meus próximos passos?
Este artigo abordou o modelo de validação implícita de checksum do IronBarcode, a enumeração de flags BarcodeEncoding para leituras com restrições de formato e um padrão de validação combinado usando ExpectBarcodeTypes, ConfidenceThreshold, RemoveFalsePositive e MinScanLines como portões de qualidade em camadas.
Para leitura adicional, explore estes recursos:
- Tutoriais de IronBarcode — Lendo Códigos de Barras para guias completos de leitura.
- Prevenção de falsos positivos para o mecanismo
RemoveFalsePositiveem detalhes. - Exemplos de Limiar de Confiança para afinação de detecção baseada em ML.
- Formatos de dados de saída para a referência de propriedade
BarcodeResult. - Como Corrigir Imagens para filtros que melhoram a precisão da decodificação.
- Referência de API BarcodeReaderOptions para documentação completa de configuração.
- Referência de API BarcodeEncoding para a lista completa de simbologias suportadas.
Obtenha uma licença de teste gratuita para testar todos os recursos em um ambiente real ou ver opções de licenciamento quando o pipeline estiver pronto para produção.
Perguntas frequentes
O que é a validação de checksum de código de barras?
A validação de checksum de código de barras é um processo que garante a precisão dos dados do código de barras verificando o checksum calculado em relação ao valor codificado dentro do código de barras. Isso ajuda na detecção de erros no processo de varredura.
Como o IronBarcode lida com a validação de checksum?
O IronBarcode lida implicitamente com a validação de checksum calculando o checksum para os dados do código de barras e verificando-o em relação ao checksum codificado, garantindo a integridade dos dados durante o processo de varredura.
O que são filtros BarcodeEncoding?
Os filtros BarcodeEncoding no IronBarcode permitem especificar quais formatos de código de barras devem ser lidos ou ignorados durante a varredura, possibilitando um processamento de códigos de barras mais preciso e eficiente ao focar em tipos de códigos de barras específicos.
O IronBarcode pode realizar validação combinada?
Sim, o IronBarcode pode realizar validação combinada verificando tanto o checksum quanto o formato dos códigos de barras durante o processo de varredura, garantindo que apenas códigos de barras válidos e com formatação correta sejam processados.
É possível restringir leituras de códigos de barras por formato em C# com IronBarcode?
Sim, o IronBarcode permite restringir leituras de códigos de barras especificando os formatos que você deseja incluir ou excluir, garantindo que sua aplicação processe apenas os tipos de código de barras relevantes.
Por que a leitura sensível ao formato é importante no processamento de código de barras?
A leitura sensível ao formato é importante porque permite que sua aplicação processe apenas tipos específicos de códigos de barras, melhorando a velocidade e precisão ao ignorar formatos de código de barras irrelevantes ou não suportados.
Como implemento a leitura sensível ao formato no IronBarcode?
Para implementar a leitura sensível ao formato no IronBarcode, use filtros de BarcodeEncoding para especificar os formatos de código de barras que deseja ler. Isso pode ser feito através da API da biblioteca, que permite um controle preciso sobre os requisitos de leitura de código de barras.
Quais são os benefícios de usar o IronBarcode para a validação de códigos de barras?
O IronBarcode oferece vários benefícios para a validação de códigos de barras, incluindo verificação robusta de checksum, leitura sensível ao formato, e a capacidade de lidar com uma ampla gama de padrões de códigos de barras, garantindo alta precisão e flexibilidade no processamento de códigos de barras.

